diff --git a/AGENTS.md b/AGENTS.md index 89d27a0..c53d9a5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -17,6 +17,7 @@ Set up new or existing projects for AI coding agents in one command: AGENTS.md, Installed skills live in `.agents/skills/` (shared by Antigravity and Codex): - **Engineering**: the full stable Matt Pocock skill set — 27 skills covering `tdd`, `code-review`, `diagnosing-bugs`, `to-spec`, `to-tickets`, `implement-spec`, `pr`, `research`, `retro`, `triage`, and more (see `.agents/skills/`) - **Prose & Copy**: Use `humanizer` skill to eliminate AI writing tells and refine documentation. +- **Simplicity**: Use `ponytail` skill for the smallest complete change and to cut over-engineering. - **Codebase Graph**: Use `graft ask "" --source` or `graft map` for orientation before raw grep. ## Bootstrap & First Session diff --git a/CHANGELOG.md b/CHANGELOG.md index d160775..0b7d022 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ ### Added +- The [ponytail](https://github.com/DietrichGebert/ponytail) skill installs by default in every preset, and AGENTS.md points agents to it for the smallest complete change (#5). Existing configs keep their skill sources as written; add `dietrichgebert/ponytail` to `skills.sources` to opt in. + - `aginit doctor` verifies the agent-browser runtime when the project ships the skill: CLI presence, upstream `agent-browser doctor --quick --offline --json` findings, and Chrome sandbox prerequisites. ## 0.2.0 — 2026-10-09 diff --git a/README.md b/README.md index 913144d..955490f 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ aginit sets all of this up the same way every time, and you can re-run it whenev | | | |---|---| | **Instructions** | `AGENTS.md` with the project's real commands, invariants and a first-session playbook, shared by Antigravity, Codex and any agent that reads `AGENTS.md` | -| **Skills** | All 27 stable [Matt Pocock skills](https://github.com/mattpocock/skills) (`tdd`, `code-review`, `diagnosing-bugs`, `to-spec`, `to-tickets`, `implement-spec`, `pr`...) plus [humanizer](https://github.com/blader/humanizer), installed in `.agents/skills/` via the [Skills CLI](https://github.com/vercel-labs/skills) | +| **Skills** | All 27 stable [Matt Pocock skills](https://github.com/mattpocock/skills) (`tdd`, `code-review`, `diagnosing-bugs`, `to-spec`, `to-tickets`, `implement-spec`, `pr`...) plus [humanizer](https://github.com/blader/humanizer) and [ponytail](https://github.com/DietrichGebert/ponytail), installed in `.agents/skills/` via the [Skills CLI](https://github.com/vercel-labs/skills) | | **Codebase graph** | [Graft](https://www.npmjs.com/package/@nanonets/graft): `graft map` and `graft ask` give agents the relevant code spans before they grep | | **Test tooling** | Vitest for TypeScript projects, plus Playwright when a web framework is selected | | **Web extras** | [Impeccable](https://github.com/pbakaus/impeccable) for UI design and [agent-browser](https://github.com/vercel-labs/agent-browser) for visual QA, with its CLI and browser binaries installed so it works out of the box | diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index ed9ba65..a6bd34a 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -24,6 +24,12 @@ Each integrated upstream tool is governed by its respective authors and licenses - Author: Blake Robbins / Humanizer contributors - Repository: https://github.com/blader/humanizer +- **Ponytail** + - Project: Agent skill for the smallest complete change and less over-engineering + - Author: Dietrich Gebert + - License: MIT + - Repository: https://github.com/DietrichGebert/ponytail + - **Impeccable** - Project: Frontend craft & design system review skill - Author: Peter Bak-Hansen diff --git a/aginit.config.json b/aginit.config.json index 3093629..e35b61a 100644 --- a/aginit.config.json +++ b/aginit.config.json @@ -44,6 +44,10 @@ { "package": "blader/humanizer", "skills": ["humanizer"] + }, + { + "package": "dietrichgebert/ponytail", + "skills": ["ponytail"] } ] }, diff --git a/src/adapters/agents-md.ts b/src/adapters/agents-md.ts index 5f23337..9598f24 100644 --- a/src/adapters/agents-md.ts +++ b/src/adapters/agents-md.ts @@ -62,6 +62,12 @@ export function generateAgentsMarkdown( '- **Prose & Copy**: Use `humanizer` skill to eliminate AI writing tells and refine documentation.'; } + let simplicityCapability = ''; + if (skillInstalled('ponytail')) { + simplicityCapability = + '- **Simplicity**: Use `ponytail` skill for the smallest complete change and to cut over-engineering.'; + } + let uiCapability = ''; if (isWeb && skillInstalled('impeccable')) { uiCapability = @@ -109,6 +115,7 @@ export function generateAgentsMarkdown( : 'Skills installation is disabled in this configuration.', engineeringCapability || undefined, proseCapability || undefined, + simplicityCapability || undefined, specCapability || undefined, uiCapability || undefined, browserCapability || undefined, diff --git a/src/config/defaults.ts b/src/config/defaults.ts index 440da7f..2875349 100644 --- a/src/config/defaults.ts +++ b/src/config/defaults.ts @@ -82,6 +82,10 @@ export function getDefaultConfig( package: 'blader/humanizer', skills: ['humanizer'] }, + { + package: 'dietrichgebert/ponytail', + skills: ['ponytail'] + }, { package: 'pbakaus/impeccable', skills: ['impeccable'] @@ -127,6 +131,10 @@ export function getDefaultConfig( { package: 'blader/humanizer', skills: ['humanizer'] + }, + { + package: 'dietrichgebert/ponytail', + skills: ['ponytail'] } ] }, @@ -165,6 +173,10 @@ export function getDefaultConfig( { package: 'blader/humanizer', skills: ['humanizer'] + }, + { + package: 'dietrichgebert/ponytail', + skills: ['ponytail'] } ] }, diff --git a/tests/agents-md.test.ts b/tests/agents-md.test.ts index 51785e7..39db4a4 100644 --- a/tests/agents-md.test.ts +++ b/tests/agents-md.test.ts @@ -29,6 +29,16 @@ describe('AGENTS.md generation & safety', () => { expect(md).toContain('Prose & Copy'); }); + it('includes ponytail guidance only when the ponytail skill is configured', () => { + const config = getDefaultConfig('demo-generic', 'generic'); + expect(generateAgentsMarkdown(config)).toContain('`ponytail`'); + + config.skills.sources = config.skills.sources.filter( + (s) => s.package !== 'dietrichgebert/ponytail' + ); + expect(generateAgentsMarkdown(config)).not.toContain('ponytail'); + }); + it('reflects selected package manager in Essential Commands', () => { const configNpm = getDefaultConfig('demo-npm', 'web', { framework: 'vite', packageManager: 'npm' }); const mdNpm = generateAgentsMarkdown(configNpm); diff --git a/tests/config.test.ts b/tests/config.test.ts index 90a698b..3638c1b 100644 --- a/tests/config.test.ts +++ b/tests/config.test.ts @@ -32,6 +32,14 @@ describe('Configuration & Defaults', () => { expect(packages).toContain('vercel-labs/agent-browser'); }); + it('installs the core ponytail skill in every preset', () => { + for (const preset of ['web', 'cli', 'generic'] as const) { + const config = getDefaultConfig('app', preset); + const ponytail = config.skills.sources.find((s) => s.package === 'dietrichgebert/ponytail'); + expect(ponytail?.skills).toEqual(['ponytail']); + } + }); + it('supports explicit packageManager choices: npm, yarn, bun', () => { const configNpm = getDefaultConfig('app-npm', 'web', { packageManager: 'npm' }); expect(configNpm.packageManager).toBe('npm');