Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,24 @@ edition = "2024"
# The floor edition 2024 requires, and where the strictest dependencies (uuid,
# getrandom) sit. Derived from the dependency graph rather than compile-tested.
rust-version = "1.85"
description = "Drive Claude Code, Codex and Copilot CLIs headlessly from Rust, as a library."
description = "Drive the Claude Code, Codex and GitHub Copilot CLIs headlessly from Rust. One request type, one event stream and one session model across all three, with resume and fork."
license = "MIT"
repository = "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/pathscale/RustAgentAbstraction"
readme = "README.md"
keywords = ["agent", "claude", "codex", "copilot", "cli"]
categories = ["development-tools"]
# The published package is the library. Tests that spawn real agents, CI config
# and repo docs are noise in a downloaded crate and would fail for a consumer
# who has none of the three CLIs installed.
exclude = [
"tests/**",
".github/**",
"AGENTS.md",
"CLAUDE.md",
]
# Five is the crates.io maximum. "llm" earns a slot over "cli" because it is how
# someone finds this without already knowing the crate exists; the three agent
# names are the other searches that should land here.
keywords = ["agent", "claude", "codex", "copilot", "llm"]
categories = ["development-tools", "api-bindings", "asynchronous"]

# Library only, by design. There is no binary: the consumer (an agencyzero GUI,
# a service, a test) links this crate and spawns the agent directly, so nothing
Expand Down
20 changes: 16 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,20 @@
# RustAgentAbstraction
# agent-abstraction

`agent-abstraction` drives **Claude Code**, **Codex** and **GitHub Copilot** headlessly from
Rust: one request type, one event vocabulary, one session model across three CLIs that agree
on none of those things.
[![crates.io](https://img.shields.io/crates/v/agent-abstraction.svg)](https://crates.io/crates/agent-abstraction)
[![docs.rs](https://img.shields.io/docsrs/agent-abstraction)](https://docs.rs/agent-abstraction)
[![license](https://img.shields.io/crates/l/agent-abstraction.svg)](LICENSE)

Drive **Claude Code**, **Codex** and **GitHub Copilot** headlessly from Rust: one request
type, one event vocabulary, one session model across three CLIs that agree on none of those
things.

```toml
[dependencies]
agent-abstraction = "0.1"
```

Every flag mapping and output shape here was verified against the installed CLIs rather than
taken from documentation, which is the part that keeps being wrong.

It is a **library, not a CLI**. Your program links it and spawns the agent directly, so
nothing marshals a request through a command line and back out of stdout twice.
Expand Down
Loading