From 4d61744722df635fd6e82ed04b388aea130d2ed5 Mon Sep 17 00:00:00 2001 From: Philipp Thumfart Date: Mon, 22 Jun 2026 09:38:29 +0300 Subject: [PATCH] Added support for pi --- README.md | 3 ++- agpack/__init__.py | 2 +- agpack/builtin_targets/pi.yml | 14 ++++++++++++++ agpack/templates/init_project.yml | 1 + tests/test_builtin_targets.py | 9 +++++++++ tests/test_integration.py | 1 + tests/test_registry.py | 1 + 7 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 agpack/builtin_targets/pi.yml diff --git a/README.md b/README.md index 1236118..9c3614d 100644 --- a/README.md +++ b/README.md @@ -209,7 +209,7 @@ agpack targets show claude # print Claude's manifest as YAML ### Bundled targets -agpack ships manifests for eight tools: `claude`, `codex`, `copilot`, `cursor`, `gemini`, `opencode`, `windsurf`, `antigravity`. The manifests themselves are the source of truth — browse them at [`agpack/builtin_targets/`](agpack/builtin_targets/) or introspect locally: +agpack ships manifests for nine tools: `claude`, `codex`, `copilot`, `cursor`, `gemini`, `opencode`, `pi`, `windsurf`, `antigravity`. The manifests themselves are the source of truth — browse them at [`agpack/builtin_targets/`](agpack/builtin_targets/) or introspect locally: ```bash agpack targets list # every target + its resource types @@ -219,6 +219,7 @@ agpack targets show claude # the full manifest as YAML One thing worth knowing that isn't obvious from the file names: - **Windsurf and Antigravity have no per-project MCP config.** Their MCP configs live in user-global locations (`~/.codeium/windsurf/mcp_config.json` and `~/.gemini/antigravity/mcp_config.json`), which agpack does not manage. +- **pi has no MCP and no file-based subagents.** It deliberately ships without MCP (CLI tools and extensions cover that role) and uses TypeScript extensions instead of copy-file agents, so its manifest exposes only `skills` (`.pi/skills`) and `commands` — which map to pi's prompt templates in `.pi/prompts`. ### Custom and overridden targets diff --git a/agpack/__init__.py b/agpack/__init__.py index 35e45b0..0ebca38 100644 --- a/agpack/__init__.py +++ b/agpack/__init__.py @@ -1,3 +1,3 @@ """agpack - Fetch and deploy AI agent resources from git repos.""" -__version__ = "0.4.3" +__version__ = "0.4.4" diff --git a/agpack/builtin_targets/pi.yml b/agpack/builtin_targets/pi.yml new file mode 100644 index 0000000..7e3faa4 --- /dev/null +++ b/agpack/builtin_targets/pi.yml @@ -0,0 +1,14 @@ +# pi (Earendil Works coding agent) + +skills: + kind: copy-directory + path: .pi/skills + +# pi calls these "prompt templates" (invoked as /name); same role as commands +# elsewhere. +commands: + kind: copy-file + path: .pi/prompts + +# pi has no MCP (by design) and no file-based subagents (it uses extensions), +# so there is no `mcp:` or `agents:` resource type. diff --git a/agpack/templates/init_project.yml b/agpack/templates/init_project.yml index 602ad96..0858d99 100644 --- a/agpack/templates/init_project.yml +++ b/agpack/templates/init_project.yml @@ -7,6 +7,7 @@ targets: # - codex # - cursor # - copilot + # - pi dependencies: skills: diff --git a/tests/test_builtin_targets.py b/tests/test_builtin_targets.py index 64c9761..ba01d16 100644 --- a/tests/test_builtin_targets.py +++ b/tests/test_builtin_targets.py @@ -99,6 +99,15 @@ def test_windsurf_paths() -> None: assert "mcp" not in target.resources +def test_pi_paths() -> None: + target = load_builtin("pi") + assert target.resources["skills"].path == ".pi/skills" + assert isinstance(target.resources["commands"], CopyFileResource) + assert target.resources["commands"].path == ".pi/prompts" + assert "agents" not in target.resources + assert "mcp" not in target.resources + + def test_antigravity_paths() -> None: target = load_builtin("antigravity") assert target.resources["skills"].path == ".agent/skills" diff --git a/tests/test_integration.py b/tests/test_integration.py index bcec1e8..69d4eff 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -1203,6 +1203,7 @@ def test_targets_list_shows_all_builtins(tmp_path: Path) -> None: "cursor", "copilot", "gemini", + "pi", "windsurf", "antigravity", ]: diff --git a/tests/test_registry.py b/tests/test_registry.py index 62dd3cb..a37919c 100644 --- a/tests/test_registry.py +++ b/tests/test_registry.py @@ -17,6 +17,7 @@ "cursor", "gemini", "opencode", + "pi", "windsurf", }