Skip to content
Open
Show file tree
Hide file tree
Changes from 2 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
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Added

- IBM Bob is now a stable target for Agent Skills, lifecycle hooks, MCP servers,
and `AGENTS.md` compilation, with documented project and user-scope paths.
(#2909)
Comment thread
WilliamK112 marked this conversation as resolved.
Outdated
- gh-aw's shared APM import now supports `token-source: github-token`; after consumers re-vendor the workflow, its read-only current-repository identity can fetch same-repository private packages, while `cascade` remains the default and cross-repository packages still require a dedicated token or GitHub App. (#2706)
- OpenAPM v0.1 adds `req-pl-018` for dependency-policy identity casing and amends `req-rs-016` clause (3), the Section 6.4 merge rules, and the Section 6.5 pattern grammar so repository identity and policy matching cannot diverge; Section 11.2 item 6 now requires the per-host case rule in `CONFORMANCE.md`. (#2706)

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Think `package.json`, `requirements.txt`, or `Cargo.toml` — but for AI agent configuration.

GitHub Copilot | Claude Code | Grok Build | Cursor | OpenCode | Codex | Gemini | Windsurf | Kiro
GitHub Copilot | Claude Code | Grok Build | Cursor | OpenCode | Codex | Gemini | Windsurf | Kiro | IBM Bob

**[Documentation](https://microsoft.github.io/apm/)** · **[Quick Start](https://microsoft.github.io/apm/getting-started/quick-start/)** · **[CLI Reference](https://microsoft.github.io/apm/reference/cli-commands/)** · **[v0.29 Roadmap](https://github.com/microsoft/apm/milestone/17)**

Expand Down Expand Up @@ -67,7 +67,7 @@ One command, no configuration -- VS Code and GitHub Copilot read the file automa

One `apm.yml` describes every primitive your agents need — instructions, skills, prompts, agents, hooks, plugins, MCP servers — and `apm install` reproduces the exact same setup across every client on every machine. `apm.lock.yaml` pins the resolved tree the way `package-lock.json` does for npm.

- **[One manifest for everything](https://microsoft.github.io/apm/reference/primitive-types/)** -- declared once, deployed across Copilot, Claude, Grok Build, Cursor, OpenCode, Codex, Gemini, Windsurf, Kiro
- **[One manifest for everything](https://microsoft.github.io/apm/reference/primitive-types/)** -- declared once, deployed across Copilot, Claude, Grok Build, Cursor, OpenCode, Codex, Gemini, Windsurf, Kiro, and IBM Bob
- **[Install from anywhere](https://microsoft.github.io/apm/guides/dependencies/)** — GitHub, GitLab, Bitbucket, Azure DevOps, GitHub Enterprise, Gitea, Gogs, any git host
- **[Transitive dependencies](https://microsoft.github.io/apm/guides/dependencies/)** — packages can depend on packages; APM resolves the full tree
- **[Author plugins](https://microsoft.github.io/apm/guides/plugins/)** — build Copilot, Claude, and Cursor plugins with dependency management, then export standard `plugin.json`
Expand Down Expand Up @@ -161,7 +161,7 @@ apm marketplace add github/awesome-copilot
apm install azure-cloud-development@awesome-copilot
```

Or add an MCP server (wired into Copilot, Claude, Cursor, Codex, OpenCode, Gemini, Windsurf, and Kiro):
Or add an MCP server (wired into Copilot, Claude, Cursor, Codex, OpenCode, Gemini, Windsurf, Kiro, and IBM Bob):

```bash
apm install --mcp io.github.github/github-mcp-server --transport http # connects over HTTPS
Expand Down
28 changes: 15 additions & 13 deletions docs/src/content/docs/concepts/primitives-and-targets.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ sidebar:
order: 3
---

A **primitive** is a unit of agent context APM can manage: instructions, prompts, agents, skills, hooks, commands, plugins, and MCP servers. A **target** is a harness APM compiles primitives for: Copilot, Claude, Grok Build, Cursor, Codex, Gemini, OpenCode, Windsurf, and Kiro, with Antigravity and Hermes available as explicit-only targets. The matrix below is the full reach map. For any primitive X and harness Y, it tells you whether Y receives X natively, receives it after APM transforms it, or does not receive it at all.
A **primitive** is a unit of agent context APM can manage: instructions, prompts, agents, skills, hooks, commands, plugins, and MCP servers. A **target** is a harness APM compiles primitives for: Copilot, Claude, Grok Build, Cursor, Codex, Gemini, OpenCode, Windsurf, Kiro, and IBM Bob, with Antigravity and Hermes available as explicit-only targets. The matrix below is the full reach map. For any primitive X and harness Y, it tells you whether Y receives X natively, receives it after APM transforms it, or does not receive it at all.

This page is the canonical reference. Tutorials and how-tos link here; do not duplicate.

Expand Down Expand Up @@ -78,7 +78,7 @@ GitHub Copilot CLI canvas extensions: a directory bundle whose entry file is `ex

## Target catalogue

Each target is identified by a slug used in `apm.yml`'s `targets:` field or on the `--target` flag. `apm.yml` accepts the canonical targets (`copilot`, `claude`, `grok-build`, `cursor`, `opencode`, `codex`, `gemini`, `antigravity`, `windsurf`, `kiro`, `agent-skills`, `hermes`). `agent-skills`, `antigravity`, and `hermes` can be selected explicitly or listed in `apm.yml`, but they are not auto-detected or included in `all`. The output directory is where APM writes deployed primitives.
Each target is identified by a slug used in `apm.yml`'s `targets:` field or on the `--target` flag. `apm.yml` accepts the canonical targets (`copilot`, `claude`, `grok-build`, `cursor`, `opencode`, `codex`, `gemini`, `antigravity`, `windsurf`, `kiro`, `bob`, `agent-skills`, `hermes`). `agent-skills`, `antigravity`, and `hermes` can be selected explicitly or listed in `apm.yml`, but they are not auto-detected or included in `all`. The output directory is where APM writes deployed primitives.

| Slug | Output directory | Compile family |
|---|---|---|
Expand All @@ -92,6 +92,7 @@ Each target is identified by a slug used in `apm.yml`'s `targets:` field or on t
| `opencode` | `.opencode/` (project), `~/.config/opencode/` (user) | agents |
| `windsurf` | `.windsurf/` (project), `~/.codeium/windsurf/` (user) | agents |
| `kiro` | `.kiro/` (project and user) | agents |
| `bob` | `.bob/` (project and user) | agents |
| `hermes` | `.agents/` (project), `~/.hermes/` (user) | agents |

Notes per target:
Expand All @@ -106,6 +107,7 @@ Notes per target:
- **opencode** -- OpenCode. No hooks support.
- **windsurf** -- Windsurf / Cascade. No native agents primitive -- Cascade auto-invokes any `SKILL.md` by its `description:` frontmatter, so personas ship as skills. Workflows are the harness's name for commands.
- **kiro** -- Kiro IDE/CLI v3. Instructions become steering files, skills stay as `SKILL.md` folders, hooks are individual JSON files, MCP lands in `.kiro/settings/mcp.json`, and agents deploy to `.kiro/agents/<stem>.md` with frontmatter filtered to `description`, `model`, and `tools` only.
- **bob** -- IBM Bob. Skills deploy as `SKILL.md` folders; hooks merge into `.bob/settings.json` or `~/.bob/settings/settings.json`; MCP uses `.bob/mcp.json` or `~/.bob/mcp.json`. Compiled instructions use the project-root `AGENTS.md` that Bob reads automatically.
- **hermes** -- Hermes Agent. Stable explicit-only target; skills use `.agents/skills/` at project scope and `~/.hermes/skills/` at user scope. Compiled instructions use `AGENTS.md`; MCP servers use `~/.hermes/config.yaml`.

## The compatibility matrix
Expand All @@ -117,17 +119,17 @@ Rows are primitives, columns are harnesses. Cell legend:
- **unsupported** -- APM does not deliver this primitive to this harness.
- **gated** -- delivered behind an explicit declaration or trust flag.

| Primitive | Copilot | Claude | Grok Build | Cursor | Codex | Gemini | Antigravity | OpenCode | Windsurf | Kiro | Hermes |
|---|---|---|---|---|---|---|---|---|---|---|---|
| instructions | native | native | native | native | compiled | compiled | native | compiled | native | native | compiled |
| prompts | native | compiled | compiled | compiled | unsupported | compiled | compiled | compiled | compiled | unsupported | unsupported |
| agents | native | native | native | compiled | compiled | unsupported | unsupported | native | unsupported | compiled | unsupported |
| skills | native | native | native | native | native | native | native | native | native | native | native |
| hooks | native | native | unsupported | native | native | native | native | unsupported | native | native | unsupported |
| commands | unsupported | native | compiled | compiled | unsupported | compiled | unsupported | compiled | compiled | unsupported | unsupported |
| plugins | compiled | compiled | compiled | compiled | compiled | compiled | compiled | compiled | compiled | compiled | compiled |
| MCP servers | native | native | unsupported | native | native | native | native | native | native | native | native |
| canvas (experimental) | gated | unsupported | unsupported | unsupported | unsupported | unsupported | unsupported | unsupported | unsupported | unsupported | unsupported |
| Primitive | Copilot | Claude | Grok Build | Cursor | Codex | Gemini | Antigravity | OpenCode | Windsurf | Kiro | Bob | Hermes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| instructions | native | native | native | native | compiled | compiled | native | compiled | native | native | compiled | compiled |
| prompts | native | compiled | compiled | compiled | unsupported | compiled | compiled | compiled | compiled | unsupported | unsupported | unsupported |
| agents | native | native | native | compiled | compiled | unsupported | unsupported | native | unsupported | compiled | unsupported | unsupported |
| skills | native | native | native | native | native | native | native | native | native | native | native | native |
| hooks | native | native | unsupported | native | native | native | native | unsupported | native | native | native | unsupported |
| commands | unsupported | native | compiled | compiled | unsupported | compiled | unsupported | compiled | compiled | unsupported | unsupported | unsupported |
| plugins | compiled | compiled | compiled | compiled | compiled | compiled | compiled | compiled | compiled | compiled | compiled | compiled |
| MCP servers | native | native | unsupported | native | native | native | native | native | native | native | native | native |
| canvas (experimental) | gated | unsupported | unsupported | unsupported | unsupported | unsupported | unsupported | unsupported | unsupported | unsupported | unsupported | unsupported |

How to read a cell:

Expand Down
2 changes: 2 additions & 0 deletions docs/src/content/docs/consumer/install-mcp-servers.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ unresolved required entries fail closed.
| OpenCode | `opencode.json` | project (only if `.opencode/` exists) | JSON `mcp` |
| Windsurf | `~/.codeium/windsurf/mcp_config.json` | global | JSON `mcpServers` |
| Kiro IDE | `.kiro/settings/mcp.json` (project, only if `.kiro/` exists) or `~/.kiro/settings/mcp.json` (`-g`) | both | JSON `mcpServers` |
| IBM Bob | `.bob/mcp.json` (project) or `~/.bob/mcp.json` (`-g`) | both | JSON `mcpServers` |
| JetBrains Copilot | `%LOCALAPPDATA%\github-copilot\intellij\mcp.json` (Windows) or `$XDG_CONFIG_HOME/github-copilot/intellij/mcp.json` (macOS/Linux; defaults to `~/.config/github-copilot/intellij/mcp.json`) | global | JSON `servers` |

## How `targets:` gates which configs get written
Expand Down Expand Up @@ -231,6 +232,7 @@ Antigravity CLI to `~/.gemini/config/mcp_config.json`, Hermes to
`$HERMES_HOME/config.yaml` whenever selected explicitly (or
`~/.hermes/config.yaml` when unset or blank), Windsurf to
`~/.codeium/windsurf/mcp_config.json`, Kiro to `~/.kiro/settings/mcp.json`,
IBM Bob to `~/.bob/mcp.json`,
and JetBrains Copilot to its OS-specific user config).
When the user-scope manifest declares a `targets:` field (or the CLI passes
`--target`), only the matching runtimes receive the config write. When no CLI
Expand Down
17 changes: 17 additions & 0 deletions docs/src/content/docs/integrations/ide-tool-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ Dependency packages contribute only `dependencies.mcp`; their
- `.gemini/settings.json` (Gemini)
- `~/.codeium/windsurf/mcp_config.json` (Windsurf)
- `.kiro/settings/mcp.json` and `~/.kiro/settings/mcp.json` (Kiro IDE)
- `.bob/mcp.json` and `~/.bob/mcp.json` (IBM Bob)
- OS-specific `github-copilot/intellij/mcp.json` (JetBrains Copilot -- uses
`"servers"` key, user-scope global path):
- `%LOCALAPPDATA%\github-copilot\intellij\mcp.json` (Windows)
Expand Down Expand Up @@ -148,6 +149,22 @@ This target covers the documented Kiro IDE/CLI v3 layout
[kiro.dev/docs/cli/v3/](https://kiro.dev/docs/cli/v3/), accessed 2026-08-03).
See [the targets matrix](../../reference/targets-matrix/#kiro) for a full primitives list.

### IBM Bob

[IBM Bob](https://bob.ibm.com/) reads Agent Skills from `.bob/skills/`,
lifecycle hooks from `.bob/settings.json`, and MCP servers from
`.bob/mcp.json`. APM supports the corresponding global locations under
`~/.bob/`; global hooks use Bob's distinct
`~/.bob/settings/settings.json` path. Bob also reads the project-root
`AGENTS.md`, so `apm compile --target bob` supplies compiled instructions.

The integration follows IBM's documented
[skills](https://bob.ibm.com/docs/ide/features/skills),
[lifecycle hooks](https://bob.ibm.com/docs/ide/configuration/lifecycle-hooks),
and [MCP](https://bob.ibm.com/docs/ide/configuration/mcp/mcp-in-bob) schemas.
See [the targets matrix](../../reference/targets-matrix/#bob) for the full
path and capability table.

### JetBrains (IntelliJ IDEA, PyCharm, GoLand, and others)

GitHub Copilot for JetBrains reads MCP servers from a single user-scope
Expand Down
3 changes: 2 additions & 1 deletion docs/src/content/docs/reference/cli/compile.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ for what those files are) even though compile does not itself *deploy* hooks.
`.github/instructions/*.instructions.md` (with their `applyTo:`
frontmatter) that `apm install` already deploys. Compile is
**recommended for every other context-producing target** (`claude`, `cursor`, `codex`,
`gemini`, `grok-build`, `opencode`, `antigravity`, `windsurf`, `kiro`, `hermes`, `intellij`), which load instructions through a
`gemini`, `grok-build`, `opencode`, `antigravity`, `windsurf`, `kiro`, `bob`, `hermes`, `intellij`), which load instructions through a
root context file or harness-specific rules folder that compile
generates.

Expand Down Expand Up @@ -320,6 +320,7 @@ one-shot `apm compile`; `--output` only applies in single-file mode.
| `antigravity` | `AGENTS.md` |
| `windsurf` | `AGENTS.md` |
| `kiro` | `AGENTS.md` |
| `bob` | `AGENTS.md` |
| `hermes` | `AGENTS.md` |
| `intellij` | `AGENTS.md` |
| `agent-skills` | none |
Expand Down
2 changes: 1 addition & 1 deletion docs/src/content/docs/reference/cli/deps.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ apm deps update [PACKAGES...] [OPTIONS]
|---|---|
| `-v, --verbose` | Show detailed update information. |
| `--force` | Overwrite locally-authored files on collision. |
| `-t, --target` | Force deployment to specific targets. Comma-separated. Values: `agent-skills`, `agents`, `agy`, `all`, `antigravity`, `claude`, `codex`, `copilot`, `cursor`, `gemini`, `grok-build`, `hermes`, `intellij`, `kiro`, `opencode`, `vscode`, `windsurf`. Experimental targets (`copilot-app`, `copilot-cowork`, `grok-cloud`, `openclaw`) are also accepted when their feature flags are enabled. `all` excludes `agent-skills`, `antigravity`, `hermes`, experimental targets, and `intellij`. |
| `-t, --target` | Force deployment to specific targets. Comma-separated. Values: `agent-skills`, `agents`, `agy`, `all`, `antigravity`, `bob`, `claude`, `codex`, `copilot`, `cursor`, `gemini`, `grok-build`, `hermes`, `intellij`, `kiro`, `opencode`, `vscode`, `windsurf`. Experimental targets (`copilot-app`, `copilot-cowork`, `grok-cloud`, `openclaw`) are also accepted when their feature flags are enabled. `all` excludes `agent-skills`, `antigravity`, `hermes`, experimental targets, and `intellij`. |
| `--parallel-downloads N` | Max concurrent downloads. Default `4`. `0` disables parallelism. |
| `-g, --global` | Update user-scope dependencies in `~/.apm/`. |
| `--legacy-skill-paths` | Deploy skill files to per-client paths (`.cursor/skills/`, etc.) instead of the shared `.agents/skills/` directory. |
Expand Down
2 changes: 1 addition & 1 deletion docs/src/content/docs/reference/cli/init.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ and [`apm marketplace init`](../marketplace/) instead.
| `-y`, `--yes` | off | Skip interactive prompts; use auto-detected defaults. Overwrites an existing `apm.yml` without confirmation. |
| `--plugin` | off | **Deprecated.** Use [`apm plugin init`](../plugin/) instead. Scaffold a plugin authoring project: also writes `plugin.json` and adds a `devDependencies` block to `apm.yml`. Plugin name must be kebab-case, max 64 chars. |
| `--marketplace` | off | **Deprecated.** Use [`apm marketplace init`](../marketplace/) instead. Append a `marketplace:` authoring block to `apm.yml`. See [Publish to a marketplace](../../../producer/publish-to-a-marketplace/). |
| `--target` | (prompt) | Comma-separated target list. Skips the interactive target prompt. Stable manifest targets include `copilot`, `claude`, `grok-build`, `cursor`, `opencode`, `codex`, `gemini`, `antigravity`, `windsurf`, `kiro`, and `agent-skills`; `all` expands the default stable set. |
| `--target` | (prompt) | Comma-separated target list. Skips the interactive target prompt. Stable manifest targets include `copilot`, `claude`, `grok-build`, `cursor`, `opencode`, `codex`, `gemini`, `antigravity`, `windsurf`, `kiro`, `bob`, and `agent-skills`; `all` expands the default stable set. |
| `-v`, `--verbose` | off | Show detailed output. |

Target precedence: `--target` flag > interactive prompt > auto-detect at
Expand Down
Loading