This document explains how ACF (Agent Context Forge) is compatible with all major AI coding agents, how it complies with the Agent Skills specification, and how to install it into any supported agent's project.
ACF is designed to be agent-agnostic. The skills are written as plain Markdown files with YAML frontmatter, following the Agent Skills specification. Any agent that loads skills from a local directory can consume ACF.
The following agents are explicitly supported:
| Agent | Vendor / Project | Skill directory |
|---|---|---|
| Claude Code | Anthropic | .claude/skills/ |
| Cursor | Cursor | .cursor/skills/ |
| Codex CLI | OpenAI | .codex/skills/ |
| OpenCode | OpenCode (OSS) | .opencode/skills/ |
| OpenClaw | OpenClaw (OSS) | .agents/skills/ |
| Devin | Cognition | .devin/skills/ |
Note on OpenClaw: OpenClaw uses a generic
.agents/skills/directory that is shared across agent runtimes that follow the common-agents convention. ACF installs into it the same way as the others.
For agents that do not support the SKILL.md skill format, ACF ships an
MCP server that exposes the same pipeline as standard MCP
tools over stdio (JSON-RPC 2.0). Any agent that speaks the Model Context
Protocol can consume ACF this way — no skill loader required.
| Agent | MCP support | ACF via MCP |
|---|---|---|
| Claude Desktop / Claude Code | Yes (native) | acf-mcp in mcpServers config |
| Continue | Yes | acf-mcp in Continue's MCP config |
| Zed | Yes | acf-mcp in Zed's MCP settings |
| GitHub Copilot (Copilot Chat) | Yes (MCP support added 2025) | acf-mcp in Copilot MCP config |
| Aider | Yes (via MCP) | acf-mcp in Aider's MCP config |
| Cursor | Yes (also supports skills) | acf-mcp as an alternative to skills |
| Codex CLI | Yes (also supports skills) | acf-mcp as an alternative to skills |
| OpenCode | Yes (also supports skills) | acf-mcp as an alternative to skills |
| Devin | Yes (also supports skills) | acf-mcp as an alternative to skills |
The MCP server has zero Python dependencies (standard library only) and
uses the gh CLI for GitHub operations. See
mcp-server/README.md for installation and
configuration.
| Tool | ACF phase |
|---|---|
acf_graph_scope |
0 — dependency graph + blast radius |
acf_context_load |
1 — compressed context snapshot |
acf_stack_audit |
2 — orphan PRs, stale issues, close gaps |
acf_issue_craft |
3 — craft a contextualized issue |
acf_pr_context |
4 — build a PR body with issue context |
acf_compact |
7 — Kimi-inspired context compaction |
acf_caveman |
8 — extreme compression (<500 tokens) |
The Agent Skills specification defines a portable
format for AI agent skills. A skill is a directory containing a SKILL.md
file with:
- YAML frontmatter delimited by
---lines, containing:name— a unique identifier, lowercase letters and hyphens only, maximum 64 characters.description— a human-readable summary of what the skill does and when to use it, maximum 1024 characters.
- A Markdown body describing the skill's instructions, kept under 500 lines so it fits comfortably in an agent's context window.
Every ACF skill file follows this format:
- Frontmatter present — every
SKILL.mdstarts with a----delimited YAML block containingnameanddescription. nameconvention — names are lowercase with hyphens (acf,context-load,stack-audit,issue-craft,pr-context,frontend-preview,label-metadata,compaction,caveman). The directory name uses a numeric prefix (01-context-load/) for ordering, while thenamefield inside the frontmatter is the bare skill name.descriptionlength — descriptions are kept well under 1024 characters and include trigger phrases so the agent knows when to invoke the skill.- Body length — every skill body is under 500 lines.
- Portable structure — each skill is a self-contained directory with a
single
SKILL.md, so it can be copied into any agent's skill folder.
You can verify compliance at any time by running:
./scripts/validate-skills.shThis checks every SKILL.md in the repository against the rules above.
Each agent loads skills from a specific directory inside the target project.
ACF ships an orchestrator (acf/) plus 9 sub-skills (01-context-load/
through 09-graph-scope/). The installer copies all of them into the chosen
agent's skill directory.
| Agent | Skill directory (relative to project root) |
|---|---|
| Devin | .devin/skills/ |
| Claude Code | .claude/skills/ |
| Cursor | .cursor/skills/ |
| Codex CLI | .codex/skills/ |
| OpenCode | .opencode/skills/ |
| OpenClaw | .agents/skills/ |
After installation, the target project contains, for example:
.claude/skills/
├── acf/ # Orchestrator
│ ├── SKILL.md
│ └── references/ # Progressive disclosure (loaded on demand)
│ ├── phase-details.md
│ ├── installation.md
│ └── compaction-tiers.md
├── 01-context-load/ # Phase 1
│ └── SKILL.md
├── 02-stack-audit/ # Phase 2
│ └── SKILL.md
├── 03-issue-craft/ # Phase 3
│ └── SKILL.md
├── 04-pr-context/ # Phase 4
│ └── SKILL.md
├── 05-frontend-preview/ # Phase 5
│ └── SKILL.md
├── 06-label-metadata/ # Phase 6
│ └── SKILL.md
├── 07-compaction/ # Phase 7
│ └── SKILL.md
├── 08-caveman/ # Phase 8
│ └── SKILL.md
└── 09-graph-scope/ # Phase 0
└── SKILL.md
The install.sh script at the repository root installs ACF into one or more
agent directories in a target project.
Installs into every agent directory that already exists in the target project:
./install.sh /path/to/target-projectCreates every supported agent directory if it does not exist and installs into all of them:
./install.sh /path/to/target-project --allInstalls only into the named agent's directory (creating it if needed).
Valid names: devin, claude, cursor, codex, agents, opencode.
./install.sh /path/to/target-project --agent claude- Idempotent — safe to re-run; existing files are overwritten in place.
- Validates input — the target path must exist before anything is copied.
- Exit codes —
0on success,1on error. - Safe — uses
set -euo pipefailand never touches repositories other than the target you specify.
If you prefer not to use the installer, you can copy the files directly:
# Orchestrator + all 9 sub-skills (skills/ is the source of truth)
cp -r skills/* /target-project/.claude/skills/Repeat for each agent directory you want to populate.
Both ACF and OpenCode ship a skill called "caveman", and both share the spirit of extreme compression — reducing verbosity to the bare minimum. However, they operate on different sides of the agent's context window and do not collide with each other.
| Aspect | ACF caveman (phase 8) | OpenCode caveman |
|---|---|---|
| Directory | 08-caveman/ |
caveman/ |
| What it compresses | The input context snapshot | The output model communication |
| Purpose | Shrink the accumulated project context (architecture, stack, tests, CI) to under 500 tokens so the agent can keep working inside a small context budget. | Shrink the agent's responses to a terse, telegraphic style to save output tokens and reduce noise. |
| When it triggers | After context-load, when compaction (phase 7) is not enough and the token budget is critical. | When the user or runtime requests maximally compressed output. |
| Direction | Context → Agent (inbound) | Agent → User/Runtime (outbound) |
Because ACF uses the numeric-prefixed directory 08-caveman/ while OpenCode
uses the bare caveman/ directory, no directory collision occurs when
both are installed into the same project. An agent can load both skills
simultaneously: ACF's caveman compresses what the agent reads, and
OpenCode's caveman compresses what the agent writes.
See docs/COMPACTION.md for the full design notes on
ACF's compaction (phase 7) and caveman (phase 8) modes.
| Agent | Skill directory | Installer --agent name |
|---|---|---|
| Devin | .devin/skills/ |
devin |
| Claude Code | .claude/skills/ |
claude |
| Cursor | .cursor/skills/ |
cursor |
| Codex CLI | .codex/skills/ |
codex |
| OpenClaw | .agents/skills/ |
agents |
| OpenCode | .opencode/skills/ |
opencode |
The following matrix tracks the verification status of ACF across all 6 supported agents. There are two dimensions:
- Skills discovered — can the agent find and load all 10 SKILL.md files
after installation? This is automated and verified by
scripts/test-compatibility.sh. - Triggers correctly — does the agent actually invoke the orchestrator
and sub-skills at the right moments based on the trigger phrases in each
descriptionfield? This requires a live agent session and cannot be automated from the repository.
| Agent | Version | Install path | Skills discovered | Triggers correctly | Notes |
|---|---|---|---|---|---|
| Devin | 0.3.0 | .devin/skills/ |
PASS (automated) | NEEDS HUMAN VERIFICATION | Native agent; .devin/skills/ is the canonical mirror source |
| Claude Code | 0.3.0 | .claude/skills/ |
PASS (automated) | NEEDS HUMAN VERIFICATION | Claude.ai uploads limit descriptions to ~200 chars; orchestrator desc is 190 chars, compatible |
| Cursor | 0.3.0 | .cursor/skills/ |
PASS (automated) | NEEDS HUMAN VERIFICATION | Loads skills from .cursor/skills/; no known description length limit beyond the 1024-char spec |
| Codex CLI | 0.3.0 | .codex/skills/ |
PASS (automated) | NEEDS HUMAN VERIFICATION | OpenAI Codex CLI follows the agentskills.io spec; no known quirks |
| OpenClaw | 0.3.0 | .agents/skills/ |
PASS (automated) | NEEDS HUMAN VERIFICATION | Uses generic .agents/skills/ shared directory (common-agents convention) |
| OpenCode | 0.3.0 | .opencode/skills/ |
PASS (automated) | NEEDS HUMAN VERIFICATION | Ships its own caveman skill in caveman/ (bare dir); ACF uses 08-caveman/ — no collision |
# Test all 6 agents (installs to a temp dir, verifies each):
bash scripts/test-compatibility.sh
# Test a single agent in a specific project:
bash scripts/test-compatibility.sh devin /path/to/project
# Run internal consistency checks (no install needed):
bash scripts/test-compatibility.sh --self-testThe automated tester verifies, for each agent:
- The skill directory exists after installation
- All 10 SKILL.md files are present (1 orchestrator + 9 sub-skills)
- Every SKILL.md has parseable YAML frontmatter with
name,description, andmetadata.versionfields - The
references/directory (progressive disclosure files) is installed alongside the orchestrator - All
metadata.versionfields match the repo'sVERSIONfile
Devin is the canonical development agent for ACF. The .devin/skills/
directory in the repository is the source mirror — install.sh copies
from .devin/skills/acf/ (orchestrator) and skills/ (sub-skills) into the
target. No known compatibility issues. All 10 skills install and validate
cleanly.
Claude Code loads skills from .claude/skills/ in the project root. When
uploading skills to Claude.ai (the web interface), description fields are
limited to approximately 200 characters. ACF's orchestrator description is
190 characters (measured after block-scalar folding), which is within
the limit. All sub-skill descriptions are shorter. No truncation risk.
Cursor follows the agentskills.io spec and loads skills from
.cursor/skills/. No known description length restrictions beyond the
1024-character spec maximum. All 10 skills install and validate cleanly.
OpenAI's Codex CLI uses .codex/skills/ and follows the agentskills.io
spec. No known quirks. All 10 skills install and validate cleanly.
OpenClaw uses the generic .agents/skills/ directory, following the
common-agents convention. This directory may be shared across multiple
agent runtimes. ACF installs into it identically to the other agents. No
known compatibility issues.
OpenCode ships its own caveman skill in a bare caveman/ directory.
ACF's caveman skill lives in 08-caveman/ (numeric-prefixed), so no
directory collision occurs when both are installed in the same project.
The two caveman skills serve different purposes (see
The "Caveman" Naming section above).
All 10 ACF skills install and validate cleanly alongside OpenCode's
native skills.
To complete the "triggers correctly" column for an agent, follow this protocol in a live session:
- Install ACF into a test project:
./install.sh /test-project --agent <name> - Open the agent in the test project
- Issue a trigger phrase from the orchestrator description (e.g., "create an issue for...", "audit the stack", "scope this change")
- Verify the agent discovers and invokes the
acforchestrator skill - Verify the orchestrator delegates to the appropriate sub-skill
(e.g.,
context-loadfor context gathering) - Record the result (PASS/FAIL) and any quirks in the matrix above
Trigger phrases are embedded in each skill's description frontmatter
field. See the individual SKILL.md files for the exact phrases each
skill responds to.