agentpool-cli 0.1.11__tar.gz → 0.1.13__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.11 → agentpool_cli-0.1.13}/.github/workflows/release.yml +9 -3
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/CHANGELOG.md +26 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/PKG-INFO +27 -13
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/README.md +26 -12
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/agent-cli-and-mcp.md +1 -1
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/agentpool-skill.md +19 -9
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/architecture.md +2 -1
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/examples.md +1 -1
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/install.md +6 -5
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/mcp-clients.md +3 -2
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/mcp-tools.md +31 -11
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/model-catalog.md +1 -1
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/provider-adapters.md +8 -2
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/quickstart.md +3 -3
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/release.md +37 -25
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/setup-codex.md +1 -1
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/usage-detection.md +3 -2
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/pyproject.toml +1 -1
- agentpool_cli-0.1.13/scripts/check_release_metadata.py +108 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/server.json +2 -2
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/__init__.py +1 -1
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/agent_io.py +3 -1
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/artifacts.py +53 -5
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/cli.py +25 -5
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/config.py +22 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/mcp/tools.py +74 -3
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/mcp_server.py +173 -19
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/models.py +22 -1
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/onboarding.py +53 -2
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/provider_model_catalog.json +4 -1
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/providers/base.py +22 -3
- agentpool_cli-0.1.13/src/agentpool/runtimes/__init__.py +4 -0
- agentpool_cli-0.1.13/src/agentpool/runtimes/base.py +45 -0
- agentpool_cli-0.1.13/src/agentpool/runtimes/terminal_control.py +266 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/runtimes/tmux.py +21 -1
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/session_manager.py +505 -71
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/stats/compute.py +2 -2
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/usage/copilot.py +0 -1
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/fixtures/stats_seed.py +1 -1
- agentpool_cli-0.1.13/tests/integration/test_fake_terminal_control_flow.py +59 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_cli.py +1 -1
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_mcp_surface.py +72 -5
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_mcp_tools.py +112 -2
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_models_config_store.py +357 -3
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_onboarding.py +1 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_stats_mcp.py +0 -1
- agentpool_cli-0.1.13/tests/unit/test_terminal_control_runtime.py +72 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/uv.lock +1 -1
- agentpool_cli-0.1.11/src/agentpool/runtimes/__init__.py +0 -3
- agentpool_cli-0.1.11/src/agentpool/runtimes/base.py +0 -36
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/.cursor/mcp.json.example +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/.github/CODEOWNERS +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/.github/ISSUE_TEMPLATE/provider_probe.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/.github/dependabot.yml +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/.github/workflows/ci.yml +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/.gitignore +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/.mcp.json.example +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/AGENTS.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/CONTRIBUTING.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/LICENSE +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/SECURITY.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/examples/README.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/onboarding.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/provider-lifecycle-matrix.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/security.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/setup-claude-code.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/setup-copilot.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/setup-cursor-cli.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/setup-cursor.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/setup-devin.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/setup-droid.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/stats.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/docs/usage-probe-matrix.md +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/scripts/install.sh +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/__main__.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/event_detection.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/fixtures/__init__.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/fixtures/fake_agents/__init__.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/fixtures/fake_agents/fake_approval_agent.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/fixtures/fake_agents/fake_common.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/fixtures/fake_agents/fake_completed_agent.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/fixtures/fake_agents/fake_idle_agent.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/fixtures/fake_agents/fake_limit_agent.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/fixtures/fake_agents/fake_patch_agent.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/fixtures/fake_agents/fake_question_agent.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/git_worktree.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/mcp/__init__.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/mcp/resources.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/policy.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/preferences.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/providers/__init__.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/providers/registry.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/redaction.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/stats/__init__.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/stats/card.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/stats/queries.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/stats/render.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/stats/window.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/store.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/usage/__init__.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/usage/_common.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/usage/ccusage.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/usage/claude.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/usage/codex.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/usage/codexbar.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/usage/combine.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/usage/devin.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/usage/parsers.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/usage/probes.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/usage/provider_parsers.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/usage/summary.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/src/agentpool/utils.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/fixtures/provider_model_catalog_golden.json +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/fixtures/usage/claude_usage.txt +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/fixtures/usage/codex_rate_limits.json +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/fixtures/usage/copilot_user.json +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/fixtures/usage/devin_plan_status.json +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/integration/test_fake_tmux_flow.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_agent_io.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_event_policy.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_redaction.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_stats_cli.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_stats_window.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_subprocess_safety.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_usage_probes.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_usage_provider_parsers.py +0 -0
- {agentpool_cli-0.1.11 → agentpool_cli-0.1.13}/tests/unit/test_usage_summary_enrichment.py +0 -0
|
@@ -6,12 +6,13 @@ on:
|
|
|
6
6
|
- "v*"
|
|
7
7
|
workflow_dispatch:
|
|
8
8
|
|
|
9
|
-
permissions:
|
|
10
|
-
contents: write
|
|
9
|
+
permissions: {}
|
|
11
10
|
|
|
12
11
|
jobs:
|
|
13
12
|
release:
|
|
14
13
|
runs-on: ubuntu-latest
|
|
14
|
+
permissions:
|
|
15
|
+
contents: write
|
|
15
16
|
|
|
16
17
|
steps:
|
|
17
18
|
- name: Check out
|
|
@@ -33,6 +34,7 @@ jobs:
|
|
|
33
34
|
- name: Run release checks
|
|
34
35
|
run: |
|
|
35
36
|
python -m pytest -q
|
|
37
|
+
python scripts/check_release_metadata.py
|
|
36
38
|
agentpool models validate --path src/agentpool/provider_model_catalog.json --json
|
|
37
39
|
agentpool config validate --json
|
|
38
40
|
agentpool smoke --provider fake-question --repo . --json
|
|
@@ -82,7 +84,9 @@ jobs:
|
|
|
82
84
|
needs: release
|
|
83
85
|
runs-on: ubuntu-latest
|
|
84
86
|
# Gated on the PUBLISH_TO_PYPI repo variable so tagging never publishes by accident.
|
|
85
|
-
#
|
|
87
|
+
# PyPI Trusted Publisher must be:
|
|
88
|
+
# project=agentpool-cli, owner=sidduHERE, repo=agentpool, workflow=release.yml, environment=pypi.
|
|
89
|
+
# Requires the GitHub `pypi` environment and no PyPI token secret.
|
|
86
90
|
if: startsWith(github.ref, 'refs/tags/') && vars.PUBLISH_TO_PYPI == 'true'
|
|
87
91
|
environment:
|
|
88
92
|
name: pypi
|
|
@@ -99,3 +103,5 @@ jobs:
|
|
|
99
103
|
|
|
100
104
|
- name: Publish to PyPI (Trusted Publishing)
|
|
101
105
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
106
|
+
with:
|
|
107
|
+
print-hash: true
|
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.1.13 - 2026-06-24
|
|
6
|
+
|
|
7
|
+
- Add `poll_worker` as a fast MCP progress snapshot and make
|
|
8
|
+
`observe_worker(timeout_seconds=0/1)` behave as a true fast poll.
|
|
9
|
+
- Bound MCP observe waits below common host executor timeouts and return timeout
|
|
10
|
+
metadata instead of leaving coordinators with dropped tool calls.
|
|
11
|
+
- Honor `include_recent_log` for MCP observation, refresh
|
|
12
|
+
`summary.partial.md` while workers are running, and avoid full transcript
|
|
13
|
+
scans on observe/poll artifact manifests.
|
|
14
|
+
- Accept terminal state names such as `COMPLETED`, `FAILED`, and `CANCELLED` in
|
|
15
|
+
`wait_for` and pass observe deadlines into runtime capture calls.
|
|
16
|
+
- Mark `terminate_worker` as explicit, side-effecting, idempotent cleanup in
|
|
17
|
+
MCP annotations without treating it as user-data destruction.
|
|
18
|
+
|
|
19
|
+
## 0.1.12 - 2026-06-06
|
|
20
|
+
|
|
21
|
+
- Add optional Terminal Control runtime support while keeping tmux as the
|
|
22
|
+
default worker runtime.
|
|
23
|
+
- Fix Claude Code steering submission by using provider-specific submit keys
|
|
24
|
+
for both initial prompts and live `send_worker_message` calls.
|
|
25
|
+
- Restore MCP capacity/cache compatibility aliases, add searchable MCP tool
|
|
26
|
+
descriptions and annotations, and make Cursor Agent CLI detection robust when
|
|
27
|
+
MCP hosts launch AgentPool with a minimal `PATH`.
|
|
28
|
+
- Add real-provider and fake-provider coverage for tmux and Terminal Control,
|
|
29
|
+
plus focused regression coverage for MCP aliases and provider binary lookup.
|
|
30
|
+
|
|
5
31
|
## 0.1.11 - 2026-06-05
|
|
6
32
|
|
|
7
33
|
- Refresh provider model catalogs from current Claude Code, Codex, Cursor,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentpool-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.13
|
|
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
|
|
@@ -40,7 +40,7 @@ informed, never automatic.
|
|
|
40
40
|
|
|
41
41
|
The v0.1 alpha posture is conservative:
|
|
42
42
|
|
|
43
|
-
- tmux is the
|
|
43
|
+
- tmux is the default runtime; Terminal Control is optional when configured.
|
|
44
44
|
- Provider selection is explicit; `provider=auto` is rejected.
|
|
45
45
|
- Usage/capacity summaries are confidence-tagged and keyed by provider id.
|
|
46
46
|
- CodexBar and ccusage are optional usage helpers when installed or configured.
|
|
@@ -51,8 +51,10 @@ The v0.1 alpha posture is conservative:
|
|
|
51
51
|
|
|
52
52
|
- Python 3.11 or newer.
|
|
53
53
|
- tmux on `PATH`.
|
|
54
|
+
- Optional: `termctrl` on `PATH` for the Terminal Control runtime.
|
|
54
55
|
- Git for worktree isolation and diff collection.
|
|
55
|
-
- macOS or Linux. Windows is not a v0.1 target except through
|
|
56
|
+
- macOS or Linux for live runtimes. Windows is not a v0.1 target except through
|
|
57
|
+
WSL-like shells.
|
|
56
58
|
|
|
57
59
|
## Install
|
|
58
60
|
|
|
@@ -72,9 +74,21 @@ agentpool setup codex
|
|
|
72
74
|
agentpool doctor --deep --privacy
|
|
73
75
|
```
|
|
74
76
|
|
|
75
|
-
The `agentpool-cli` package installs on macOS, Linux, and Windows, but
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
The `agentpool-cli` package installs on macOS, Linux, and Windows, but live
|
|
78
|
+
terminal runtimes are supported on macOS or Linux (Windows via WSL).
|
|
79
|
+
|
|
80
|
+
Optional Terminal Control config:
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
runtime:
|
|
84
|
+
default: tmux
|
|
85
|
+
terminal_control:
|
|
86
|
+
enabled: true
|
|
87
|
+
binary: termctrl
|
|
88
|
+
session_prefix: agentpool
|
|
89
|
+
cols: 120
|
|
90
|
+
rows: 36
|
|
91
|
+
```
|
|
78
92
|
|
|
79
93
|
Install from source:
|
|
80
94
|
|
|
@@ -134,7 +148,7 @@ agentpool spawn \
|
|
|
134
148
|
--task "Inspect the project and ask one clarifying question." \
|
|
135
149
|
--isolation read_only
|
|
136
150
|
|
|
137
|
-
agentpool observe <session-id> --wait-for completed,error,question,approval_prompt --timeout
|
|
151
|
+
agentpool observe <session-id> --wait-for completed,error,question,approval_prompt --timeout 60 --json
|
|
138
152
|
agentpool send <session-id> "Continue with the smallest useful check."
|
|
139
153
|
agentpool artifacts <session-id> --json
|
|
140
154
|
agentpool transcript <session-id> --tail-lines 80 --json
|
|
@@ -185,8 +199,8 @@ agentpool usage-summary --refresh --backend ccusage --provider claude-code --jso
|
|
|
185
199
|
ordered and it is not a recommendation list. Each row includes `usable`,
|
|
186
200
|
`unusable_reason`, quota windows, confidence, age/staleness, and reset timing when
|
|
187
201
|
the provider exposes it. The older CLI `capacity-summary` command is retained
|
|
188
|
-
as a human convenience alias;
|
|
189
|
-
|
|
202
|
+
as a human convenience alias; MCP also exposes `get_capacity_summary` as a
|
|
203
|
+
compatibility alias for `get_usage_summary`.
|
|
190
204
|
|
|
191
205
|
The default buffer is `policy.min_remaining_percent = 10`. If any reported
|
|
192
206
|
quota window is below that buffer, the provider row is marked unusable for the
|
|
@@ -294,9 +308,9 @@ Use `--absolute-command` if the MCP host does not inherit your shell `PATH`.
|
|
|
294
308
|
Verified per-host steps live in [docs/mcp-clients.md](docs/mcp-clients.md).
|
|
295
309
|
Team templates: [.cursor/mcp.json.example](.cursor/mcp.json.example),
|
|
296
310
|
[.mcp.json.example](.mcp.json.example), and [docs/examples/README.md](docs/examples/README.md).
|
|
297
|
-
MCP Registry
|
|
298
|
-
|
|
299
|
-
[docs/release.md](docs/release.md).
|
|
311
|
+
MCP Registry metadata: [server.json](server.json). It advertises the
|
|
312
|
+
`agentpool-cli` PyPI package and should be bumped with each release. Release
|
|
313
|
+
checklist: [docs/release.md](docs/release.md).
|
|
300
314
|
Provider setup guides:
|
|
301
315
|
[Cursor](docs/setup-cursor.md),
|
|
302
316
|
[Cursor Agent CLI](docs/setup-cursor-cli.md),
|
|
@@ -316,7 +330,7 @@ Then use tools for live operations. The user-owned preferences file also shows
|
|
|
316
330
|
up through `agentpool preferences` and `get_delegation_preferences()`. It may
|
|
317
331
|
say to use your native subagent system instead of AgentPool for some tasks. The
|
|
318
332
|
default MCP toolset is deliberately small: inventory, usage snapshot, usage
|
|
319
|
-
summary, provider models, preferences, spawn, observe, send, interrupt,
|
|
333
|
+
summary, provider models, preferences, spawn, observe, poll, send, interrupt,
|
|
320
334
|
collect, artifact manifest, transcript paging, and terminate. Add opt-in
|
|
321
335
|
toolsets with `agentpool mcp --toolsets default,stats,sessions,leases,worktrees`.
|
|
322
336
|
|
|
@@ -19,7 +19,7 @@ informed, never automatic.
|
|
|
19
19
|
|
|
20
20
|
The v0.1 alpha posture is conservative:
|
|
21
21
|
|
|
22
|
-
- tmux is the
|
|
22
|
+
- tmux is the default runtime; Terminal Control is optional when configured.
|
|
23
23
|
- Provider selection is explicit; `provider=auto` is rejected.
|
|
24
24
|
- Usage/capacity summaries are confidence-tagged and keyed by provider id.
|
|
25
25
|
- CodexBar and ccusage are optional usage helpers when installed or configured.
|
|
@@ -30,8 +30,10 @@ The v0.1 alpha posture is conservative:
|
|
|
30
30
|
|
|
31
31
|
- Python 3.11 or newer.
|
|
32
32
|
- tmux on `PATH`.
|
|
33
|
+
- Optional: `termctrl` on `PATH` for the Terminal Control runtime.
|
|
33
34
|
- Git for worktree isolation and diff collection.
|
|
34
|
-
- macOS or Linux. Windows is not a v0.1 target except through
|
|
35
|
+
- macOS or Linux for live runtimes. Windows is not a v0.1 target except through
|
|
36
|
+
WSL-like shells.
|
|
35
37
|
|
|
36
38
|
## Install
|
|
37
39
|
|
|
@@ -51,9 +53,21 @@ agentpool setup codex
|
|
|
51
53
|
agentpool doctor --deep --privacy
|
|
52
54
|
```
|
|
53
55
|
|
|
54
|
-
The `agentpool-cli` package installs on macOS, Linux, and Windows, but
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
The `agentpool-cli` package installs on macOS, Linux, and Windows, but live
|
|
57
|
+
terminal runtimes are supported on macOS or Linux (Windows via WSL).
|
|
58
|
+
|
|
59
|
+
Optional Terminal Control config:
|
|
60
|
+
|
|
61
|
+
```yaml
|
|
62
|
+
runtime:
|
|
63
|
+
default: tmux
|
|
64
|
+
terminal_control:
|
|
65
|
+
enabled: true
|
|
66
|
+
binary: termctrl
|
|
67
|
+
session_prefix: agentpool
|
|
68
|
+
cols: 120
|
|
69
|
+
rows: 36
|
|
70
|
+
```
|
|
57
71
|
|
|
58
72
|
Install from source:
|
|
59
73
|
|
|
@@ -113,7 +127,7 @@ agentpool spawn \
|
|
|
113
127
|
--task "Inspect the project and ask one clarifying question." \
|
|
114
128
|
--isolation read_only
|
|
115
129
|
|
|
116
|
-
agentpool observe <session-id> --wait-for completed,error,question,approval_prompt --timeout
|
|
130
|
+
agentpool observe <session-id> --wait-for completed,error,question,approval_prompt --timeout 60 --json
|
|
117
131
|
agentpool send <session-id> "Continue with the smallest useful check."
|
|
118
132
|
agentpool artifacts <session-id> --json
|
|
119
133
|
agentpool transcript <session-id> --tail-lines 80 --json
|
|
@@ -164,8 +178,8 @@ agentpool usage-summary --refresh --backend ccusage --provider claude-code --jso
|
|
|
164
178
|
ordered and it is not a recommendation list. Each row includes `usable`,
|
|
165
179
|
`unusable_reason`, quota windows, confidence, age/staleness, and reset timing when
|
|
166
180
|
the provider exposes it. The older CLI `capacity-summary` command is retained
|
|
167
|
-
as a human convenience alias;
|
|
168
|
-
|
|
181
|
+
as a human convenience alias; MCP also exposes `get_capacity_summary` as a
|
|
182
|
+
compatibility alias for `get_usage_summary`.
|
|
169
183
|
|
|
170
184
|
The default buffer is `policy.min_remaining_percent = 10`. If any reported
|
|
171
185
|
quota window is below that buffer, the provider row is marked unusable for the
|
|
@@ -273,9 +287,9 @@ Use `--absolute-command` if the MCP host does not inherit your shell `PATH`.
|
|
|
273
287
|
Verified per-host steps live in [docs/mcp-clients.md](docs/mcp-clients.md).
|
|
274
288
|
Team templates: [.cursor/mcp.json.example](.cursor/mcp.json.example),
|
|
275
289
|
[.mcp.json.example](.mcp.json.example), and [docs/examples/README.md](docs/examples/README.md).
|
|
276
|
-
MCP Registry
|
|
277
|
-
|
|
278
|
-
[docs/release.md](docs/release.md).
|
|
290
|
+
MCP Registry metadata: [server.json](server.json). It advertises the
|
|
291
|
+
`agentpool-cli` PyPI package and should be bumped with each release. Release
|
|
292
|
+
checklist: [docs/release.md](docs/release.md).
|
|
279
293
|
Provider setup guides:
|
|
280
294
|
[Cursor](docs/setup-cursor.md),
|
|
281
295
|
[Cursor Agent CLI](docs/setup-cursor-cli.md),
|
|
@@ -295,7 +309,7 @@ Then use tools for live operations. The user-owned preferences file also shows
|
|
|
295
309
|
up through `agentpool preferences` and `get_delegation_preferences()`. It may
|
|
296
310
|
say to use your native subagent system instead of AgentPool for some tasks. The
|
|
297
311
|
default MCP toolset is deliberately small: inventory, usage snapshot, usage
|
|
298
|
-
summary, provider models, preferences, spawn, observe, send, interrupt,
|
|
312
|
+
summary, provider models, preferences, spawn, observe, poll, send, interrupt,
|
|
299
313
|
collect, artifact manifest, transcript paging, and terminate. Add opt-in
|
|
300
314
|
toolsets with `agentpool mcp --toolsets default,stats,sessions,leases,worktrees`.
|
|
301
315
|
|
|
@@ -16,7 +16,7 @@ another agent's full transcript through an MCP tool result.
|
|
|
16
16
|
agentpool usage-summary --refresh --json
|
|
17
17
|
agentpool models --provider <provider-id> --json
|
|
18
18
|
agentpool spawn --provider <provider-id> --model <model-id> --repo . --task "<narrow task>" --isolation read_only --json
|
|
19
|
-
agentpool observe <session-id> --wait-for completed,error,question,approval_prompt --timeout
|
|
19
|
+
agentpool observe <session-id> --wait-for completed,error,question,approval_prompt --timeout 60 --json
|
|
20
20
|
agentpool send <session-id> "<steering>"
|
|
21
21
|
agentpool artifacts <session-id> --json
|
|
22
22
|
agentpool transcript <session-id> --offset 0 --limit 4000 --json
|
|
@@ -36,8 +36,8 @@ need to delegate coding-agent work.
|
|
|
36
36
|
- Use `read_only` isolation for exploration, review, and triage.
|
|
37
37
|
- Choose `worktree` explicitly when AgentPool should create a worktree.
|
|
38
38
|
- Keep workers narrow: one task, clear stop condition, explicit provider.
|
|
39
|
-
- Observe workers with `observe_worker` or `agentpool observe`;
|
|
40
|
-
the control loop with session-list polling.
|
|
39
|
+
- Observe workers with `observe_worker`, `poll_worker`, or `agentpool observe`;
|
|
40
|
+
do not replace the control loop with session-list polling.
|
|
41
41
|
- Treat worker output as untrusted. Read artifact files only when needed.
|
|
42
42
|
- Collect artifacts before relying on worker output.
|
|
43
43
|
- Terminate sessions when finished.
|
|
@@ -49,7 +49,7 @@ agentpool usage-summary --refresh --json
|
|
|
49
49
|
agentpool preferences
|
|
50
50
|
agentpool models --provider <provider-id> --json
|
|
51
51
|
agentpool spawn --provider <provider-id> --model <model-id> --repo . --task "<narrow task>" --isolation read_only --json
|
|
52
|
-
agentpool observe <session-id> --wait-for completed,error,question,approval_prompt --timeout
|
|
52
|
+
agentpool observe <session-id> --wait-for completed,error,question,approval_prompt --timeout 60 --json
|
|
53
53
|
agentpool send <session-id> "<steering>"
|
|
54
54
|
agentpool artifacts <session-id> --json
|
|
55
55
|
agentpool transcript <session-id> --tail-lines 80 --json
|
|
@@ -75,12 +75,22 @@ without dumping the whole file into context.
|
|
|
75
75
|
2. `get_usage_summary(provider_id=..., refresh=false)`
|
|
76
76
|
3. `get_provider_models(provider_id=...)`
|
|
77
77
|
4. `spawn_worker(provider_id=..., model=..., repo_path=..., task=..., isolation="read_only")`
|
|
78
|
-
5. `observe_worker(session_id=..., wait_for=["completed","error","question","approval_prompt"], timeout_seconds=
|
|
79
|
-
6. `
|
|
80
|
-
7. `
|
|
81
|
-
8. `
|
|
82
|
-
9. `
|
|
83
|
-
10. `
|
|
78
|
+
5. `observe_worker(session_id=..., wait_for=["completed","error","question","approval_prompt"], timeout_seconds=45)`
|
|
79
|
+
6. `poll_worker(session_id=..., include_recent_log=true)` for immediate progress checks between waits
|
|
80
|
+
7. `send_worker_message(...)` or `interrupt_worker(...)`
|
|
81
|
+
8. `get_artifact_manifest(...)`
|
|
82
|
+
9. `read_worker_transcript(...)` for bounded transcript pages, only if needed
|
|
83
|
+
10. `collect_worker_artifacts(...)`
|
|
84
|
+
11. `terminate_worker(...)`
|
|
85
|
+
|
|
86
|
+
In MCP, `observe_worker(timeout_seconds=0)` and
|
|
87
|
+
`observe_worker(timeout_seconds=1)` are fast polls. Prefer `poll_worker` when
|
|
88
|
+
you want a current snapshot without waiting. Long waits are guarded below common
|
|
89
|
+
host executor caps, and AgentPool returns current state plus timeout metadata
|
|
90
|
+
instead of letting the host kill the call. Set `include_recent_log=true` when
|
|
91
|
+
you need a bounded output tail while the worker is still running; AgentPool also
|
|
92
|
+
keeps `summary.partial.md` in the artifact manifest for salvageable progress
|
|
93
|
+
notes before final `summary.md` or `result.md` exists.
|
|
84
94
|
|
|
85
95
|
Use opt-in MCP toolsets for extra surfaces:
|
|
86
96
|
|
|
@@ -15,7 +15,8 @@ Core modules:
|
|
|
15
15
|
- `models.py`: Pydantic response and persistence models.
|
|
16
16
|
- `config.py`: `~/.agentpool/config.yaml` loader and defaults.
|
|
17
17
|
- `providers/`: conservative CLI detection and launch templates.
|
|
18
|
-
- `runtimes/tmux.py`:
|
|
18
|
+
- `runtimes/tmux.py`: default worker runtime.
|
|
19
|
+
- `runtimes/terminal_control.py`: optional named-session Terminal Control runtime.
|
|
19
20
|
- `store.py`: SQLite sessions, events, usage snapshots, artifacts, and leases.
|
|
20
21
|
- `session_manager.py`: policy enforcement and worker lifecycle orchestration.
|
|
21
22
|
- `mcp_server.py`: MCP tools and resources.
|
|
@@ -20,7 +20,7 @@ agentpool spawn \
|
|
|
20
20
|
Observe and steer:
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
|
-
agentpool observe <session-id> --wait-for question,completed,error --timeout
|
|
23
|
+
agentpool observe <session-id> --wait-for question,completed,error --timeout 60 --json
|
|
24
24
|
agentpool send <session-id> "Inspect migrations first. Stay read-only."
|
|
25
25
|
agentpool session show <session-id> --json
|
|
26
26
|
agentpool collect <session-id> --json
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
# Install AgentPool
|
|
2
2
|
|
|
3
3
|
AgentPool is a local CLI and MCP server. Install it on the same machine where
|
|
4
|
-
your coding-agent CLIs are logged in and where
|
|
4
|
+
your coding-agent CLIs are logged in and where your selected runtime is
|
|
5
|
+
available.
|
|
5
6
|
|
|
6
7
|
## Requirements
|
|
7
8
|
|
|
8
9
|
- Python 3.11 or newer.
|
|
9
|
-
- `tmux` on `PATH
|
|
10
|
+
- `tmux` on `PATH` for the default runtime.
|
|
11
|
+
- Optional: `termctrl` on `PATH` for the Terminal Control runtime.
|
|
10
12
|
- Git on `PATH`.
|
|
11
|
-
- macOS or Linux for
|
|
12
|
-
Windows too, but
|
|
13
|
-
through WSL.
|
|
13
|
+
- macOS or Linux for live runtimes. The `agentpool-cli` package installs on
|
|
14
|
+
Windows too, but terminal runtimes are supported only through WSL.
|
|
14
15
|
|
|
15
16
|
## Install From PyPI
|
|
16
17
|
|
|
@@ -260,8 +260,9 @@ Once connected, a good first prompt is:
|
|
|
260
260
|
Read agentpool://skill.md and agentpool://preferences.md. Then call
|
|
261
261
|
get_delegation_preferences(), get_usage_summary(refresh=false),
|
|
262
262
|
get_provider_models(), and get_inventory() before
|
|
263
|
-
spawning any workers. After spawn_worker, use observe_worker for
|
|
264
|
-
|
|
263
|
+
spawning any workers. After spawn_worker, use observe_worker for waits and
|
|
264
|
+
poll_worker for immediate progress checks; do not poll get_session/list_sessions
|
|
265
|
+
as a substitute. Use
|
|
265
266
|
read_worker_transcript with offset/limit only when you need bounded transcript
|
|
266
267
|
pages. If Codex shows update or hook-review startup menus, answer the numbered
|
|
267
268
|
menu choice explicitly before observing again. Choose providers explicitly; do
|
|
@@ -32,11 +32,14 @@ The default toolset is the smallest worker lifecycle surface:
|
|
|
32
32
|
|
|
33
33
|
- `get_inventory`
|
|
34
34
|
- `get_usage_summary`
|
|
35
|
+
- `get_capacity_summary`
|
|
35
36
|
- `get_usage_snapshot`
|
|
37
|
+
- `get_cached_usage_snapshot`
|
|
36
38
|
- `get_provider_models`
|
|
37
39
|
- `get_delegation_preferences`
|
|
38
40
|
- `spawn_worker`
|
|
39
41
|
- `observe_worker`
|
|
42
|
+
- `poll_worker`
|
|
40
43
|
- `send_worker_message`
|
|
41
44
|
- `interrupt_worker`
|
|
42
45
|
- `collect_worker_artifacts`
|
|
@@ -44,11 +47,10 @@ The default toolset is the smallest worker lifecycle surface:
|
|
|
44
47
|
- `read_worker_transcript`
|
|
45
48
|
- `terminate_worker`
|
|
46
49
|
|
|
47
|
-
|
|
50
|
+
Compatibility aliases:
|
|
48
51
|
|
|
49
|
-
- `
|
|
50
|
-
- `
|
|
51
|
-
- `get_cached_usage_snapshot`
|
|
52
|
+
- `get_capacity_summary`: alias for `get_usage_summary`
|
|
53
|
+
- `get_cached_usage_snapshot`: alias for `get_usage_snapshot(refresh=false)`
|
|
52
54
|
|
|
53
55
|
Use `get_usage_summary(refresh=false)` for the compact provider-capacity view.
|
|
54
56
|
Use `get_usage_snapshot(refresh=false)` only when you need raw snapshots; cached
|
|
@@ -84,12 +86,29 @@ Recommended loop:
|
|
|
84
86
|
1. `get_usage_summary(provider_id=..., refresh=false)`
|
|
85
87
|
2. `get_provider_models(provider_id=...)`
|
|
86
88
|
3. `spawn_worker(provider_id=..., model=..., repo_path=..., task=..., isolation="read_only")`
|
|
87
|
-
4. `observe_worker(session_id=..., wait_for=["completed","error","question","approval_prompt"], timeout_seconds=
|
|
89
|
+
4. `observe_worker(session_id=..., wait_for=["completed","error","question","approval_prompt"], timeout_seconds=45)`
|
|
88
90
|
5. `send_worker_message(...)` or `interrupt_worker(...)` when needed
|
|
89
|
-
6. `
|
|
90
|
-
7. `
|
|
91
|
-
8. `
|
|
92
|
-
9. `
|
|
91
|
+
6. `poll_worker(session_id=..., include_recent_log=true)` for immediate progress checks between waits
|
|
92
|
+
7. `get_artifact_manifest(...)`
|
|
93
|
+
8. `read_worker_transcript(session_id=..., offset=..., limit=...)` only when a bounded transcript page is needed
|
|
94
|
+
9. `collect_worker_artifacts(...)`
|
|
95
|
+
10. `terminate_worker(...)` when the session is no longer useful
|
|
96
|
+
|
|
97
|
+
`observe_worker` accepts both event names and terminal state names in
|
|
98
|
+
`wait_for`, so `["completed"]` and `["COMPLETED"]` both work. Unknown
|
|
99
|
+
`wait_for` values are rejected instead of silently becoming a poll. In MCP, long
|
|
100
|
+
observe waits are guarded below common host executor caps; if a larger
|
|
101
|
+
`timeout_seconds` is requested, AgentPool returns a timeout payload with
|
|
102
|
+
`requested_timeout_seconds`, `effective_timeout_seconds`, and the current worker
|
|
103
|
+
metadata rather than letting the outer host drop the tool call. Passing
|
|
104
|
+
`timeout_seconds=0` or `1` is treated as a fast poll. Prefer `poll_worker` when
|
|
105
|
+
you explicitly want "show me the current frame now."
|
|
106
|
+
|
|
107
|
+
When `include_recent_log=true`, `observe_worker` and `poll_worker` include a
|
|
108
|
+
bounded recent screen/log tail in `worker_output`, even before final artifacts
|
|
109
|
+
exist. Each observe also refreshes `summary.partial.md` in the artifact
|
|
110
|
+
manifest. `summary.md` and `result.md` remain final-result files and are written
|
|
111
|
+
when a result marker is found or when artifacts are collected.
|
|
93
112
|
|
|
94
113
|
`spawn_worker.task` must be the concrete delegated instruction. Placeholder text
|
|
95
114
|
such as `Improve documentation in @filename` is rejected.
|
|
@@ -107,9 +126,10 @@ user's provider config.
|
|
|
107
126
|
|
|
108
127
|
## Output Detail And Lockdown
|
|
109
128
|
|
|
110
|
-
Worker text is untrusted model output. `observe_worker` and
|
|
129
|
+
Worker text is untrusted model output. `observe_worker`, `poll_worker`, and
|
|
111
130
|
`collect_worker_artifacts` default to `detail="summary"`, which returns state,
|
|
112
|
-
readiness metadata, and artifact paths without inline worker text
|
|
131
|
+
readiness metadata, and artifact paths without inline worker text unless an
|
|
132
|
+
observe/poll call explicitly asks for `include_recent_log=true`.
|
|
113
133
|
|
|
114
134
|
Use `detail="excerpt"` or `detail="full"` only when the coordinator needs text
|
|
115
135
|
inline. Inline worker text is wrapped in a random per-call delimiter:
|
|
@@ -23,7 +23,7 @@ Each provider entry can describe:
|
|
|
23
23
|
- `model_selection`: non-flag pinning mode, such as Droid runtime settings.
|
|
24
24
|
- `reasoning_effort_arg`: the CLI flag used by providers with native effort
|
|
25
25
|
selection, such as Claude Code `--effort` or Droid `--reasoning-effort`.
|
|
26
|
-
- `submit_keys`:
|
|
26
|
+
- `submit_keys`: runtime keys needed for interactive submit quirks.
|
|
27
27
|
- `quirks`: operator-facing notes for harness behavior.
|
|
28
28
|
|
|
29
29
|
## Override
|
|
@@ -8,7 +8,8 @@ Default real-provider behavior is intentionally limited:
|
|
|
8
8
|
- Probe version with a short timeout.
|
|
9
9
|
- Report auth as `unknown` unless a safe probe exists.
|
|
10
10
|
- Report usage as `unknown` unless a safe explicit probe exists.
|
|
11
|
-
- Launch through
|
|
11
|
+
- Launch through the selected runtime using the provider's normal CLI command;
|
|
12
|
+
tmux is the default runtime and Terminal Control is optional.
|
|
12
13
|
- Pin a requested model only when the provider exposes a safe process-local
|
|
13
14
|
mechanism for it.
|
|
14
15
|
|
|
@@ -50,12 +51,17 @@ Model pinning behavior:
|
|
|
50
51
|
`--reasoning-effort`, which AgentPool forwards when requested.
|
|
51
52
|
- AgentPool does not edit or persist provider credentials or user defaults.
|
|
52
53
|
|
|
53
|
-
|
|
54
|
+
Runtime submit behavior:
|
|
54
55
|
|
|
55
56
|
- Most providers submit pasted text with terminal Enter.
|
|
56
57
|
- `codex-cli` submits with `C-m` in tmux.
|
|
58
|
+
- `claude-code` receives an explicit `Enter` after pasted steering so
|
|
59
|
+
multi-line messages ending in a newline are submitted instead of left in the
|
|
60
|
+
composer.
|
|
57
61
|
- Short menu selections such as startup trust or update prompts still use normal
|
|
58
62
|
Enter so they do not go through provider composer shortcuts.
|
|
63
|
+
- Terminal Control maps the same submit keys onto its named key vocabulary, for
|
|
64
|
+
example `C-m` to `enter` and `C-c` to `ctrl-c`.
|
|
59
65
|
|
|
60
66
|
Fake providers under `src/agentpool/fixtures/fake_agents/` are the executable contract for v0.1.
|
|
61
67
|
They are packaged with AgentPool so `agentpool smoke --provider fake-question`
|
|
@@ -20,8 +20,8 @@ agentpool init
|
|
|
20
20
|
agentpool doctor --deep --privacy
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
`doctor` confirms
|
|
24
|
-
provider's install/auth state.
|
|
23
|
+
`doctor` confirms runtime availability, SQLite, and the artifact root, and lists
|
|
24
|
+
each provider's install/auth state.
|
|
25
25
|
|
|
26
26
|
## 2. Smoke test without a real provider
|
|
27
27
|
|
|
@@ -54,7 +54,7 @@ agentpool spawn --provider <provider-id> --repo . \
|
|
|
54
54
|
The result includes a top-level `session_id`. Drive it with:
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
|
-
agentpool observe <session-id> --wait-for question,completed,error --timeout
|
|
57
|
+
agentpool observe <session-id> --wait-for question,completed,error --timeout 60 --json
|
|
58
58
|
agentpool send <session-id> "Continue with the smallest useful check." --json
|
|
59
59
|
agentpool session show <session-id> --json
|
|
60
60
|
agentpool collect <session-id> --json
|
|
@@ -7,6 +7,7 @@ metadata, and onboarding verification.
|
|
|
7
7
|
|
|
8
8
|
```bash
|
|
9
9
|
.venv/bin/python -m pytest -q
|
|
10
|
+
.venv/bin/python scripts/check_release_metadata.py
|
|
10
11
|
agentpool models validate --path src/agentpool/provider_model_catalog.json --json
|
|
11
12
|
agentpool config validate --json
|
|
12
13
|
agentpool smoke --provider fake-question --repo . --json
|
|
@@ -27,12 +28,13 @@ Update together before tagging:
|
|
|
27
28
|
- `pyproject.toml` `[project].version`
|
|
28
29
|
- `src/agentpool/__init__.py` `__version__`
|
|
29
30
|
- `server.json` top-level `version`
|
|
30
|
-
- `server.json` `packages[].version`
|
|
31
|
+
- `server.json` `packages[].version`
|
|
31
32
|
- [CHANGELOG.md](../CHANGELOG.md)
|
|
32
33
|
|
|
33
34
|
The public PyPI distribution name is `agentpool-cli`. The installed console
|
|
34
|
-
command remains `agentpool
|
|
35
|
-
|
|
35
|
+
command remains `agentpool`, with an `agentpool-cli` console-script alias for
|
|
36
|
+
`uvx agentpool-cli mcp`. Do not publish a package named `agentpool`; that PyPI
|
|
37
|
+
name belongs to another project.
|
|
36
38
|
|
|
37
39
|
## Tag and publish
|
|
38
40
|
|
|
@@ -51,18 +53,37 @@ The [release workflow](../.github/workflows/release.yml) will:
|
|
|
51
53
|
repository variable `PUBLISH_TO_PYPI` is set to `true` and the `pypi`
|
|
52
54
|
deployment environment is configured. Otherwise the publish job is skipped.
|
|
53
55
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
Keep the external setup in
|
|
57
|
+
[PyPI and GitHub trusted-publisher state](#pypi-and-github-trusted-publisher-state)
|
|
58
|
+
in place before tagging.
|
|
56
59
|
|
|
57
|
-
##
|
|
60
|
+
## PyPI and GitHub trusted-publisher state
|
|
58
61
|
|
|
59
|
-
|
|
62
|
+
The `agentpool-cli` project is already live on PyPI, and the `v0.1.12`
|
|
63
|
+
distributions were uploaded using Trusted Publishing from
|
|
64
|
+
`sidduHERE/agentpool` via `.github/workflows/release.yml` and the `pypi`
|
|
65
|
+
environment.
|
|
60
66
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
Keep these exact external settings:
|
|
68
|
+
|
|
69
|
+
- PyPI project: `agentpool-cli`
|
|
70
|
+
- PyPI trusted publisher owner: `sidduHERE`
|
|
71
|
+
- PyPI trusted publisher repository: `agentpool`
|
|
72
|
+
- PyPI trusted publisher workflow: `release.yml`
|
|
73
|
+
- PyPI trusted publisher environment: `pypi`
|
|
74
|
+
- GitHub deployment environment: `pypi`
|
|
75
|
+
- GitHub repository variable: `PUBLISH_TO_PYPI=true`
|
|
76
|
+
|
|
77
|
+
The publish job has `id-token: write` only on the PyPI job and no PyPI token
|
|
78
|
+
secret is required.
|
|
79
|
+
|
|
80
|
+
Recommended GitHub hardening:
|
|
81
|
+
|
|
82
|
+
- Add required reviewers to the `pypi` deployment environment so a tag push does
|
|
83
|
+
not immediately publish without a human release approval.
|
|
84
|
+
- If deployment branch/tag rules are enabled, allow release tags matching `v*`;
|
|
85
|
+
do not restrict the environment to branch deployments only.
|
|
86
|
+
- Keep PyPI API tokens out of GitHub secrets for this project.
|
|
66
87
|
|
|
67
88
|
## Post-release smoke
|
|
68
89
|
|
|
@@ -87,25 +108,16 @@ uv tool install --force --python python3.11 \
|
|
|
87
108
|
|
|
88
109
|
## MCP Registry
|
|
89
110
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
the first successful PyPI publish, add a `pypi` package entry that maps registry
|
|
94
|
-
consumers to:
|
|
95
|
-
|
|
96
|
-
```json
|
|
97
|
-
{ "command": "agentpool", "args": ["mcp"] }
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
Bump `server.json` `packages[].version` together with the project version from
|
|
101
|
-
then on.
|
|
111
|
+
[server.json](../server.json) now advertises the published `agentpool-cli` PyPI
|
|
112
|
+
package. Keep its top-level `version` and `packages[].version` aligned with
|
|
113
|
+
`pyproject.toml` and `src/agentpool/__init__.py`.
|
|
102
114
|
|
|
103
115
|
Host-specific install UX remains in [docs/mcp-clients.md](mcp-clients.md).
|
|
104
116
|
|
|
105
117
|
Publish sequence:
|
|
106
118
|
|
|
107
119
|
1. Publish `agentpool-cli` to PyPI with Trusted Publishing (the release job).
|
|
108
|
-
2.
|
|
120
|
+
2. Keep [server.json](../server.json) pointed at the same published version.
|
|
109
121
|
3. Keep the README metadata comment `mcp-name: io.github.sidduHERE/agentpool`.
|
|
110
122
|
The namespace casing must match the GitHub username exactly (`sidduHERE`, not
|
|
111
123
|
`sidduhere`); the registry grants `io.github.<login>/*` with the login's
|
|
@@ -101,7 +101,7 @@ Read agentpool://skill.md. Then call
|
|
|
101
101
|
get_usage_summary(provider_id="codex-cli", refresh=false),
|
|
102
102
|
get_provider_models(provider_id="codex-cli"), and get_inventory before spawning
|
|
103
103
|
any workers. After spawn_worker, use
|
|
104
|
-
observe_worker for
|
|
104
|
+
observe_worker for waits and poll_worker for immediate progress checks. If Codex shows an update prompt,
|
|
105
105
|
send menu choice 2 to skip. If Codex shows a directory trust prompt, send an
|
|
106
106
|
empty submitted message only when trusting that directory is acceptable. If it
|
|
107
107
|
shows hook review, send menu choice 3 unless the user approved trusting hooks.
|
|
@@ -7,8 +7,9 @@ Allowed confidence values include `official`, `local_cli`, `local_config`, `prov
|
|
|
7
7
|
Live probes are only run by explicit usage requests. Inventory remains non-invasive and reports whether a provider supports an explicit usage probe. Successful explicit probes are persisted to SQLite; `agentpool usage --cached`, `get_usage_summary(refresh=false)`, and `get_usage_snapshot(refresh=false)` read the latest persisted snapshots without refreshing providers. MCP refreshes do not run interactive provider TUI probes, because those can interfere with the host agent that is calling AgentPool. CLI callers can use `--no-interactive` on `usage` / `usage-summary`, or set `AGENTPOOL_NO_INTERACTIVE_USAGE=1`, to take the same headless posture. MCP refreshes are also bounded by a short server-side budget; if a provider is slow, AgentPool returns a partial response with an unknown row instead of holding the MCP connection open.
|
|
8
8
|
|
|
9
9
|
`agentpool usage-summary` returns a `providers` map keyed by provider id. The
|
|
10
|
-
CLI `capacity-summary` command
|
|
11
|
-
|
|
10
|
+
CLI `capacity-summary` command and MCP `get_capacity_summary` tool are
|
|
11
|
+
compatibility aliases for `usage-summary` / `get_usage_summary`. Each row
|
|
12
|
+
includes `usable`, `unusable_reason`, `stale`, and
|
|
12
13
|
`age_seconds`. `stale` is informational age metadata only; it does not by
|
|
13
14
|
itself make a provider unusable. `usable` is derived from install/auth status,
|
|
14
15
|
provider usage status, confidence, and reported quota windows. The default
|