agent-runtime-kit 0.1.0__tar.gz → 0.2.0__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.
Files changed (96) hide show
  1. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/.gitignore +3 -0
  2. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/PKG-INFO +13 -11
  3. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/README.md +10 -7
  4. agent_runtime_kit-0.2.0/docs/capability-matrix.md +72 -0
  5. agent_runtime_kit-0.2.0/docs/live-smoke.md +35 -0
  6. agent_runtime_kit-0.2.0/docs/providers.md +73 -0
  7. agent_runtime_kit-0.2.0/docs/publish-checklist.md +77 -0
  8. agent_runtime_kit-0.2.0/docs/sdk-evolution-agent-design.md +622 -0
  9. agent_runtime_kit-0.2.0/docs/sdk-evolution-agent.md +163 -0
  10. agent_runtime_kit-0.2.0/examples/__init__.py +1 -0
  11. agent_runtime_kit-0.2.0/examples/sdk_evolution_agent/__init__.py +14 -0
  12. agent_runtime_kit-0.2.0/examples/sdk_evolution_agent/__main__.py +10 -0
  13. agent_runtime_kit-0.2.0/examples/sdk_evolution_agent/behavior.py +484 -0
  14. agent_runtime_kit-0.2.0/examples/sdk_evolution_agent/cli.py +506 -0
  15. agent_runtime_kit-0.2.0/examples/sdk_evolution_agent/collectors.py +339 -0
  16. agent_runtime_kit-0.2.0/examples/sdk_evolution_agent/current_state.py +106 -0
  17. agent_runtime_kit-0.2.0/examples/sdk_evolution_agent/events.py +23 -0
  18. agent_runtime_kit-0.2.0/examples/sdk_evolution_agent/models.py +199 -0
  19. agent_runtime_kit-0.2.0/examples/sdk_evolution_agent/pr.py +94 -0
  20. agent_runtime_kit-0.2.0/examples/sdk_evolution_agent/release_notes.py +248 -0
  21. agent_runtime_kit-0.2.0/examples/sdk_evolution_agent/report.py +192 -0
  22. agent_runtime_kit-0.2.0/examples/sdk_evolution_agent/schemas.py +127 -0
  23. agent_runtime_kit-0.2.0/examples/sdk_evolution_agent/snapshots.py +212 -0
  24. agent_runtime_kit-0.2.0/examples/sdk_evolution_agent/stages.py +610 -0
  25. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/pyproject.toml +24 -5
  26. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/src/agent_runtime_kit/_types.py +18 -2
  27. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/src/agent_runtime_kit/adapters/_common.py +63 -5
  28. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/src/agent_runtime_kit/adapters/antigravity.py +224 -45
  29. agent_runtime_kit-0.2.0/src/agent_runtime_kit/adapters/claude.py +504 -0
  30. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/src/agent_runtime_kit/adapters/codex.py +201 -14
  31. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/src/agent_runtime_kit/events.py +15 -2
  32. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/src/agent_runtime_kit/registry.py +10 -2
  33. agent_runtime_kit-0.2.0/tests/test_antigravity_adapter.py +458 -0
  34. agent_runtime_kit-0.2.0/tests/test_claude_adapter.py +342 -0
  35. agent_runtime_kit-0.2.0/tests/test_codex_adapter.py +393 -0
  36. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/tests/test_events.py +17 -3
  37. agent_runtime_kit-0.2.0/tests/test_sdk_contract.py +168 -0
  38. agent_runtime_kit-0.2.0/tests/test_sdk_evolution_agent.py +1082 -0
  39. agent_runtime_kit-0.1.0/.planning/PROJECT.md +0 -140
  40. agent_runtime_kit-0.1.0/.planning/REQUIREMENTS.md +0 -196
  41. agent_runtime_kit-0.1.0/.planning/ROADMAP.md +0 -124
  42. agent_runtime_kit-0.1.0/.planning/STATE.md +0 -100
  43. agent_runtime_kit-0.1.0/.planning/config.json +0 -68
  44. agent_runtime_kit-0.1.0/.planning/phases/01-core-runtime-skeleton/01-CONTEXT.md +0 -71
  45. agent_runtime_kit-0.1.0/.planning/phases/01-core-runtime-skeleton/01-PLAN.md +0 -19
  46. agent_runtime_kit-0.1.0/.planning/phases/01-core-runtime-skeleton/01-SUMMARY.md +0 -12
  47. agent_runtime_kit-0.1.0/.planning/phases/01-core-runtime-skeleton/01-VERIFICATION.md +0 -17
  48. agent_runtime_kit-0.1.0/.planning/phases/02-events-and-test-harness/02-CONTEXT.md +0 -64
  49. agent_runtime_kit-0.1.0/.planning/phases/02-events-and-test-harness/02-PLAN.md +0 -20
  50. agent_runtime_kit-0.1.0/.planning/phases/02-events-and-test-harness/02-SUMMARY.md +0 -11
  51. agent_runtime_kit-0.1.0/.planning/phases/02-events-and-test-harness/02-VERIFICATION.md +0 -18
  52. agent_runtime_kit-0.1.0/.planning/phases/03-claude-and-codex-runtimes/03-CONTEXT.md +0 -65
  53. agent_runtime_kit-0.1.0/.planning/phases/03-claude-and-codex-runtimes/03-PLAN.md +0 -21
  54. agent_runtime_kit-0.1.0/.planning/phases/03-claude-and-codex-runtimes/03-SUMMARY.md +0 -12
  55. agent_runtime_kit-0.1.0/.planning/phases/03-claude-and-codex-runtimes/03-VERIFICATION.md +0 -18
  56. agent_runtime_kit-0.1.0/.planning/phases/04-antigravity-and-cross-runtime-proof/04-CONTEXT.md +0 -62
  57. agent_runtime_kit-0.1.0/.planning/phases/04-antigravity-and-cross-runtime-proof/04-PLAN.md +0 -21
  58. agent_runtime_kit-0.1.0/.planning/phases/04-antigravity-and-cross-runtime-proof/04-SUMMARY.md +0 -10
  59. agent_runtime_kit-0.1.0/.planning/phases/04-antigravity-and-cross-runtime-proof/04-VERIFICATION.md +0 -18
  60. agent_runtime_kit-0.1.0/.planning/phases/05-public-release-readiness/05-CONTEXT.md +0 -61
  61. agent_runtime_kit-0.1.0/.planning/phases/05-public-release-readiness/05-PLAN.md +0 -19
  62. agent_runtime_kit-0.1.0/.planning/phases/05-public-release-readiness/05-SUMMARY.md +0 -10
  63. agent_runtime_kit-0.1.0/.planning/phases/05-public-release-readiness/05-VERIFICATION.md +0 -19
  64. agent_runtime_kit-0.1.0/.planning/research/ARCHITECTURE.md +0 -273
  65. agent_runtime_kit-0.1.0/.planning/research/FEATURES.md +0 -147
  66. agent_runtime_kit-0.1.0/.planning/research/PITFALLS.md +0 -233
  67. agent_runtime_kit-0.1.0/.planning/research/STACK.md +0 -115
  68. agent_runtime_kit-0.1.0/.planning/research/SUMMARY.md +0 -191
  69. agent_runtime_kit-0.1.0/.python-version +0 -1
  70. agent_runtime_kit-0.1.0/AGENTS.md +0 -190
  71. agent_runtime_kit-0.1.0/docs/capability-matrix.md +0 -19
  72. agent_runtime_kit-0.1.0/docs/live-smoke.md +0 -27
  73. agent_runtime_kit-0.1.0/docs/providers.md +0 -26
  74. agent_runtime_kit-0.1.0/docs/publish-checklist.md +0 -48
  75. agent_runtime_kit-0.1.0/src/agent_runtime_kit/adapters/claude.py +0 -302
  76. agent_runtime_kit-0.1.0/tests/test_antigravity_adapter.py +0 -182
  77. agent_runtime_kit-0.1.0/tests/test_claude_adapter.py +0 -81
  78. agent_runtime_kit-0.1.0/tests/test_codex_adapter.py +0 -125
  79. agent_runtime_kit-0.1.0/uv.lock +0 -1722
  80. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/LICENSE +0 -0
  81. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/docs/mestre-migration.md +0 -0
  82. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/docs/quickstart.md +0 -0
  83. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/examples/run_same_task.py +0 -0
  84. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/src/agent_runtime_kit/__init__.py +0 -0
  85. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/src/agent_runtime_kit/_errors.py +0 -0
  86. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/src/agent_runtime_kit/_runtime.py +0 -0
  87. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/src/agent_runtime_kit/adapters/__init__.py +0 -0
  88. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/src/agent_runtime_kit/adapters/diagnostics.py +0 -0
  89. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/src/agent_runtime_kit/py.typed +0 -0
  90. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/src/agent_runtime_kit/testing/__init__.py +0 -0
  91. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/src/agent_runtime_kit/testing/fakes.py +0 -0
  92. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/tests/test_core.py +0 -0
  93. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/tests/test_live_smoke.py +0 -0
  94. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/tests/test_mestre_compatibility.py +0 -0
  95. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/tests/test_optional_dependencies.py +0 -0
  96. {agent_runtime_kit-0.1.0 → agent_runtime_kit-0.2.0}/tests/test_provider_diagnostics.py +0 -0
@@ -12,5 +12,8 @@ wheels/
12
12
  htmlcov/
13
13
  .DS_Store
14
14
 
15
+ # Local generated reports
16
+ reports/sdk-evolution/
17
+
15
18
  # Virtual environments
16
19
  .venv
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-runtime-kit
3
- Version: 0.1.0
3
+ Version: 0.2.0
4
4
  Summary: One typed runtime API for Claude, Codex, and Antigravity agent SDKs.
5
5
  Project-URL: Homepage, https://github.com/ebarti/agent-runtime-kit
6
6
  Project-URL: Repository, https://github.com/ebarti/agent-runtime-kit
@@ -11,7 +11,6 @@ License-File: LICENSE
11
11
  Keywords: agents,antigravity,claude,codex,sdk
12
12
  Classifier: Development Status :: 3 - Alpha
13
13
  Classifier: Intended Audience :: Developers
14
- Classifier: License :: OSI Approved :: MIT License
15
14
  Classifier: Programming Language :: Python :: 3
16
15
  Classifier: Programming Language :: Python :: 3.10
17
16
  Classifier: Programming Language :: Python :: 3.11
@@ -22,13 +21,13 @@ Requires-Python: >=3.10
22
21
  Provides-Extra: all
23
22
  Requires-Dist: claude-agent-sdk>=0.2.87; extra == 'all'
24
23
  Requires-Dist: google-antigravity>=0.1.2; extra == 'all'
25
- Requires-Dist: openai-codex>=0.1.0b2; extra == 'all'
24
+ Requires-Dist: openai-codex>=0.1.0b3; extra == 'all'
26
25
  Provides-Extra: antigravity
27
26
  Requires-Dist: google-antigravity>=0.1.2; extra == 'antigravity'
28
27
  Provides-Extra: claude
29
28
  Requires-Dist: claude-agent-sdk>=0.2.87; extra == 'claude'
30
29
  Provides-Extra: codex
31
- Requires-Dist: openai-codex>=0.1.0b2; extra == 'codex'
30
+ Requires-Dist: openai-codex>=0.1.0b3; extra == 'codex'
32
31
  Description-Content-Type: text/markdown
33
32
 
34
33
  # agent-runtime-kit
@@ -103,16 +102,19 @@ asyncio.run(main())
103
102
 
104
103
  `AgentTask` supports goal, system prompt, working directory, permission profile,
105
104
  MCP stdio servers, session/resume handles, output schema, budget, metadata, and
106
- an async event sink.
105
+ an async event sink. Where a runtime cannot honor a field (for example only
106
+ Claude maps `budget_usd`; Codex and Antigravity reject it with a typed
107
+ `UnsupportedTaskInputError`) the adapter raises rather than silently dropping it.
107
108
 
108
109
  `AgentResult` returns output, finish reason, parsed structured output, usage,
109
110
  cost, session id, artifacts, tool-call audits, and provider metadata.
110
111
 
111
112
  ## Docs
112
113
 
113
- - [Quickstart](docs/quickstart.md)
114
- - [Provider diagnostics](docs/providers.md)
115
- - [Capability matrix](docs/capability-matrix.md)
116
- - [Live smoke tests](docs/live-smoke.md)
117
- - [Mestre migration notes](docs/mestre-migration.md)
118
- - [Publish checklist](docs/publish-checklist.md)
114
+ - [Quickstart](https://github.com/ebarti/agent-runtime-kit/blob/main/docs/quickstart.md)
115
+ - [Provider diagnostics](https://github.com/ebarti/agent-runtime-kit/blob/main/docs/providers.md)
116
+ - [Capability matrix](https://github.com/ebarti/agent-runtime-kit/blob/main/docs/capability-matrix.md)
117
+ - [Live smoke tests](https://github.com/ebarti/agent-runtime-kit/blob/main/docs/live-smoke.md)
118
+ - [Mestre migration notes](https://github.com/ebarti/agent-runtime-kit/blob/main/docs/mestre-migration.md)
119
+ - [Publish checklist](https://github.com/ebarti/agent-runtime-kit/blob/main/docs/publish-checklist.md)
120
+ - [SDK evolution agent](https://github.com/ebarti/agent-runtime-kit/blob/main/docs/sdk-evolution-agent.md)
@@ -70,16 +70,19 @@ asyncio.run(main())
70
70
 
71
71
  `AgentTask` supports goal, system prompt, working directory, permission profile,
72
72
  MCP stdio servers, session/resume handles, output schema, budget, metadata, and
73
- an async event sink.
73
+ an async event sink. Where a runtime cannot honor a field (for example only
74
+ Claude maps `budget_usd`; Codex and Antigravity reject it with a typed
75
+ `UnsupportedTaskInputError`) the adapter raises rather than silently dropping it.
74
76
 
75
77
  `AgentResult` returns output, finish reason, parsed structured output, usage,
76
78
  cost, session id, artifacts, tool-call audits, and provider metadata.
77
79
 
78
80
  ## Docs
79
81
 
80
- - [Quickstart](docs/quickstart.md)
81
- - [Provider diagnostics](docs/providers.md)
82
- - [Capability matrix](docs/capability-matrix.md)
83
- - [Live smoke tests](docs/live-smoke.md)
84
- - [Mestre migration notes](docs/mestre-migration.md)
85
- - [Publish checklist](docs/publish-checklist.md)
82
+ - [Quickstart](https://github.com/ebarti/agent-runtime-kit/blob/main/docs/quickstart.md)
83
+ - [Provider diagnostics](https://github.com/ebarti/agent-runtime-kit/blob/main/docs/providers.md)
84
+ - [Capability matrix](https://github.com/ebarti/agent-runtime-kit/blob/main/docs/capability-matrix.md)
85
+ - [Live smoke tests](https://github.com/ebarti/agent-runtime-kit/blob/main/docs/live-smoke.md)
86
+ - [Mestre migration notes](https://github.com/ebarti/agent-runtime-kit/blob/main/docs/mestre-migration.md)
87
+ - [Publish checklist](https://github.com/ebarti/agent-runtime-kit/blob/main/docs/publish-checklist.md)
88
+ - [SDK evolution agent](https://github.com/ebarti/agent-runtime-kit/blob/main/docs/sdk-evolution-agent.md)
@@ -0,0 +1,72 @@
1
+ # Capability Matrix
2
+
3
+ | Capability | Claude Agent SDK | OpenAI Codex SDK | Google Antigravity SDK |
4
+ |------------|------------------|------------------|------------------------|
5
+ | Optional extra | `claude` | `codex` | `antigravity` |
6
+ | Core import without extra | Yes | Yes | Yes |
7
+ | Working directory | Yes | Yes | Yes |
8
+ | Session resume | Yes | Yes | Yes |
9
+ | Structured output | Native `output_format` when available | Native output schema / JSON parse fallback | Native response schema / JSON parse fallback |
10
+ | MCP stdio servers | Yes | No per-task MCP config | Yes, without per-server env |
11
+ | Permission mapping | `permission_mode` | approval mode + sandbox | capabilities + policies |
12
+ | Streaming output events | Yes — incremental output/tool events while the SDK runs | Not enabled in v1 adapter | Yes — from response chunks |
13
+ | Tool audit events | Yes — from streamed message blocks | Yes — parsed from `TurnResult` items | Yes — from tool chunks |
14
+ | Missing package diagnostics | Yes (`AgentRuntimeUnavailableError`) | Yes (`AgentRuntimeUnavailableError`) | Yes (`AgentRuntimeUnavailableError`) |
15
+ | Missing credential diagnostics | Provider-owned/local auth, including API key, Bedrock, Vertex, AWS, and Azure modes | Provider-owned/local auth, including ChatGPT/API key/custom providers/Bedrock | API key or Google ADC / Vertex config |
16
+ | Live smoke test | Opt-in | Opt-in | Opt-in |
17
+
18
+ The matrix is intentionally not a lowest-common-denominator contract. Adapters
19
+ reject unsupported inputs (see below) when silently dropping them would be
20
+ misleading.
21
+
22
+ ## Permission mapping
23
+
24
+ A single portable `PermissionMode` maps to each vendor's native controls. The
25
+ same profile yields different but intentionally aligned postures per runtime;
26
+ review this table before assuming a mode is equivalent everywhere.
27
+
28
+ | `PermissionMode` | Claude `permission_mode` | Codex `approval_mode` + sandbox | Antigravity toolset + policy |
29
+ |------------------|--------------------------|---------------------------------|------------------------------|
30
+ | `STRICT` | `plan` | `deny_all` (never escalate) | read-only toolset, no `allow_all` policy |
31
+ | `CAUTIOUS` | `acceptEdits` | `deny_all` (never escalate) | nondestructive toolset (no `run_command`), `allow_all` policy |
32
+ | `DEFAULT` | `default` | `auto_review` (escalations auto-adjudicated) | nondestructive toolset (no `run_command`), `allow_all` policy |
33
+ | `PERMISSIVE` | `bypassPermissions` | `auto_review` (escalations auto-adjudicated) | all tools, `allow_all` policy |
34
+
35
+ Codex sandbox is derived from `FilesystemAccess`, independent of the approval
36
+ mode: `READ_ONLY` → `read_only`, `WORKSPACE_WRITE` → `workspace_write`,
37
+ `FULL_ACCESS` → `full_access`.
38
+
39
+ Antigravity toolset notes: the table above describes the default posture when
40
+ `allowed_tools` is empty. A `READ_ONLY` filesystem forces the read-only toolset
41
+ regardless of mode. User-supplied `allowed_tools`/`disallowed_tools` override the
42
+ defaults and are validated against the `BuiltinTools` enum (for example
43
+ `"view_file"`, not `"Read"`); an unknown name raises `UnsupportedTaskInputError`.
44
+
45
+ ## Rejected inputs
46
+
47
+ Each adapter raises `UnsupportedTaskInputError` for task fields it has no SDK
48
+ surface to honor, rather than dropping them silently.
49
+
50
+ | Field | Claude | Codex | Antigravity |
51
+ |-------|--------|-------|-------------|
52
+ | `budget_usd` | Mapped (`max_budget_usd`) | Rejected | Rejected |
53
+ | `permissions.network` | Rejected | Rejected | Rejected |
54
+ | `allowed_tools` / `disallowed_tools` | Mapped | Rejected | Mapped (`disallowed_tools` → `disabled_tools`); allow-list and deny-list are mutually exclusive and rejected if combined |
55
+ | `mcp_servers` | Mapped | Rejected (no per-task MCP) | Mapped, without per-server `env` |
56
+
57
+ Two task fields are informational only and not enforced by any built-in adapter:
58
+ `AgentTask.sdk_executions` (carried into events as a hint) and
59
+ `SessionResumeState.transcript` (adapters resume by `session_id`).
60
+
61
+ Claude additionally records any vendor-option kwargs it had to drop due to SDK
62
+ drift in `AgentResult.metadata["dropped_options"]`, so silent omission stays
63
+ observable.
64
+
65
+ ## Session storage (Antigravity)
66
+
67
+ Antigravity session and app-data directories are written under
68
+ `$XDG_CACHE_HOME/agent-runtime-kit` (default `~/.cache/agent-runtime-kit`),
69
+ created with `0o700` permissions. This replaces the previous world-shared
70
+ `/tmp` location so transcripts survive reboots and are not exposed to other
71
+ users. Override the base directory with
72
+ `AntigravityAgentRuntime(data_dir=...)`.
@@ -0,0 +1,35 @@
1
+ # Live Smoke Tests
2
+
3
+ Default tests never call live providers. Live smoke tests are skipped unless
4
+ you opt in explicitly:
5
+
6
+ ```bash
7
+ AGENT_RUNTIME_KIT_LIVE=1 AGENT_RUNTIME_KIT_LIVE_PROVIDER=claude uv run pytest -m live
8
+ ```
9
+
10
+ Provider values:
11
+
12
+ - `claude`
13
+ - `codex`
14
+ - `antigravity`
15
+ - `all`
16
+
17
+ Expected setup:
18
+
19
+ - Claude: install `agent-runtime-kit[claude]` and configure Claude Agent SDK
20
+ auth according to vendor docs. Supported provider modes include Anthropic API
21
+ key auth, Amazon Bedrock via `CLAUDE_CODE_USE_BEDROCK=1` and the AWS SDK
22
+ credential chain, Google Vertex AI, Claude Platform on AWS, and Azure AI
23
+ Foundry.
24
+ - Codex: install `agent-runtime-kit[codex]` and configure local Codex auth/app
25
+ server according to vendor docs. Codex can use ChatGPT sign-in, API-key
26
+ sign-in, access-token setup, custom model providers, and the built-in
27
+ `amazon-bedrock` model provider.
28
+ - Antigravity: install `agent-runtime-kit[antigravity]` and either set
29
+ `GEMINI_API_KEY` / `GOOGLE_API_KEY` or configure Google Application Default
30
+ Credentials for Vertex AI. When using ADC, provide a project through ADC or
31
+ `GOOGLE_CLOUD_PROJECT`; the adapter defaults location to `global` unless
32
+ `GOOGLE_CLOUD_LOCATION`, `GOOGLE_CLOUD_REGION`, or `CLOUD_ML_REGION` is set.
33
+
34
+ The smoke prompt is intentionally small. It verifies adapter construction,
35
+ availability diagnostics, one task invocation, and a non-empty result.
@@ -0,0 +1,73 @@
1
+ # Provider Diagnostics
2
+
3
+ `agent-runtime-kit` keeps provider setup checks explicit. Each runtime exposes
4
+ `availability()` and returns a `RuntimeAvailability` value with:
5
+
6
+ - runtime kind
7
+ - availability flag
8
+ - reason
9
+ - message
10
+ - package name
11
+ - installed version when discoverable
12
+
13
+ Claude uses the `claude-agent-sdk` package and maps working directory,
14
+ permissions, MCP servers, sessions, structured output, tool allow/deny lists,
15
+ runtime environment, and budget where supported by the installed SDK. It
16
+ streams incremental output and tool events while the SDK runs, and sets
17
+ `finish_reason="max_turns"` when a turn is truncated by the max-turns limit.
18
+ `permissions.network` has no SDK surface and is rejected with a typed error.
19
+ Claude auth is provider-owned: use Anthropic API key auth, or configure
20
+ third-party provider modes through Claude Code environment/settings such as
21
+ `CLAUDE_CODE_USE_BEDROCK=1` with the AWS SDK credential chain,
22
+ `CLAUDE_CODE_USE_VERTEX=1` with Google credentials,
23
+ `CLAUDE_CODE_USE_ANTHROPIC_AWS=1`, or `CLAUDE_CODE_USE_FOUNDRY=1`.
24
+ `ClaudeAgentRuntime(env=...)` passes those provider-specific environment values
25
+ to the SDK subprocess without scraping credential files. Any option kwargs
26
+ dropped because a future SDK renamed or removed them are recorded in
27
+ `AgentResult.metadata["dropped_options"]` rather than discarded silently.
28
+
29
+ Codex uses the `openai-codex` package and maps working directory, session
30
+ resume, approval mode, sandbox, structured output, model, and reasoning effort.
31
+ Approval mode follows `PermissionMode`: `STRICT`/`CAUTIOUS` → `deny_all` (never
32
+ escalate beyond the sandbox), `DEFAULT`/`PERMISSIVE` → `auto_review`
33
+ (escalations auto-adjudicated). Tool audits are parsed from `TurnResult.items`
34
+ (command executions, MCP tool calls, dynamic tool calls, web searches), and a
35
+ `TurnResult.status` of `failed`/`interrupted` maps to the matching
36
+ `finish_reason`. `budget_usd`, `permissions.network`, `allowed_tools`,
37
+ `disallowed_tools`, and `mcp_servers` have no per-task SDK surface and are
38
+ rejected with typed errors. The constructor defaults to
39
+ `config_overrides=("features.plugins=false",)` so headless runs are
40
+ deterministic and do not pick up host-local Codex plugin configuration; pass a
41
+ different tuple to opt in. Codex auth is owned by the local Codex runtime:
42
+ ChatGPT sign-in, API-key sign-in, access-token setup, and custom providers stay
43
+ in Codex config. For Amazon Bedrock, pass Codex config overrides such as
44
+ `model_provider=amazon-bedrock` and provider-specific model/profile/region
45
+ settings, and pass AWS environment values with `CodexAgentRuntime(env=...)` when
46
+ they should be scoped to the SDK subprocess.
47
+
48
+ Antigravity uses the `google-antigravity` package and maps API-key or Google
49
+ Application Default Credentials auth, workspace, permission-derived
50
+ capabilities/policies, MCP stdio servers, conversation id, structured output,
51
+ session directories, model, and tool events. API-key auth comes from the
52
+ constructor, `GEMINI_API_KEY`, or `GOOGLE_API_KEY`. Without an API key, the
53
+ adapter uses Vertex AI config with Google ADC when a project can be discovered
54
+ from ADC, `GOOGLE_CLOUD_PROJECT`, or `GCLOUD_PROJECT`; location defaults to
55
+ `global` unless `GOOGLE_CLOUD_LOCATION`, `GOOGLE_CLOUD_REGION`, or
56
+ `CLOUD_ML_REGION` is set. `disallowed_tools` maps to
57
+ `CapabilitiesConfig.disabled_tools`, and an allow-list and a deny-list are
58
+ mutually exclusive (the SDK forbids combining enabled and disabled tool lists),
59
+ so supplying both is rejected. Tool names are validated against the
60
+ `BuiltinTools` enum (`"view_file"`, not `"Read"`). `budget_usd` and
61
+ `permissions.network` are rejected with typed errors, and MCP server configs do
62
+ not accept per-server env values. The default tool posture with no
63
+ `allowed_tools` is:
64
+
65
+ | `PermissionMode` (or `READ_ONLY` filesystem) | Toolset | Policy |
66
+ |----------------------------------------------|---------|--------|
67
+ | `STRICT`, or any `READ_ONLY` filesystem | read-only | none (no `allow_all`) |
68
+ | `CAUTIOUS`, `DEFAULT` | nondestructive (no `run_command`) | `allow_all` |
69
+ | `PERMISSIVE` | all tools | `allow_all` |
70
+
71
+ Session and app-data directories are written under
72
+ `$XDG_CACHE_HOME/agent-runtime-kit` (default `~/.cache/agent-runtime-kit`,
73
+ `0o700`), overridable via `AntigravityAgentRuntime(data_dir=...)`.
@@ -0,0 +1,77 @@
1
+ # Publish Checklist
2
+
3
+ `agent-runtime-kit` is not published yet.
4
+
5
+ ## Current Name Check
6
+
7
+ Checked on 2026-06-10 from this workspace:
8
+
9
+ ```bash
10
+ python - <<'PY'
11
+ import urllib.error, urllib.request
12
+ try:
13
+ urllib.request.urlopen("https://pypi.org/pypi/agent-runtime-kit/json", timeout=10)
14
+ print("TAKEN")
15
+ except urllib.error.HTTPError as exc:
16
+ print("FREE" if exc.code == 404 else f"HTTP_{exc.code}")
17
+ PY
18
+ ```
19
+
20
+ Result: `FREE`.
21
+
22
+ Re-run this immediately before publishing. A 404 means the name is still
23
+ available; any 200 response means it has been claimed.
24
+
25
+ ## Release Gate
26
+
27
+ Continuous integration (`.github/workflows/ci.yml`) runs `ruff`, `mypy`, and
28
+ `pytest` on every pull request and push to `main` across Python 3.10–3.13 in
29
+ both the core-only and all-extras dependency lanes, so gate results no longer
30
+ depend on which extras happen to be installed locally. The publish workflow
31
+ itself also gates on tests: its `test` job (core on 3.10, all extras on 3.13)
32
+ must pass before the `build` job runs, so a release cannot be built or published
33
+ unless `ruff`/`mypy`/`pytest` are green against the release tag.
34
+
35
+ To reproduce the gate locally before tagging:
36
+
37
+ - `uv run ruff check .`
38
+ - `uv run mypy`
39
+ - `uv run pytest`
40
+ - `uv run python -m build`
41
+ - Optional: provider-specific live smoke tests from `docs/live-smoke.md`
42
+
43
+ ## Trusted Publishing Setup
44
+
45
+ Use PyPI Trusted Publishing rather than a long-lived API token.
46
+
47
+ For a new package, create a pending publisher on PyPI with:
48
+
49
+ - PyPI project name: `agent-runtime-kit`
50
+ - Owner: `ebarti`
51
+ - Repository name: `agent-runtime-kit`
52
+ - Workflow name: `publish-pypi.yml`
53
+ - Environment name: `pypi`
54
+
55
+ The workflow is `.github/workflows/publish-pypi.yml`. It publishes when a
56
+ GitHub release is published and also supports manual dispatch with a release
57
+ tag such as `v0.1.0`.
58
+
59
+ ## Metadata Gate
60
+
61
+ - Confirm `pyproject.toml` package name is `agent-runtime-kit`.
62
+ - Confirm Python support remains `>=3.10`.
63
+ - Confirm optional extras resolve for `claude`, `codex`, `antigravity`, and
64
+ `all`.
65
+ - Confirm README links render on PyPI.
66
+ - Confirm `LICENSE` is included.
67
+
68
+ ## Publish
69
+
70
+ After configuring the pending publisher on PyPI, publish the existing first
71
+ release by manually running the `Publish to PyPI` workflow with:
72
+
73
+ ```text
74
+ tag = v0.1.0
75
+ ```
76
+
77
+ Do not publish until the release gate passes and the PyPI name check is fresh.