agentify-project
Make a project ready for AI agentic engineering by converging it toward a canonical agent-neutral structure — a lean AGENTS.md index with progressive disclosure, shared skills and gitignore hygiene. Re-runnable, and doubles as an audit.
Install
npx skills add https://github.com/eai-org/agent-toolkit/tree/main/skills/agentify-project
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install eai-org-agent-toolkit@llmmart
git clone https://github.com/eai-org/agent-toolkit.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole eai-org/agent-toolkit collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Agentify project
Converge a project — greenfield or half-way-there — toward the canonical agent-neutral structure specified in references/target-structure.md (read it before the audit), so a team of developers using different agents shares one lean, progressively disclosed setup. Re-running converges further and reports drift.
Invocation: /agentify-project [audit] [path]
audit— run step 1 only, print the findings and what a full run would change, modify nothing; the periodic drift check.path— target a subdirectory instead of the repo root (see Monorepos).
Principles
- Ask, don't enforce: prefer asking — all options shown, one recommended — over enforcing a choice, except for obvious easy wins (e.g. clear progressive-disclosure moves). Questions answerable from the codebase go to the codebase.
- One approval gate per destructive/bulk change; show diffs or proposals before applying; nothing happens behind the user's back. Never commit — suggest reviewing the diff and leave committing to the user.
- Generic: behavior is driven by references/agent-matrix.md — read
it whenever agent detection or an agent's specifics are needed. One documented exception, the
Claude carve-out: a team with no Claude users at all is rare, so Claude wiring (the
CLAUDE.md pointer, the
.claude/skills/links, the Claude gitignore entries) is applied unconditionally, never detection-gated.
1. Audit (read-only)
- Detect each target-structure area's state, and which agents are in use by their traces (matrix).
- Warn — never block — if the git working tree is dirty, so the user can commit first and keep the restructure reviewable as an isolated diff.
- Detect nested entry files (monorepo packages).
- Diff duplicated entry files (agents without include syntax) against AGENTS.md; divergence becomes a re-sync menu item — the one artifact class guaranteed to drift.
- Detect Claude-only assets (
.claude/commands/,.claude/agents/,.claude/rules/): report, leave. Flag.claude/rules/content as candidate governing-doc material (path-scoped rules are a Claude-specific disclosure mechanism); legacy commands may get a one-off note that they could become skills — the conversion itself is out of scope. - Record entry-file line counts: menu annotations now, coarse before-figure for
/context-checkuplater.
Done when every target-structure area has a detected state and every agent trace found is accounted for.
2. Menu
Multi-select over the applicable change areas only — entry-file indirection, AGENTS.md slimming into docs, skills relocation + symlinks, gitignore hygiene, planning dir, onboarding doc, README pointer — each annotated with audit findings (e.g. "CLAUDE.md, 180 lines, no AGENTS.md → indirection + slimming"). "All" is the first and recommended option. Report already-converged areas ✓ and omit them from the choices. Every area is independently skippable: a team may deliberately stay Claude-only (no multi-agent support) — then apply the selected areas within the Claude-only variant in target-structure.md.
3. Execute — live, step by step
Apply each accepted area immediately, behind its approval gate — no migration-plan artifact: the moves are mostly mechanical, and re-running converges. Suggested order: entry files → slimming/docs → skills → gitignore → extras.
Entry files. Invariant covering every starting state: the content of all existing entry
files — any agent's, including a divergent CLAUDE.md + AGENTS.md pair — feeds the slimming
mapping; AGENTS.md ends canonical; every detected entry file ends as a pointer (or duplicated
content, per matrix), CLAUDE.md always included. Common case (CLAUDE.md exists, no AGENTS.md):
rename it to AGENTS.md — git detects the rename — and recreate CLAUDE.md as @AGENTS.md plus any
genuinely Claude-specific remainder. AGENTS.md-only and third-party-only repos: same invariant —
create the missing pointer(s), seed AGENTS.md from whatever entry-file content exists. Greenfield
(no entry file of any agent): minimal seed from cheap reconnaissance (README, package manifest /
build files) — one-liner, verified build/test/run commands, planning-dir convention — plus
the pointer; deep doc generation is out of scope, the structure grows later via /self-improve
and /memory-doctor.
Slimming (mapping-first). Draft one full mapping: each block → stays / moves to existing doc
X / new doc Y, applying the keep-vs-extract test (target-structure §1); where a block's relevance
is verifiable from the codebase, check the code instead of asking. Present the mapping with
obvious calls pre-decided; walk only doubtful blocks as individual questions, each with a
recommendation, worded via explain-in-simple-language when available; one approval gate before
any edit. Offer a compaction pass on blocks that stay; write extracted docs compact from birth —
via compact-docs-writer when installed, else inline with its core principle (least text, zero
information loss). Each extracted doc gets a plain-link index entry in AGENTS.md with its "read
when…" hook.
Skills. Move real dirs, create relative symlinks (committed), per matrix; leave foreign/personal links untouched and report them.
Gitignore. Show the proposed block as a diff; apply on approval.
Extras. Planning dir + AGENTS.md convention line; onboarding doc; README pointer.
Done when every selected area is applied or explicitly skipped by the user.
4. Verify (mechanical)
Every AGENTS.md reference resolves; symlinks point at real dirs; git check-ignore confirms each
ignore entry; CLAUDE.md pointer intact; duplicated entry files match AGENTS.md. Close with a
short converged-state report of what changed.
5. Close
Suggest, each only when installed and applicable — skip silently otherwise:
/memory-doctor— when the agent accumulates project memory (e.g. auto memory) — to relocate saved lessons into the new docs structure and share them with the team; it no-ops harmlessly on empty memory, so no content check is needed./context-checkup— measure what now auto-loads, with the audit's entry-file line counts as the coarse before-figure.
Monorepos
Full treatment targets the repo root. Nested entry files are offered only the cheap mechanical
indirection (nested CLAUDE.md → nested AGENTS.md + pointer); defer nested slimming to a re-run
with that subdirectory as the path argument.
Files (agent-toolkit)
-
references
-
agent-matrix.md 2.7 KB
# Agent matrix What agentify-project knows about each agent. Deliberately not a pre-researched database: only the Claude row ships verified. Any other agent's facts are researched **at runtime** against that agent's current official docs, only when the agent is detected (or named by the user) and a selected area needs its specifics. Confirm research findings with the user before use; inconclusive research means ask — never guess. Persist recipes that matter to teammates in the project's onboarding doc. ## Columns | Column | Content | | --- | --- | | Agent | Name | | Detection traces | Files/dirs that indicate the agent is used in this repo | | Entry file(s) | e.g. CLAUDE.md, GEMINI.md, `.github/copilot-instructions.md` | | Include syntax | The pointer mechanism, or "none → duplicate content" | | Project skills dir | e.g. `.claude/skills/`; or "reads `.agents/skills` natively → no link" | | Gitignore entries | Agent-specific artifact dirs/files worth ignoring | ## Verified rows | Agent | Detection traces | Entry file(s) | Include syntax | Project skills dir | Gitignore entries | | --- | --- | --- | --- | --- | --- | | Claude Code | `CLAUDE.md`, `.claude/` | `CLAUDE.md` (reads it, **not** AGENTS.md) | `@AGENTS.md` import; Claude-specific lines may follow it | `.claude/skills/` | `.claude/plans/**`, `.claude/worktrees/**`, `.claude/settings.local.json`, `.claude/__pycache__`, `CLAUDE.local.md` | Claude notes (verified against the official memory docs, 2026-08): - `@` imports load at launch — recursive, max 4 hops, relative to the containing file — and do **not** reduce context; hence AGENTS.md references docs with plain links, never imports. Only `@`-prefixed paths import; backticked paths do not. - Windows symlinks need admin/Developer Mode, so the `@AGENTS.md` import beats a symlink as the default CLAUDE.md pointer. - `.claude/rules/` (path-scoped via `paths:` frontmatter) and nested CLAUDE.md files are Claude-specific progressive disclosure — rules content is candidate material for governing docs. ## Detection traces to scan for Well-known traces of agents commonly met — indicative starting points, not a research checklist: | Agent | Traces | | --- | --- | | GitHub Copilot | `.github/copilot-instructions.md` | | Cursor | `.cursorrules`, `.cursor/` | | Gemini CLI | `GEMINI.md`, `.gemini/` | | Windsurf | `.windsurfrules`, `.windsurf/` | | Cline | `.clinerules` | | OpenCode | `opencode.json`, `.opencode/` | Codex, Kimi Code, Amp and others may leave no unique project trace (several agents read the neutral AGENTS.md natively); when the user names one, research it like any detected agent. AGENTS.md itself is agent-neutral — never treat it as a trace. -
target-structure.md 5.1 KB
# Target structure The converged end state agentify-project measures against and converges toward. The audit detects each area's state; the menu offers the gaps. ## 1. AGENTS.md — canonical lean index At repo root (plural, per the agents.md convention). Maximally lean — only the irreducible minimum: project one-liner, universal build/test/run commands, hard structural constraints (layout, module boundaries), the linked docs index, and the planning-dir convention. Keep-vs-extract test per block: *part of that minimum?* Everything else — even generic categories nearly every session reads (testing, conventions, architecture, …) — gets its own governing doc: often-loaded linked docs are fine, a fat entry file is not. Reference docs as **plain markdown links with a one-line "read when…" hook each**. Guiding reference for leanness: https://www.aihero.dev/a-complete-guide-to-agents-md Never reference docs with `@import` syntax: some agents load `@` imports at launch, recursively, which would silently defeat progressive disclosure (see the Claude row in [agent-matrix.md](agent-matrix.md)). Only `@`-prefixed paths are imports — plain paths and markdown links never import; to mention an `@path` literally, wrap it in backticks. ## 2. CLAUDE.md — pointer Contains `@AGENTS.md`. Mandatory, not transitional, and never detection-gated (Claude carve-out): Claude Code reads CLAUDE.md, **not** AGENTS.md, and its official docs recommend exactly this pointer. Genuinely Claude-only instructions may legitimately stay below the import (official pattern) — preserve them there instead of force-moving. A CLAUDE.md→AGENTS.md symlink also works but needs Developer Mode on Windows and forbids Claude-specific additions, so the import is the default. ## 3. Other agents' entry files — detect and convert only GEMINI.md, `.github/copilot-instructions.md`, `.cursorrules`, `.cursor/rules`, …: convert files already present in the repo into pointers to AGENTS.md using that agent's include syntax, or duplicated content where includes are unsupported (per matrix). Never scaffold an entry file for an agent with no traces in the repo. ## 4. Governing docs New agent-facing docs default to `.agents/docs/`; the location is always confirmed with the user. Content-driven — a doc exists only when content exists for it (blocks extracted from entry files, or relocated later via `/memory-doctor`). During extraction, propose a standard taxonomy as candidate homes (architecture, conventions, testing, workflow, …) but **never create an empty stub**. Existing docs elsewhere (`docs/architecture.md`, `CONTRIBUTING.md`, …) are never moved silently: ask, showing all options — reference in place / consolidate into `.agents/docs/` — with a recommendation; referencing in place is the usual one, progressive disclosure does not care about the path. ## 5. Skills Canonical dirs at `.agents/skills/<name>/`, plus committed **relative symlinks, one per skill** (per-skill choice; Claude-only skills can coexist): - `.claude/skills/<name>` → always (Claude carve-out). - Other agents' project-level skills dirs → only for detected agents, per matrix; agents that read `.agents/skills` natively need no link. - Existing real skill dirs under `.claude/skills/` move to `.agents/skills/` and are replaced by symlinks. Symlinks pointing **outside** the repo (personal installs, e.g. into `~/.agents`) are left alone and merely reported. The Windows symlink caveat is documented once, in the onboarding doc (§8). ## 6. .gitignore Agent-neutral baseline (`.agents/plans/**`) plus per-agent artifact entries from the matrix — Claude's always (carve-out), other agents' only when detected. Always presented as a diff for approval. ## 7. Planning directory `.agents/plans/`, gitignored, with AGENTS.md stating the convention so every teammate's agent saves plans to the same place. Converged = gitignore entry + AGENTS.md convention line, **not** directory existence: an empty gitignored dir never reaches teammates' clones, so create the dir opportunistically when missing. ## 8. Team onboarding doc In the governing-docs dir: the layout explained; hookup recipes for the agents wired so far (accumulated from the skill's runtime research); a generic recipe for any other agent — point it at AGENTS.md via its entry-file mechanism, or re-run `/agentify-project` to research and wire it — which keeps detect-only from becoming a chicken-and-egg trap for agents with no repo traces yet; and the Windows symlink caveat (git `core.symlinks` + Developer Mode). ## 9. README pointer A two-line section in README.md linking to the onboarding/layout doc, so humans who never open hidden dirs can discover the structure. ## Claude-only variant A team may deliberately stay Claude-only; the selected areas then apply within that layout: CLAUDE.md stays the canonical index (same slimming rules and plain-link references), the skills area is not applicable (real dirs stay under `.claude/skills/`), the planning dir defaults to `.claude/plans/`, and doc locations are confirmed with the user with a Claude-conventional default (e.g. `docs/` or `.claude/docs/`).
-
-
SKILL.md 6.8 KB
--- name: agentify-project description: Make a project ready for AI agentic engineering by converging it toward a canonical agent-neutral structure — a lean AGENTS.md index with progressive disclosure, shared skills and gitignore hygiene. Re-runnable, and doubles as an audit. disable-model-invocation: true type: flow license: MIT metadata: version: "0.2" --- # Agentify project Converge a project — greenfield or half-way-there — toward the canonical agent-neutral structure specified in [references/target-structure.md](references/target-structure.md) (read it before the audit), so a team of developers using different agents shares one lean, progressively disclosed setup. Re-running converges further and reports drift. Invocation: `/agentify-project [audit] [path]` - `audit` — run step 1 only, print the findings and what a full run would change, modify nothing; the periodic drift check. - `path` — target a subdirectory instead of the repo root (see Monorepos). ## Principles - **Ask, don't enforce**: prefer asking — all options shown, one recommended — over enforcing a choice, except for obvious easy wins (e.g. clear progressive-disclosure moves). Questions answerable from the codebase go to the codebase. - One approval gate per destructive/bulk change; show diffs or proposals before applying; nothing happens behind the user's back. Never commit — suggest reviewing the diff and leave committing to the user. - Generic: behavior is driven by [references/agent-matrix.md](references/agent-matrix.md) — read it whenever agent detection or an agent's specifics are needed. One documented exception, the **Claude carve-out**: a team with no Claude users at all is rare, so Claude wiring (the CLAUDE.md pointer, the `.claude/skills/` links, the Claude gitignore entries) is applied unconditionally, never detection-gated. ## 1. Audit (read-only) - Detect each target-structure area's state, and which agents are in use by their traces (matrix). - Warn — never block — if the git working tree is dirty, so the user can commit first and keep the restructure reviewable as an isolated diff. - Detect nested entry files (monorepo packages). - Diff duplicated entry files (agents without include syntax) against AGENTS.md; divergence becomes a re-sync menu item — the one artifact class guaranteed to drift. - Detect Claude-only assets (`.claude/commands/`, `.claude/agents/`, `.claude/rules/`): report, leave. Flag `.claude/rules/` content as candidate governing-doc material (path-scoped rules are a Claude-specific disclosure mechanism); legacy commands may get a one-off note that they could become skills — the conversion itself is out of scope. - Record entry-file line counts: menu annotations now, coarse before-figure for `/context-checkup` later. Done when every target-structure area has a detected state and every agent trace found is accounted for. ## 2. Menu Multi-select over the applicable change areas only — entry-file indirection, AGENTS.md slimming into docs, skills relocation + symlinks, gitignore hygiene, planning dir, onboarding doc, README pointer — each annotated with audit findings (e.g. "CLAUDE.md, 180 lines, no AGENTS.md → indirection + slimming"). **"All" is the first and recommended option.** Report already-converged areas ✓ and omit them from the choices. Every area is independently skippable: a team may deliberately stay Claude-only (no multi-agent support) — then apply the selected areas within the Claude-only variant in target-structure.md. ## 3. Execute — live, step by step Apply each accepted area immediately, behind its approval gate — no migration-plan artifact: the moves are mostly mechanical, and re-running converges. Suggested order: entry files → slimming/docs → skills → gitignore → extras. **Entry files.** Invariant covering every starting state: the content of **all** existing entry files — any agent's, including a divergent CLAUDE.md + AGENTS.md pair — feeds the slimming mapping; AGENTS.md ends canonical; every detected entry file ends as a pointer (or duplicated content, per matrix), CLAUDE.md always included. Common case (CLAUDE.md exists, no AGENTS.md): rename it to AGENTS.md — git detects the rename — and recreate CLAUDE.md as `@AGENTS.md` plus any genuinely Claude-specific remainder. AGENTS.md-only and third-party-only repos: same invariant — create the missing pointer(s), seed AGENTS.md from whatever entry-file content exists. Greenfield (no entry file of any agent): minimal seed from cheap reconnaissance (README, package manifest / build files) — one-liner, **verified** build/test/run commands, planning-dir convention — plus the pointer; deep doc generation is out of scope, the structure grows later via `/self-improve` and `/memory-doctor`. **Slimming (mapping-first).** Draft one full mapping: each block → stays / moves to existing doc X / new doc Y, applying the keep-vs-extract test (target-structure §1); where a block's relevance is verifiable from the codebase, check the code instead of asking. Present the mapping with obvious calls pre-decided; walk **only doubtful blocks** as individual questions, each with a recommendation, worded via `explain-in-simple-language` when available; one approval gate before any edit. Offer a compaction pass on blocks that stay; write extracted docs compact from birth — via `compact-docs-writer` when installed, else inline with its core principle (least text, zero information loss). Each extracted doc gets a plain-link index entry in AGENTS.md with its "read when…" hook. **Skills.** Move real dirs, create relative symlinks (committed), per matrix; leave foreign/personal links untouched and report them. **Gitignore.** Show the proposed block as a diff; apply on approval. **Extras.** Planning dir + AGENTS.md convention line; onboarding doc; README pointer. Done when every selected area is applied or explicitly skipped by the user. ## 4. Verify (mechanical) Every AGENTS.md reference resolves; symlinks point at real dirs; `git check-ignore` confirms each ignore entry; CLAUDE.md pointer intact; duplicated entry files match AGENTS.md. Close with a short converged-state report of what changed. ## 5. Close Suggest, each only when installed and applicable — skip silently otherwise: - `/memory-doctor` — when the agent accumulates project memory (e.g. auto memory) — to relocate saved lessons into the new docs structure and share them with the team; it no-ops harmlessly on empty memory, so no content check is needed. - `/context-checkup` — measure what now auto-loads, with the audit's entry-file line counts as the coarse before-figure. ## Monorepos Full treatment targets the repo root. Nested entry files are offered only the cheap mechanical indirection (nested CLAUDE.md → nested AGENTS.md + pointer); defer nested slimming to a re-run with that subdirectory as the `path` argument.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.