CLI-First deterministic multi-agent orchestration library
Project description
DeterminAgent
CLI-First Deterministic Multi-Agent Orchestration Library
Orchestrate powerful AI workflows at zero extra cost. DeterminAgent controls multiple AI CLI tools (Claude Code, Copilot CLI, Gemini CLI, OpenAI Codex) using LangGraph to create deterministic pipelines powered by your existing flat-rate subscriptions.
🚀 First Contact
DeterminAgent is a Python library for developers who want to build complex, multi-agent systems without paying for expensive per-token API calls. By wrapping the CLI tools you already pay for, DeterminAgent allows you to build production-grade workflows for $0 in variable costs.
Key Features
- Library-Only: Full control in pure Python. No proprietary YAML DSL.
- Subscription Arbitrage: Uses your flat-rate CLI subscriptions.
- Deterministic: Powered by LangGraph state machines.
- Zero-Latency: Controls local tools via subprocess.
📦 Installation
From PyPI (Recommended)
pip install determinagent
From Source
For the latest development version or to contribute:
# Clone the repository
git clone https://github.com/Experto-AI/determinagent.git
cd determinagent
# Install dependencies and set up environment
poetry install
# Verify installation
poetry run python -c "import determinagent; print(determinagent.__version__)"
Prerequisites
- Python 3.10+
- At least one supported AI CLI tool installed and authenticated:
- Claude Code (
claude) - Copilot CLI (
copilot) - Gemini CLI (
gemini) - OpenAI Codex (
codex)
- Claude Code (
⚡ Quick Start
Library Usage
from determinagent import UnifiedAgent, SessionManager
# Create a deterministic agent
writer = UnifiedAgent(
provider="claude",
model="balanced",
role="Technical Blogger",
session=SessionManager("claude")
)
# Send a prompt - zero per-token cost!
response = writer.send("Explain LangGraph in 3 sentences.")
print(response)
Template Flows
Don't start from scratch. Use our pre-built Python templates in the flows/ directory:
flows/blog/: Complete Writer → Editor → Reviewer workflow with human review.
To run the blog flow:
python flows/blog/main.py "My Blog Topic" --writer claude --editor copilot
🧩 Compatibility Matrix
| Provider | Adapter Status | Session Support | Web Search | Model Aliases |
|---|---|---|---|---|
| Claude Code | ✅ Alpha | ✅ Native (Resume) | ✅ Yes | fast, balanced, powerful, reasoning, free |
| Copilot CLI | ✅ Alpha | ❌ No (Fresh Session) | ✅ Yes | fast, balanced, powerful, reasoning, free |
| Gemini CLI | ✅ Alpha | ❌ No (Fresh Session) | ❌ No | fast, balanced, powerful, reasoning, free |
| OpenAI Codex | ✅ Alpha | ❌ No (Fresh Session) | ❌ No | fast, balanced, powerful, reasoning, free |
🎯 Model Alias Map
DeterminAgent resolves model aliases per provider so you can keep flows consistent.
| Alias | Claude Code | Gemini CLI | Copilot CLI | OpenAI Codex |
|---|---|---|---|---|
| fast | haiku | gemini-3-flash-preview | claude-haiku-4.5 | gpt-5.1-codex-mini |
| balanced | sonnet | gemini-3-pro-preview | claude-sonnet-4.5 | gpt-5.1-codex |
| powerful | opus | gemini-3-pro-preview | claude-opus-4.5 | gpt-5.1-codex-max |
| reasoning | opus | gemini-3-pro-preview | gpt-5.2 | gpt-5.1-codex-max |
| free | haiku | gemini-3-flash-preview | claude-haiku-4.5 | gpt-5.1-codex-mini |
Notes:
- You can always pass an exact model string to override the alias.
- Availability depends on your provider plan and CLI version.
- Gemini 3 preview models require enabling Preview Features in Gemini CLI; if unavailable, pass
gemini-2.5-proorgemini-2.5-flash. - Codex CLI does not enumerate models in
--help; defaults mirror Codex model names exposed by Copilot CLI.
🛠️ Troubleshooting
Common Issues
-
ProviderNotAvailable: CLI command 'claude' not found- Ensure the tool is installed and available in your
$PATH. - Run
claude --versionmanually to verify.
- Ensure the tool is installed and available in your
-
Authentication Errors
- DeterminAgent uses your local sessions. Ensure you are logged in to the CLI tool (e.g.,
copilot auth statusorclaude login).
- DeterminAgent uses your local sessions. Ensure you are logged in to the CLI tool (e.g.,
-
Subprocess Timeouts
- Some agents (like Writer) can take a few minutes for long content. Ensure your environment doesn't kill long-running processes.
Debug Mode
Set LOG_LEVEL=DEBUG to see the full subprocess commands and raw output.
📖 Documentation
Core Documentation
- Technical Architecture: Design principles and system internals.
- CLI Reference: Low-level flag mappings for each provider.
- Actionable Plan & Roadmap: Current status and next steps.
API Reference
- UnifiedAgent: Core orchestration class.
- Provider Adapters: Claude, Copilot, Gemini, Codex wrappers.
- SessionManager: Conversation history management.
- Exceptions: Error handling hierarchy.
Tutorials
- Your First Flow: Step-by-step guide to building a workflow.
Community
- Contributing: How to help improve the project.
- Code of Conduct: Community guidelines.
- Security Policy: Reporting vulnerabilities.
📜 License
Apache License 2.0 - see LICENSE for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file determinagent-0.14.1.tar.gz.
File metadata
- Download URL: determinagent-0.14.1.tar.gz
- Upload date:
- Size: 29.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ae0530156d2cfaa1c22c418a9589478828dd7bfcdb2ed70cc346059a1b36315
|
|
| MD5 |
74ba18b9806dc2be9c89c78e74be64ef
|
|
| BLAKE2b-256 |
554d1b7dea9034ee014c53ed4df764f61dfb6264c6604d388efa95e672ff2486
|
Provenance
The following attestation bundles were made for determinagent-0.14.1.tar.gz:
Publisher:
publish.yml on Experto-AI/determinagent
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
determinagent-0.14.1.tar.gz -
Subject digest:
6ae0530156d2cfaa1c22c418a9589478828dd7bfcdb2ed70cc346059a1b36315 - Sigstore transparency entry: 798891243
- Sigstore integration time:
-
Permalink:
Experto-AI/determinagent@fc8c51098251397d82a64a1c327408abe31a2f26 -
Branch / Tag:
refs/tags/0.14.1 - Owner: https://github.com/Experto-AI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fc8c51098251397d82a64a1c327408abe31a2f26 -
Trigger Event:
push
-
Statement type:
File details
Details for the file determinagent-0.14.1-py3-none-any.whl.
File metadata
- Download URL: determinagent-0.14.1-py3-none-any.whl
- Upload date:
- Size: 35.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efbb16467564e64f26ea8422fb05c00956d32c450ba5b1a0f8daab35a639cc9a
|
|
| MD5 |
97026f6174f47ae152c7527623829daa
|
|
| BLAKE2b-256 |
6c17cf14b5c1f4153b2e3750a1e4640f7c0d464479c20b735ffa2dde0d70e067
|
Provenance
The following attestation bundles were made for determinagent-0.14.1-py3-none-any.whl:
Publisher:
publish.yml on Experto-AI/determinagent
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
determinagent-0.14.1-py3-none-any.whl -
Subject digest:
efbb16467564e64f26ea8422fb05c00956d32c450ba5b1a0f8daab35a639cc9a - Sigstore transparency entry: 798891245
- Sigstore integration time:
-
Permalink:
Experto-AI/determinagent@fc8c51098251397d82a64a1c327408abe31a2f26 -
Branch / Tag:
refs/tags/0.14.1 - Owner: https://github.com/Experto-AI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fc8c51098251397d82a64a1c327408abe31a2f26 -
Trigger Event:
push
-
Statement type: