Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 "<query>" --source` or `graft map` for orientation before raw grep.

## Bootstrap & First Session
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
Expand Down
6 changes: 6 additions & 0 deletions THIRD_PARTY_NOTICES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions aginit.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@
{
"package": "blader/humanizer",
"skills": ["humanizer"]
},
{
"package": "dietrichgebert/ponytail",
"skills": ["ponytail"]
}
]
},
Expand Down
7 changes: 7 additions & 0 deletions src/adapters/agents-md.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand Down Expand Up @@ -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,
Expand Down
12 changes: 12 additions & 0 deletions src/config/defaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,10 @@ export function getDefaultConfig(
package: 'blader/humanizer',
skills: ['humanizer']
},
{
package: 'dietrichgebert/ponytail',
skills: ['ponytail']
},
{
package: 'pbakaus/impeccable',
skills: ['impeccable']
Expand Down Expand Up @@ -127,6 +131,10 @@ export function getDefaultConfig(
{
package: 'blader/humanizer',
skills: ['humanizer']
},
{
package: 'dietrichgebert/ponytail',
skills: ['ponytail']
}
]
},
Expand Down Expand Up @@ -165,6 +173,10 @@ export function getDefaultConfig(
{
package: 'blader/humanizer',
skills: ['humanizer']
},
{
package: 'dietrichgebert/ponytail',
skills: ['ponytail']
}
]
},
Expand Down
10 changes: 10 additions & 0 deletions tests/agents-md.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
8 changes: 8 additions & 0 deletions tests/config.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down