Observed since 20 Oct, 21:26 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
agentabi
Unified async Python API for driving coding agent CLIs — Claude Code, Codex, Gemini CLI, and more
Unified interface layer for agentic coding CLIs.
One interface. Any coding agent.
agentabi provides a stable, unified interface (an "ABI") for interacting with different agentic coding CLIs. Write your integration once, swap agents with a config change.
| Agent | Provider | Status |
|---|---|---|
| Claude Code | Anthropic | Implemented |
| Codex | OpenAI | Implemented |
| Antigravity (agy) | Implemented | |
| OpenCode | Community | Implemented |
| Pi | Community | Implemented |
| Deprecated (use agy) |
pip install agentabi
Note: You also need at least one agent CLI installed:
claude,codex,agy,opencode, orpi.
pip install agentabi[claude] # Claude Agent SDK
pip install agentabi[codex] # Codex SDK
import asyncio
from agentabi import Session
async def main():
session = Session(agent="claude_code")
result = await session.run(prompt="What is 2+2?")
print(result["result_text"])
asyncio.run(main())
All agents accept the same TaskConfig with fields for:
agent, modelthinking_level ("off", "low", "medium", "high", "max")output_schema (JSON Schema)session_id, resume, ephemeralworking_dir, additional_dirs, filespermissions, allowed_tools, disallowed_toolssystem_prompt, append_system_promptAll agents emit the same streaming events:
session_start / session_end — session lifecyclemessage_start / message_delta / message_end — text streamingcontent_block_start / content_block_end — content block boundariesreasoning_delta — thinking/reasoning text (Claude, Pi)tool_use / tool_result — tool callsusage — token counts (including reasoning_tokens)error — error reportingMIT
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
typing_extensionsEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.9",
"evaluation": "NOT_EVALUATED"
} | typing_extensions>=4.0.0 | runtime |
claude-agent-sdkEnvironment{
"extras": "",
"marker": "extra == \"claude\"",
"requires_python": ">=3.9",
"evaluation": "NOT_EVALUATED"
} | claude-agent-sdk>=0.1.0; extra == "claude" | runtime |
codex-sdk-pythonEnvironment{
"extras": "",
"marker": "extra == \"codex\"",
"requires_python": ">=3.9",
"evaluation": "NOT_EVALUATED"
} | codex-sdk-python>=0.1.0; extra == "codex" | runtime |
gemini-cli-sdkEnvironment{
"extras": "",
"marker": "extra == \"gemini\"",
"requires_python": ">=3.9",
"evaluation": "NOT_EVALUATED"
} | gemini-cli-sdk>=0.5.0; extra == "gemini" | runtime |
claude-agent-sdkEnvironment{
"extras": "",
"marker": "extra == \"all\"",
"requires_python": ">=3.9",
"evaluation": "NOT_EVALUATED"
} | claude-agent-sdk>=0.1.0; extra == "all" | runtime |
codex-sdk-pythonEnvironment{
"extras": "",
"marker": "extra == \"all\"",
"requires_python": ">=3.9",
"evaluation": "NOT_EVALUATED"
} | codex-sdk-python>=0.1.0; extra == "all" | runtime |
gemini-cli-sdkEnvironment{
"extras": "",
"marker": "extra == \"all\"",
"requires_python": ">=3.9",
"evaluation": "NOT_EVALUATED"
} | gemini-cli-sdk>=0.5.0; extra == "all" | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.9",
"evaluation": "NOT_EVALUATED"
} | pytest>=7.0.0; extra == "dev" | runtime |
pytest-asyncioEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.9",
"evaluation": "NOT_EVALUATED"
} | pytest-asyncio>=0.21.0; extra == "dev" | runtime |
pytest-covEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.9",
"evaluation": "NOT_EVALUATED"
} | pytest-cov; extra == "dev" | runtime |
ruffEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.9",
"evaluation": "NOT_EVALUATED"
} | ruff==0.15.20; extra == "dev" | runtime |
tyEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.9",
"evaluation": "NOT_EVALUATED"
} | ty==0.0.54; extra == "dev" | runtime |
buildEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.9",
"evaluation": "NOT_EVALUATED"
} | build>=1.2.2.post1; extra == "dev" | runtime |
twineEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.9",
"evaluation": "NOT_EVALUATED"
} | twine>=6.1.0; extra == "dev" | runtime |
bdist_wheel · 53.71 KB · Python py3
sdist · 40.36 KB · Python source
Observed since 20 Oct, 21:26 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:497d70f18d7ba5f8e25aa152b0c2f1c6fcd2d6cc172fd33e2481ff6496b29e95