agentpool-cli 0.1.9__tar.gz → 0.1.11__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/CHANGELOG.md +20 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/PKG-INFO +19 -8
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/README.md +18 -7
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/agentpool-skill.md +3 -1
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/examples.md +7 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/mcp-tools.md +4 -2
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/model-catalog.md +27 -4
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/provider-adapters.md +9 -2
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/provider-lifecycle-matrix.md +4 -4
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/quickstart.md +9 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/setup-claude-code.md +7 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/setup-cursor-cli.md +3 -1
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/setup-droid.md +3 -1
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/pyproject.toml +9 -1
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/server.json +2 -2
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/__init__.py +1 -1
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/cli.py +193 -1
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/config.py +24 -4
- agentpool_cli-0.1.11/src/agentpool/provider_model_catalog.json +4043 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/providers/base.py +5 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/session_manager.py +4 -1
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/fixtures/provider_model_catalog_golden.json +63 -5
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_cli.py +53 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_models_config_store.py +121 -9
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/uv.lock +1 -1
- agentpool_cli-0.1.9/src/agentpool/provider_model_catalog.json +0 -997
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/.cursor/mcp.json.example +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/.github/CODEOWNERS +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/.github/ISSUE_TEMPLATE/provider_probe.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/.github/dependabot.yml +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/.github/workflows/ci.yml +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/.github/workflows/release.yml +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/.gitignore +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/.mcp.json.example +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/AGENTS.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/CONTRIBUTING.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/LICENSE +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/SECURITY.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/agent-cli-and-mcp.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/architecture.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/examples/README.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/install.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/mcp-clients.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/onboarding.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/release.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/security.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/setup-codex.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/setup-copilot.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/setup-cursor.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/setup-devin.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/stats.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/usage-detection.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/docs/usage-probe-matrix.md +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/scripts/install.sh +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/__main__.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/agent_io.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/artifacts.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/event_detection.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/fixtures/__init__.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/fixtures/fake_agents/__init__.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/fixtures/fake_agents/fake_approval_agent.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/fixtures/fake_agents/fake_common.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/fixtures/fake_agents/fake_completed_agent.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/fixtures/fake_agents/fake_idle_agent.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/fixtures/fake_agents/fake_limit_agent.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/fixtures/fake_agents/fake_patch_agent.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/fixtures/fake_agents/fake_question_agent.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/git_worktree.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/mcp/__init__.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/mcp/resources.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/mcp/tools.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/mcp_server.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/models.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/onboarding.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/policy.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/preferences.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/providers/__init__.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/providers/registry.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/redaction.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/runtimes/__init__.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/runtimes/base.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/runtimes/tmux.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/stats/__init__.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/stats/card.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/stats/compute.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/stats/queries.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/stats/render.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/stats/window.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/store.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/usage/__init__.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/usage/_common.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/usage/ccusage.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/usage/claude.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/usage/codex.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/usage/codexbar.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/usage/combine.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/usage/copilot.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/usage/devin.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/usage/parsers.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/usage/probes.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/usage/provider_parsers.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/usage/summary.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/src/agentpool/utils.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/fixtures/stats_seed.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/fixtures/usage/claude_usage.txt +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/fixtures/usage/codex_rate_limits.json +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/fixtures/usage/copilot_user.json +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/fixtures/usage/devin_plan_status.json +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/integration/test_fake_tmux_flow.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_agent_io.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_event_policy.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_mcp_surface.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_mcp_tools.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_onboarding.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_redaction.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_stats_cli.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_stats_mcp.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_stats_window.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_subprocess_safety.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_usage_probes.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_usage_provider_parsers.py +0 -0
- {agentpool_cli-0.1.9 → agentpool_cli-0.1.11}/tests/unit/test_usage_summary_enrichment.py +0 -0
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.1.11 - 2026-06-05
|
|
6
|
+
|
|
7
|
+
- Refresh provider model catalogs from current Claude Code, Codex, Cursor,
|
|
8
|
+
Droid, and OpenCode surfaces, including Claude Opus 4.8, Claude Code 1M
|
|
9
|
+
suffixes, and Cursor's explicit 1M/reasoning variants.
|
|
10
|
+
- Forward provider reasoning controls for Claude Code (`--effort`) and Droid
|
|
11
|
+
(`--reasoning-effort`) while keeping Codex reasoning/service-tier overrides
|
|
12
|
+
process-local.
|
|
13
|
+
- Refresh stale installed catalog metadata from the embedded catalog without
|
|
14
|
+
overriding user-selected default or smoke models.
|
|
15
|
+
|
|
16
|
+
## 0.1.10 - 2026-06-03
|
|
17
|
+
|
|
18
|
+
- Add an AI-agent start section to root help pointing agents at bundled skill
|
|
19
|
+
guidance before they infer workflows from flags.
|
|
20
|
+
- Add `agentpool skills` with `list`, `get`, and `path` so agents can load
|
|
21
|
+
version-matched AgentPool usage guidance from the installed CLI.
|
|
22
|
+
- Include examples with packaged docs so `agentpool skills get core --full`
|
|
23
|
+
returns both the skill and copy-paste CLI flows.
|
|
24
|
+
|
|
5
25
|
## 0.1.9 - 2026-06-02
|
|
6
26
|
|
|
7
27
|
- Harden agent-facing CLI recovery with examples on root/group help, structured
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentpool-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.11
|
|
4
4
|
Summary: Make full use of every coding-agent subscription you pay for: a local CLI + MCP server that surfaces live usage limits and offloads work to providers with headroom.
|
|
5
5
|
Author: AgentPool contributors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -103,6 +103,13 @@ notes.
|
|
|
103
103
|
|
|
104
104
|
## Quickstart
|
|
105
105
|
|
|
106
|
+
For AI agents, start by loading the bundled version-matched skill:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
agentpool skills get agentpool
|
|
110
|
+
agentpool skills get core --full
|
|
111
|
+
```
|
|
112
|
+
|
|
106
113
|
```bash
|
|
107
114
|
agentpool init
|
|
108
115
|
agentpool setup cursor
|
|
@@ -140,9 +147,10 @@ agentpool terminate <session-id> --json
|
|
|
140
147
|
|
|
141
148
|
`spawn` defaults `--initial-prompt-mode` to `provider_default`. For Codex CLI
|
|
142
149
|
this resolves to `arg`, which passes the first task as the Codex prompt argument
|
|
143
|
-
instead of relying on a paste-and-submit startup cycle.
|
|
144
|
-
accept process-local overrides such as
|
|
145
|
-
`--
|
|
150
|
+
instead of relying on a paste-and-submit startup cycle. Providers that expose
|
|
151
|
+
reasoning controls also accept process-local overrides such as
|
|
152
|
+
`--reasoning-effort high`; Codex also accepts `--service-tier priority`.
|
|
153
|
+
AgentPool does not edit your provider config.
|
|
146
154
|
|
|
147
155
|
For AgentPool-created edit isolation, choose worktrees explicitly:
|
|
148
156
|
|
|
@@ -196,13 +204,13 @@ shell script must avoid provider TUI fallback probes.
|
|
|
196
204
|
|
|
197
205
|
| Provider id | Command | Usage status in v0.1 | Model pinning |
|
|
198
206
|
| --- | --- | --- | --- |
|
|
199
|
-
| `codex-cli` | `codex` | native local app-server rate-limit probe; CodexBar optional | `--model` |
|
|
207
|
+
| `codex-cli` | `codex` | native local app-server rate-limit probe; CodexBar optional | `--model` + config-scoped reasoning/service tier |
|
|
200
208
|
| `cursor-cli` | `agent` or `cursor-agent` | optional CodexBar Cursor usage; native CLI usage is interactive `/usage` only | `--model` + read-only `--mode ask` |
|
|
201
|
-
| `claude-code` | `claude` | temporary `/usage` probe; ccusage telemetry optional | `--model` |
|
|
209
|
+
| `claude-code` | `claude` | temporary `/usage` probe; ccusage telemetry optional | `--model` + `--effort` |
|
|
202
210
|
| `devin-cli` | `devin` | Devin/Windsurf plan-status API from existing CLI auth, with `/usage` fallback | `--model` |
|
|
203
211
|
| `copilot-cli` | `gh copilot` | GitHub Copilot usage API from env or `gh auth token` | forwarded `--model` |
|
|
204
|
-
| `droid-cli` | `droid` | unknown unless surfaced by future safe probe | process-local settings file |
|
|
205
|
-
| `opencode` | `opencode` | configured adapter; usage unknown in this alpha |
|
|
212
|
+
| `droid-cli` | `droid` | unknown unless surfaced by future safe probe | process-local settings file + `--reasoning-effort` |
|
|
213
|
+
| `opencode` | `opencode` | configured adapter; usage unknown in this alpha | `--model` with provider/model ids |
|
|
206
214
|
|
|
207
215
|
Compatibility note: the PRD calls Factory's coding product `factory-droid`, but
|
|
208
216
|
AgentPool exposes it as `droid-cli` because the installed command is `droid`.
|
|
@@ -312,6 +320,9 @@ summary, provider models, preferences, spawn, observe, send, interrupt,
|
|
|
312
320
|
collect, artifact manifest, transcript paging, and terminate. Add opt-in
|
|
313
321
|
toolsets with `agentpool mcp --toolsets default,stats,sessions,leases,worktrees`.
|
|
314
322
|
|
|
323
|
+
Shell-capable agents can use `agentpool skills get agentpool` instead of MCP
|
|
324
|
+
resources to load the same core usage guidance from the installed CLI.
|
|
325
|
+
|
|
315
326
|
Coding agents with shell access should prefer the CLI path. It is more
|
|
316
327
|
token-efficient because large worker output stays in artifact files and
|
|
317
328
|
`observe`/`collect` return compact manifests by default. MCP remains first-class
|
|
@@ -82,6 +82,13 @@ notes.
|
|
|
82
82
|
|
|
83
83
|
## Quickstart
|
|
84
84
|
|
|
85
|
+
For AI agents, start by loading the bundled version-matched skill:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
agentpool skills get agentpool
|
|
89
|
+
agentpool skills get core --full
|
|
90
|
+
```
|
|
91
|
+
|
|
85
92
|
```bash
|
|
86
93
|
agentpool init
|
|
87
94
|
agentpool setup cursor
|
|
@@ -119,9 +126,10 @@ agentpool terminate <session-id> --json
|
|
|
119
126
|
|
|
120
127
|
`spawn` defaults `--initial-prompt-mode` to `provider_default`. For Codex CLI
|
|
121
128
|
this resolves to `arg`, which passes the first task as the Codex prompt argument
|
|
122
|
-
instead of relying on a paste-and-submit startup cycle.
|
|
123
|
-
accept process-local overrides such as
|
|
124
|
-
`--
|
|
129
|
+
instead of relying on a paste-and-submit startup cycle. Providers that expose
|
|
130
|
+
reasoning controls also accept process-local overrides such as
|
|
131
|
+
`--reasoning-effort high`; Codex also accepts `--service-tier priority`.
|
|
132
|
+
AgentPool does not edit your provider config.
|
|
125
133
|
|
|
126
134
|
For AgentPool-created edit isolation, choose worktrees explicitly:
|
|
127
135
|
|
|
@@ -175,13 +183,13 @@ shell script must avoid provider TUI fallback probes.
|
|
|
175
183
|
|
|
176
184
|
| Provider id | Command | Usage status in v0.1 | Model pinning |
|
|
177
185
|
| --- | --- | --- | --- |
|
|
178
|
-
| `codex-cli` | `codex` | native local app-server rate-limit probe; CodexBar optional | `--model` |
|
|
186
|
+
| `codex-cli` | `codex` | native local app-server rate-limit probe; CodexBar optional | `--model` + config-scoped reasoning/service tier |
|
|
179
187
|
| `cursor-cli` | `agent` or `cursor-agent` | optional CodexBar Cursor usage; native CLI usage is interactive `/usage` only | `--model` + read-only `--mode ask` |
|
|
180
|
-
| `claude-code` | `claude` | temporary `/usage` probe; ccusage telemetry optional | `--model` |
|
|
188
|
+
| `claude-code` | `claude` | temporary `/usage` probe; ccusage telemetry optional | `--model` + `--effort` |
|
|
181
189
|
| `devin-cli` | `devin` | Devin/Windsurf plan-status API from existing CLI auth, with `/usage` fallback | `--model` |
|
|
182
190
|
| `copilot-cli` | `gh copilot` | GitHub Copilot usage API from env or `gh auth token` | forwarded `--model` |
|
|
183
|
-
| `droid-cli` | `droid` | unknown unless surfaced by future safe probe | process-local settings file |
|
|
184
|
-
| `opencode` | `opencode` | configured adapter; usage unknown in this alpha |
|
|
191
|
+
| `droid-cli` | `droid` | unknown unless surfaced by future safe probe | process-local settings file + `--reasoning-effort` |
|
|
192
|
+
| `opencode` | `opencode` | configured adapter; usage unknown in this alpha | `--model` with provider/model ids |
|
|
185
193
|
|
|
186
194
|
Compatibility note: the PRD calls Factory's coding product `factory-droid`, but
|
|
187
195
|
AgentPool exposes it as `droid-cli` because the installed command is `droid`.
|
|
@@ -291,6 +299,9 @@ summary, provider models, preferences, spawn, observe, send, interrupt,
|
|
|
291
299
|
collect, artifact manifest, transcript paging, and terminate. Add opt-in
|
|
292
300
|
toolsets with `agentpool mcp --toolsets default,stats,sessions,leases,worktrees`.
|
|
293
301
|
|
|
302
|
+
Shell-capable agents can use `agentpool skills get agentpool` instead of MCP
|
|
303
|
+
resources to load the same core usage guidance from the installed CLI.
|
|
304
|
+
|
|
294
305
|
Coding agents with shell access should prefer the CLI path. It is more
|
|
295
306
|
token-efficient because large worker output stays in artifact files and
|
|
296
307
|
`observe`/`collect` return compact manifests by default. MCP remains first-class
|
|
@@ -96,7 +96,9 @@ that directory is acceptable. Then observe again.
|
|
|
96
96
|
When spawning Codex workers, leave `initial_prompt_mode` unset unless you have a
|
|
97
97
|
reason to force it. The provider default uses the Codex CLI prompt argument path.
|
|
98
98
|
Pass `reasoning_effort="high"` or another explicit value when the task needs a
|
|
99
|
-
different
|
|
99
|
+
different provider reasoning setting from the catalog default. AgentPool
|
|
100
|
+
forwards that to Codex config overrides, Claude Code `--effort`, or Droid
|
|
101
|
+
`--reasoning-effort` depending on the selected provider.
|
|
100
102
|
|
|
101
103
|
## Safety Boundaries
|
|
102
104
|
|
|
@@ -100,8 +100,10 @@ initial prompt as a process argument and avoids first-turn paste/submission
|
|
|
100
100
|
drift.
|
|
101
101
|
|
|
102
102
|
`spawn_worker.reasoning_effort` and `spawn_worker.service_tier` are optional
|
|
103
|
-
provider controls. For `
|
|
104
|
-
|
|
103
|
+
provider controls. For `claude-code`, reasoning becomes `--effort`; for
|
|
104
|
+
`droid-cli`, it becomes `--reasoning-effort`; for `codex-cli`, reasoning and
|
|
105
|
+
service tier become process-local Codex overrides. AgentPool does not edit the
|
|
106
|
+
user's provider config.
|
|
105
107
|
|
|
106
108
|
## Output Detail And Lockdown
|
|
107
109
|
|
|
@@ -8,6 +8,7 @@ It is not a ranking table and it must not be used to implement `provider=auto`.
|
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
agentpool models
|
|
11
|
+
agentpool models --provider claude-code
|
|
11
12
|
agentpool models --provider droid-cli
|
|
12
13
|
agentpool models --provider codex-cli --json
|
|
13
14
|
agentpool models validate --path ~/.agentpool/models.json
|
|
@@ -20,6 +21,8 @@ Each provider entry can describe:
|
|
|
20
21
|
- `models`: known model slugs, display names, aliases, confidence, and metadata.
|
|
21
22
|
- `model_arg`: the CLI flag used by providers with native model selection.
|
|
22
23
|
- `model_selection`: non-flag pinning mode, such as Droid runtime settings.
|
|
24
|
+
- `reasoning_effort_arg`: the CLI flag used by providers with native effort
|
|
25
|
+
selection, such as Claude Code `--effort` or Droid `--reasoning-effort`.
|
|
23
26
|
- `submit_keys`: tmux keys needed for interactive submit quirks.
|
|
24
27
|
- `quirks`: operator-facing notes for harness behavior.
|
|
25
28
|
|
|
@@ -79,10 +82,18 @@ This lets a user or a primary agent pin a local default without changing the
|
|
|
79
82
|
provider adapter. Explicit `--model` on `agentpool spawn` or `agentpool smoke`
|
|
80
83
|
still overrides both catalog and provider config.
|
|
81
84
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
## Claude Code
|
|
86
|
+
|
|
87
|
+
Claude Code supports aliases such as `sonnet`, `opus`, `haiku`, and `opusplan`,
|
|
88
|
+
plus full model names such as `claude-opus-4-8`. The catalog also includes
|
|
89
|
+
supported `[1m]` suffix entries, for example `claude-opus-4-8[1m]`. Account and
|
|
90
|
+
plan access still belongs to Claude Code; AgentPool only forwards the selected
|
|
91
|
+
model with `--model`.
|
|
92
|
+
|
|
93
|
+
Claude Code effort is model-dependent. AgentPool stores the supported effort
|
|
94
|
+
levels per model and forwards `--reasoning-effort` as Claude Code `--effort`.
|
|
95
|
+
When you pass an explicit Claude model without an effort, AgentPool uses that
|
|
96
|
+
model's catalog default.
|
|
86
97
|
|
|
87
98
|
## Droid
|
|
88
99
|
|
|
@@ -92,6 +103,18 @@ the configured or requested model by writing a process-local settings file under
|
|
|
92
103
|
This avoids mutating the user's global Factory settings and avoids accidentally
|
|
93
104
|
using a custom default model backed by a local proxy.
|
|
94
105
|
|
|
106
|
+
Compatibility note: the PRD calls the Factory coding product `factory-droid`,
|
|
107
|
+
but AgentPool exposes it as `droid-cli` because the installed command is
|
|
108
|
+
`droid`. Keep the catalog keyed by `droid-cli` unless a separate Factory Droid
|
|
109
|
+
binary or harness appears.
|
|
110
|
+
|
|
111
|
+
## Cursor And OpenCode
|
|
112
|
+
|
|
113
|
+
Cursor Agent CLI exposes reasoning and 1M context variants as model ids from
|
|
114
|
+
`agent models`, so AgentPool lists those explicit ids instead of inventing a
|
|
115
|
+
separate effort flag. OpenCode model ids use provider/model form, for example
|
|
116
|
+
`opencode/claude-opus-4-8`, and AgentPool forwards them with `--model`.
|
|
117
|
+
|
|
95
118
|
## Catalog Confidence
|
|
96
119
|
|
|
97
120
|
Model lists are conservative. Providers that expose a complete local list, such
|
|
@@ -37,10 +37,17 @@ Model pinning behavior:
|
|
|
37
37
|
- `cursor-cli` uses `agent` or `cursor-agent`, adds `--workspace <path>`, and
|
|
38
38
|
uses `--mode ask` for `read_only` isolation because Cursor documents Ask mode
|
|
39
39
|
as read-only Q&A. Its provider default initial prompt mode is `arg`, matching
|
|
40
|
-
Cursor's documented `[prompt...]` argument.
|
|
40
|
+
Cursor's documented `[prompt...]` argument. Cursor's reasoning and 1M context
|
|
41
|
+
variants are explicit model ids from `agent models`, not a separate effort
|
|
42
|
+
flag.
|
|
43
|
+
- `claude-code` uses `--model` for model pinning and `--effort` for supported
|
|
44
|
+
Claude Code effort levels. Full model names such as `claude-opus-4-8` and
|
|
45
|
+
`[1m]` suffixes are catalog entries, but account and plan access still belong
|
|
46
|
+
to Claude Code.
|
|
41
47
|
- `droid-cli` does not expose interactive `--model`; AgentPool
|
|
42
48
|
writes a minimal `~/.agentpool/runtime-settings/droid-<model>.json` and starts
|
|
43
|
-
Droid with `--settings <path>`.
|
|
49
|
+
Droid with `--settings <path>`. Droid `exec` exposes reasoning through
|
|
50
|
+
`--reasoning-effort`, which AgentPool forwards when requested.
|
|
44
51
|
- AgentPool does not edit or persist provider credentials or user defaults.
|
|
45
52
|
|
|
46
53
|
Tmux submit behavior:
|
|
@@ -37,12 +37,12 @@ Cursor has two separate surfaces: `cursor` is an MCP host integration, while
|
|
|
37
37
|
| `fake-limit` | native fake | yes | yes | pending | pending | pending | pending | pending | tests | Limit warning fixture. |
|
|
38
38
|
| `fake-patch` | native fake | yes | yes | pending | pending | pending | pending | pending | tests | Worktree/edit fixture; use only with explicit mutating tests. |
|
|
39
39
|
| `codex-cli` | native + CodexBar combined | yes | yes | yes | yes | yes | yes | yes | 2026-05-09 | Verified with explicit `--model gpt-5.5` on Codex CLI v0.130.0. Known startup trust prompts can be accepted only for the smoke temp repo. The harness detects Codex update prompts and skips them before sending task text. Codex tmux submit uses `C-m`. Codex usage supports 5h and weekly windows. |
|
|
40
|
-
| `cursor-cli` | CodexBar cursor optional, native unknown | partial | yes | pending | yes | yes | yes | yes | 2026-05
|
|
41
|
-
| `claude-code` | native `/usage` + CodexBar cli | yes | yes | yes | n/a | yes | yes | yes | 2026-05
|
|
40
|
+
| `cursor-cli` | CodexBar cursor optional, native unknown | partial | yes | pending | yes | yes | yes | yes | 2026-06-05 | Local command is `agent` v2026.06.02-8c11d9f. Adapter pins models with `--model`, sets `--workspace`, and uses `--mode ask` for read-only. `agent models` returned account models including Composer 2.5, Claude Opus 4.8 1M variants, and GPT 5.5/5.4 variants. CodexBar cursor usage returned primary/secondary/tertiary windows through the optional backend. |
|
|
41
|
+
| `claude-code` | native `/usage` + CodexBar cli | yes | yes | yes | n/a | yes | yes | yes | 2026-06-05 | Verified previously with explicit `--model sonnet`; generated `AGENTPOOL_SMOKE_DONE`, collected, terminated, and left git clean. Local Claude Code v2.1.165 documents `--model` full names such as `claude-opus-4-8` and `--effort low/medium/high/xhigh/max`; AgentPool forwards both. Startup can show Warp/tmux focus and optional MCP warnings; they did not block lifecycle detection. CodexBar safe source gives 5h usage; native `/usage` is interactive. |
|
|
42
42
|
| `copilot-cli` | native GitHub API + CodexBar api | yes | yes | yes | n/a | yes | yes | yes | 2026-05-09 | Verified with explicit `--model gpt-5.5`; GitHub Copilot CLI generated `AGENTPOOL_SMOKE_DONE`, collected, terminated, and left git clean. Usage percentages are available through native/CodexBar API paths. |
|
|
43
43
|
| `devin-cli` | native plan-status API | yes | yes | yes | n/a | yes | yes | yes | 2026-05-09 | Verified with explicit `--model codex`; generated `AGENTPOOL_SMOKE_DONE`, collected, terminated, and left git clean. Native usage includes daily, weekly, and on-demand balance. |
|
|
44
|
-
| `droid-cli` | unknown | yes | yes | yes | n/a | yes | yes | yes | 2026-05
|
|
45
|
-
| `opencode` |
|
|
44
|
+
| `droid-cli` | unknown | yes | yes | yes | n/a | yes | yes | yes | 2026-06-05 | Verified previously with explicit `--model glm-5.1`, which AgentPool applies through a process-local Droid `--settings` file. This avoids the user's custom default localhost-backed model. Local Droid v0.122.0 exposes `--reasoning-effort`; AgentPool forwards it. No safe subscription quota probe confirmed. |
|
|
45
|
+
| `opencode` | native unknown | skipped | skipped | skipped | skipped | skipped | skipped | skipped | 2026-06-05 | Local `opencode models` returned provider/model ids, and AgentPool can forward them with `--model`. Real lifecycle smoke remains skipped; native usage remains unknown. |
|
|
46
46
|
|
|
47
47
|
## Smoke Commands
|
|
48
48
|
|
|
@@ -7,6 +7,14 @@ plane, not a router: you pick the provider and model explicitly.
|
|
|
7
7
|
|
|
8
8
|
## 1. Verify the environment
|
|
9
9
|
|
|
10
|
+
AI agents should load the bundled version-matched skill before inferring flows
|
|
11
|
+
from flags:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
agentpool skills get agentpool
|
|
15
|
+
agentpool skills get core --full
|
|
16
|
+
```
|
|
17
|
+
|
|
10
18
|
```bash
|
|
11
19
|
agentpool init
|
|
12
20
|
agentpool doctor --deep --privacy
|
|
@@ -58,6 +66,7 @@ Use `--isolation worktree` instead of `read_only` for tasks that edit files.
|
|
|
58
66
|
|
|
59
67
|
## Next
|
|
60
68
|
|
|
69
|
+
- CLI agent guidance: `agentpool skills get agentpool`
|
|
61
70
|
- Full agent guidance: `agentpool://skill.md`
|
|
62
71
|
- Setup and privacy detail: `agentpool://onboarding`
|
|
63
72
|
- User delegation preferences: `agentpool://preferences.md`
|
|
@@ -75,7 +75,14 @@ agentpool usage-summary --provider claude-code --refresh --json
|
|
|
75
75
|
agentpool models --provider claude-code
|
|
76
76
|
agentpool spawn \
|
|
77
77
|
--provider claude-code \
|
|
78
|
+
--model claude-opus-4-8 \
|
|
79
|
+
--reasoning-effort high \
|
|
78
80
|
--repo . \
|
|
79
81
|
--task "Inspect this repo read-only and summarize the main entry points." \
|
|
80
82
|
--isolation read_only
|
|
81
83
|
```
|
|
84
|
+
|
|
85
|
+
Claude Code accepts aliases such as `sonnet` and `opus`, full names such as
|
|
86
|
+
`claude-opus-4-8`, and supported `[1m]` suffixes such as
|
|
87
|
+
`claude-opus-4-8[1m]`. Availability of 1M context depends on the Claude account
|
|
88
|
+
and plan; AgentPool only forwards the explicit model id.
|
|
@@ -50,4 +50,6 @@ agentpool spawn \
|
|
|
50
50
|
|
|
51
51
|
AgentPool launches Cursor with `--workspace <repo>` and uses `--mode ask` for
|
|
52
52
|
read-only isolation. Cursor's `--trust` flag is documented for headless print
|
|
53
|
-
mode, so AgentPool does not use it for interactive tmux workers.
|
|
53
|
+
mode, so AgentPool does not use it for interactive tmux workers. Cursor exposes
|
|
54
|
+
reasoning and 1M context as explicit model ids from `agent models`; choose those
|
|
55
|
+
ids with `--model` when you want them.
|
|
@@ -45,6 +45,7 @@ agentpool models --provider droid-cli
|
|
|
45
45
|
agentpool spawn \
|
|
46
46
|
--provider droid-cli \
|
|
47
47
|
--model glm-5.1 \
|
|
48
|
+
--reasoning-effort high \
|
|
48
49
|
--repo . \
|
|
49
50
|
--task "Inspect this repo read-only and summarize the main entry points." \
|
|
50
51
|
--isolation read_only
|
|
@@ -52,4 +53,5 @@ agentpool spawn \
|
|
|
52
53
|
|
|
53
54
|
AgentPool pins Droid models through a process-local `--settings` file under
|
|
54
55
|
`~/.agentpool/runtime-settings/` so it does not mutate your global Factory
|
|
55
|
-
settings.
|
|
56
|
+
settings. Droid reasoning effort is forwarded with `--reasoning-effort` when
|
|
57
|
+
you provide it.
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agentpool-cli"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.11"
|
|
8
8
|
description = "Make full use of every coding-agent subscription you pay for: a local CLI + MCP server that surfaces live usage limits and offloads work to providers with headroom."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -54,5 +54,13 @@ include = [
|
|
|
54
54
|
|
|
55
55
|
[tool.hatch.build.targets.wheel.force-include]
|
|
56
56
|
"docs/agentpool-skill.md" = "agentpool/docs/agentpool-skill.md"
|
|
57
|
+
"docs/examples.md" = "agentpool/docs/examples.md"
|
|
57
58
|
"docs/onboarding.md" = "agentpool/docs/onboarding.md"
|
|
58
59
|
"docs/quickstart.md" = "agentpool/docs/quickstart.md"
|
|
60
|
+
|
|
61
|
+
[tool.hatch.build.targets.sdist]
|
|
62
|
+
exclude = [
|
|
63
|
+
"/.firecrawl",
|
|
64
|
+
"/demo",
|
|
65
|
+
"/dist",
|
|
66
|
+
]
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "io.github.sidduHERE/agentpool",
|
|
4
4
|
"title": "AgentPool",
|
|
5
5
|
"description": "See each coding-agent subscription's live limits and offload work to one with headroom.",
|
|
6
|
-
"version": "0.1.
|
|
6
|
+
"version": "0.1.11",
|
|
7
7
|
"repository": {
|
|
8
8
|
"url": "https://github.com/sidduHERE/agentpool",
|
|
9
9
|
"source": "github"
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
{
|
|
14
14
|
"registryType": "pypi",
|
|
15
15
|
"identifier": "agentpool-cli",
|
|
16
|
-
"version": "0.1.
|
|
16
|
+
"version": "0.1.11",
|
|
17
17
|
"transport": {
|
|
18
18
|
"type": "stdio"
|
|
19
19
|
},
|
|
@@ -4,6 +4,7 @@ import json
|
|
|
4
4
|
import os
|
|
5
5
|
import shutil
|
|
6
6
|
import sys
|
|
7
|
+
from importlib import resources
|
|
7
8
|
from pathlib import Path
|
|
8
9
|
from typing import Annotated, Any, Callable
|
|
9
10
|
|
|
@@ -196,6 +197,14 @@ app = AgentPoolTyper(
|
|
|
196
197
|
cls=AgentPoolGroup,
|
|
197
198
|
help=(
|
|
198
199
|
"Use every coding-agent subscription you pay for: see live usage limits and offload work to providers with headroom.\n\n"
|
|
200
|
+
"Start here (for AI agents):\n"
|
|
201
|
+
" agentpool skills get agentpool\n\n"
|
|
202
|
+
" Skills ship with the CLI, stay version-matched, and include workflow patterns, safety boundaries, "
|
|
203
|
+
"and copy-paste examples. Prefer this over guessing from flag docs alone.\n\n"
|
|
204
|
+
" skills \\[list] List available skills\n"
|
|
205
|
+
" skills get agentpool Core CLI + MCP delegation guide\n"
|
|
206
|
+
" skills get core --full Include quickstart and examples\n"
|
|
207
|
+
" skills path \\[name] Print bundled skill/docs path\n\n"
|
|
199
208
|
"Examples:\n"
|
|
200
209
|
" agentpool inventory --json\n"
|
|
201
210
|
" cat task.md | agentpool spawn --provider codex-cli --repo . --task-stdin\n"
|
|
@@ -206,6 +215,19 @@ app = AgentPoolTyper(
|
|
|
206
215
|
invoke_without_command=True,
|
|
207
216
|
no_args_is_help=True,
|
|
208
217
|
)
|
|
218
|
+
skills_app = AgentPoolTyper(
|
|
219
|
+
cls=AgentPoolGroup,
|
|
220
|
+
help=(
|
|
221
|
+
"List and retrieve bundled AgentPool skill content.\n\n"
|
|
222
|
+
"Examples:\n"
|
|
223
|
+
" agentpool skills\n"
|
|
224
|
+
" agentpool skills get agentpool\n"
|
|
225
|
+
" agentpool skills get core --full\n"
|
|
226
|
+
" agentpool skills path agentpool"
|
|
227
|
+
),
|
|
228
|
+
invoke_without_command=True,
|
|
229
|
+
no_args_is_help=False,
|
|
230
|
+
)
|
|
209
231
|
config_app = AgentPoolTyper(
|
|
210
232
|
cls=AgentPoolGroup,
|
|
211
233
|
help=(
|
|
@@ -242,12 +264,26 @@ worktrees_app = AgentPoolTyper(
|
|
|
242
264
|
" agentpool worktrees cleanup --session-id <session-id> --dry-run --json"
|
|
243
265
|
),
|
|
244
266
|
)
|
|
267
|
+
app.add_typer(skills_app, name="skills")
|
|
245
268
|
app.add_typer(config_app, name="config")
|
|
246
269
|
app.add_typer(leases_app, name="leases")
|
|
247
270
|
app.add_typer(session_app, name="session")
|
|
248
271
|
app.add_typer(worktrees_app, name="worktrees")
|
|
249
272
|
console = Console()
|
|
250
273
|
|
|
274
|
+
SKILL_DEFINITIONS: dict[str, dict[str, Any]] = {
|
|
275
|
+
"agentpool": {
|
|
276
|
+
"aliases": ["core"],
|
|
277
|
+
"filename": "agentpool-skill.md",
|
|
278
|
+
"description": "Core AgentPool CLI + MCP delegation guide. Read this before spawning workers.",
|
|
279
|
+
"references": ["quickstart.md", "examples.md"],
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
SKILL_ALIASES = {
|
|
283
|
+
alias: name for name, definition in SKILL_DEFINITIONS.items() for alias in [name, *definition["aliases"]]
|
|
284
|
+
}
|
|
285
|
+
PROJECT_ROOT = Path(__file__).resolve().parents[2]
|
|
286
|
+
|
|
251
287
|
|
|
252
288
|
@app.callback()
|
|
253
289
|
def root(
|
|
@@ -265,6 +301,158 @@ def print_data(data: object, json_output: bool) -> None:
|
|
|
265
301
|
console.print(data)
|
|
266
302
|
|
|
267
303
|
|
|
304
|
+
def _docs_resource(filename: str | None = None) -> Any:
|
|
305
|
+
docs = resources.files("agentpool").joinpath("docs")
|
|
306
|
+
return docs.joinpath(filename) if filename else docs
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
def _read_packaged_doc(filename: str) -> str:
|
|
310
|
+
packaged = _docs_resource(filename)
|
|
311
|
+
if packaged.is_file():
|
|
312
|
+
return packaged.read_text(encoding="utf-8")
|
|
313
|
+
return (PROJECT_ROOT / "docs" / filename).read_text(encoding="utf-8")
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
def _resource_display_path(filename: str | None = None) -> str:
|
|
317
|
+
packaged = _docs_resource(filename)
|
|
318
|
+
if packaged.is_file() or (filename is None and packaged.is_dir()):
|
|
319
|
+
return str(packaged)
|
|
320
|
+
fallback_docs = PROJECT_ROOT / "docs"
|
|
321
|
+
return str(fallback_docs / filename) if filename else str(fallback_docs)
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
def _skill_entry(name: str) -> dict[str, Any]:
|
|
325
|
+
definition = SKILL_DEFINITIONS[name]
|
|
326
|
+
return {
|
|
327
|
+
"name": name,
|
|
328
|
+
"aliases": definition["aliases"],
|
|
329
|
+
"description": definition["description"],
|
|
330
|
+
"full_available": bool(definition.get("references")),
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
def _resolve_skill_name(name: str) -> str:
|
|
335
|
+
normalized = name.strip().lower()
|
|
336
|
+
if normalized in SKILL_ALIASES:
|
|
337
|
+
return SKILL_ALIASES[normalized]
|
|
338
|
+
raise ToolError(
|
|
339
|
+
"INVALID_REQUEST",
|
|
340
|
+
f"Unknown skill {name!r}.",
|
|
341
|
+
{"example": "agentpool skills list"},
|
|
342
|
+
)
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
def _skill_text(name: str, *, full: bool = False) -> str:
|
|
346
|
+
definition = SKILL_DEFINITIONS[name]
|
|
347
|
+
chunks = [_read_packaged_doc(definition["filename"])]
|
|
348
|
+
if full:
|
|
349
|
+
for filename in definition.get("references") or []:
|
|
350
|
+
title = filename.removesuffix(".md").replace("-", " ").title()
|
|
351
|
+
chunks.append(f"\n\n# Reference: {title}\n\n{_read_packaged_doc(filename)}")
|
|
352
|
+
return "".join(chunks)
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
def _print_skills_list(json_output: bool) -> None:
|
|
356
|
+
data = {"skills": [_skill_entry(name) for name in sorted(SKILL_DEFINITIONS)]}
|
|
357
|
+
if json_output:
|
|
358
|
+
console.print_json(json.dumps(data, default=str))
|
|
359
|
+
return
|
|
360
|
+
for skill in data["skills"]:
|
|
361
|
+
aliases = f" (aliases: {', '.join(skill['aliases'])})" if skill["aliases"] else ""
|
|
362
|
+
console.print(f" {skill['name']:<12} {skill['description']}{aliases}")
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
@skills_app.callback(invoke_without_command=True)
|
|
366
|
+
def skills_root(
|
|
367
|
+
ctx: typer.Context,
|
|
368
|
+
json_output: Annotated[bool, typer.Option("--json", help="Emit JSON.")] = False,
|
|
369
|
+
) -> None:
|
|
370
|
+
"""List bundled skills when no subcommand is provided."""
|
|
371
|
+
if ctx.invoked_subcommand is None:
|
|
372
|
+
_print_skills_list(json_output)
|
|
373
|
+
raise typer.Exit()
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
@skills_app.command("list")
|
|
377
|
+
def skills_list(json_output: Annotated[bool, typer.Option("--json", help="Emit JSON.")] = False) -> None:
|
|
378
|
+
"""List bundled skills.
|
|
379
|
+
|
|
380
|
+
Examples:
|
|
381
|
+
agentpool skills list
|
|
382
|
+
agentpool skills list --json
|
|
383
|
+
"""
|
|
384
|
+
_print_skills_list(json_output)
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
@skills_app.command("get")
|
|
388
|
+
def skills_get(
|
|
389
|
+
name: Annotated[str | None, typer.Argument(help="Skill name, for example: agentpool or core.")] = None,
|
|
390
|
+
full: Annotated[bool, typer.Option("--full", help="Include quickstart and examples with the core skill.")] = False,
|
|
391
|
+
all_skills: Annotated[bool, typer.Option("--all", help="Output every bundled skill.")] = False,
|
|
392
|
+
json_output: Annotated[bool, typer.Option("--json", help="Emit JSON.")] = False,
|
|
393
|
+
) -> None:
|
|
394
|
+
"""Output bundled skill content.
|
|
395
|
+
|
|
396
|
+
Examples:
|
|
397
|
+
agentpool skills get agentpool
|
|
398
|
+
agentpool skills get core --full
|
|
399
|
+
agentpool skills get --all --json
|
|
400
|
+
"""
|
|
401
|
+
try:
|
|
402
|
+
if all_skills:
|
|
403
|
+
names = sorted(SKILL_DEFINITIONS)
|
|
404
|
+
elif name:
|
|
405
|
+
names = [_resolve_skill_name(name)]
|
|
406
|
+
else:
|
|
407
|
+
raise ToolError(
|
|
408
|
+
"INVALID_REQUEST",
|
|
409
|
+
"Provide a skill name or --all.",
|
|
410
|
+
{"example": "agentpool skills get agentpool"},
|
|
411
|
+
)
|
|
412
|
+
skills = [
|
|
413
|
+
{
|
|
414
|
+
**_skill_entry(skill_name),
|
|
415
|
+
"full": full,
|
|
416
|
+
"path": _resource_display_path(SKILL_DEFINITIONS[skill_name]["filename"]),
|
|
417
|
+
"text": _skill_text(skill_name, full=full),
|
|
418
|
+
}
|
|
419
|
+
for skill_name in names
|
|
420
|
+
]
|
|
421
|
+
if json_output:
|
|
422
|
+
console.print_json(json.dumps({"skills": skills}, default=str))
|
|
423
|
+
return
|
|
424
|
+
console.print("\n\n".join(skill["text"] for skill in skills), markup=False)
|
|
425
|
+
except ToolError as exc:
|
|
426
|
+
handle_tool_error(exc, json_output)
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
@skills_app.command("path")
|
|
430
|
+
def skills_path(
|
|
431
|
+
name: Annotated[str | None, typer.Argument(help="Optional skill name, for example: agentpool or core.")] = None,
|
|
432
|
+
json_output: Annotated[bool, typer.Option("--json", help="Emit JSON.")] = False,
|
|
433
|
+
) -> None:
|
|
434
|
+
"""Print bundled skill/docs path.
|
|
435
|
+
|
|
436
|
+
Examples:
|
|
437
|
+
agentpool skills path
|
|
438
|
+
agentpool skills path agentpool
|
|
439
|
+
agentpool skills path core --json
|
|
440
|
+
"""
|
|
441
|
+
try:
|
|
442
|
+
if name:
|
|
443
|
+
skill_name = _resolve_skill_name(name)
|
|
444
|
+
path = _resource_display_path(SKILL_DEFINITIONS[skill_name]["filename"])
|
|
445
|
+
data = {"name": skill_name, "path": path}
|
|
446
|
+
else:
|
|
447
|
+
data = {"path": _resource_display_path()}
|
|
448
|
+
if json_output:
|
|
449
|
+
console.print_json(json.dumps(data, default=str))
|
|
450
|
+
return
|
|
451
|
+
console.print(data["path"], markup=False)
|
|
452
|
+
except ToolError as exc:
|
|
453
|
+
handle_tool_error(exc, json_output)
|
|
454
|
+
|
|
455
|
+
|
|
268
456
|
def _env_flag(name: str) -> bool:
|
|
269
457
|
return os.environ.get(name, "").strip().lower() in {"1", "true", "yes", "on"}
|
|
270
458
|
|
|
@@ -1093,6 +1281,10 @@ def models_command(
|
|
|
1093
1281
|
console.print(f"default: {row['default_model'] or ''}")
|
|
1094
1282
|
console.print(f"smoke: {row['smoke_model'] or ''}")
|
|
1095
1283
|
console.print(f"selection: {row['model_selection'] or ''}")
|
|
1284
|
+
if row.get("reasoning_effort_arg"):
|
|
1285
|
+
console.print(f"reasoning: {row['reasoning_effort_arg']}")
|
|
1286
|
+
elif row.get("reasoning_effort_config_key"):
|
|
1287
|
+
console.print(f"reasoning config: {row['reasoning_effort_config_key']}")
|
|
1096
1288
|
console.print(f"catalog: {row['catalog_completeness'] or ''}")
|
|
1097
1289
|
if row["quirks"]:
|
|
1098
1290
|
console.print("quirks:")
|
|
@@ -1460,7 +1652,7 @@ def spawn(
|
|
|
1460
1652
|
] = None,
|
|
1461
1653
|
service_tier: Annotated[
|
|
1462
1654
|
str | None,
|
|
1463
|
-
typer.Option("--service-tier", help="Provider service tier override when supported, for example
|
|
1655
|
+
typer.Option("--service-tier", help="Provider service tier override when supported, for example priority."),
|
|
1464
1656
|
] = None,
|
|
1465
1657
|
json_output: Annotated[bool, typer.Option("--json", help="Emit JSON.")] = False,
|
|
1466
1658
|
) -> None:
|