[workspace]
members = [
"crates/agui-protocol",
"crates/agui-client",
"crates/agui-tui",
]
[package]
name = "recursive-agent"
version = "0.6.0"
edition = "2021"
authors = ["Jeff Kit"]
description = "A minimal, orthogonal, self-improving coding agent kernel in Rust"
license = "MIT"
readme = "README.md"
repository = "https://github.com/jeffkit/recursive"
homepage = "https://github.com/jeffkit/recursive"
documentation = "https://docs.rs/recursive-agent"
keywords = ["agent", "llm", "ai", "coding-agent", "mcp"]
categories = ["development-tools", "command-line-utilities"]
rust-version = "1.75"
exclude = [".dev/", "journal/", "goals/"]
default-run = "recursive"
[features]
default = ["cli", "mcp", "web_fetch", "anthropic", "http", "tui"]
cli = ["dep:clap", "dep:tracing-subscriber", "dep:anyhow"]
test-utils = ["dep:tempfile"]
mcp = ["dep:futures-util"]
web_fetch = []
anthropic = []
http = ["dep:axum", "dep:tower-http", "dep:tokio-stream", "dep:futures-util", "dep:jsonwebtoken", "dep:agui-protocol"]
tui = ["dep:ratatui", "dep:crossterm", "dep:unicode-width", "dep:syntect", "dep:pulldown-cmark"]
weixin = ["dep:wechatbot", "dep:qrcode"]
cloud-runtime = ["dep:redis", "dep:deadpool-redis", "dep:aws-sdk-s3", "dep:aws-config", "dep:bollard"]
e2b-sandbox = []
aws-sdk-s3 = ["dep:aws-sdk-s3"]
aws-config = ["dep:aws-config"]
bollard = ["dep:bollard"]
openai-embedding = []
vector-memory = ["openai-embedding", "dep:rusqlite"]
[lib]
name = "recursive"
path = "src/lib.rs"
[[bin]]
name = "recursive"
path = "src/main.rs"
required-features = ["cli"]
[[bin]]
name = "mock_mcp_server"
path = "tests/bin/mock_mcp_server.rs"
test = false
doc = false
bench = false
[dependencies]
tokio = { version = "1", features = ["macros", "rt-multi-thread", "process", "fs", "io-util", "io-std", "time", "signal", "sync"] }
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "stream"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
toml = "0.8"
dirs = "5"
anyhow = { version = "1", optional = true }
thiserror = "2"
async-trait = "0.1"
clap = { version = "4", features = ["derive", "env"], optional = true }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"], optional = true }
walkdir = "2"
regex = "1"
blake3 = "1"
futures-util = { version = "0.3.32", optional = true }
axum = { version = "0.8", optional = true }
tower-http = { version = "0.6", features = ["cors", "trace"], optional = true }
tokio-stream = { version = "0.1", features = ["sync"], optional = true }
tokio-util = { version = "0.7", features = ["rt"] }
jsonwebtoken = { version = "9", optional = true }
tempfile = { version = "3", optional = true }
agui-protocol = { version = "0.1", path = "crates/agui-protocol", optional = true }
ratatui = { version = "0.29", optional = true }
crossterm = { version = "0.28", optional = true }
unicode-width = { version = "0.2", optional = true }
syntect = { version = "5", default-features = false, features = ["default-fancy"], optional = true }
pulldown-cmark = { version = "0.12", default-features = false, optional = true }
redis = { version = "0.27", features = ["tokio-comp"], optional = true }
deadpool-redis = { version = "0.18", optional = true }
uuid = { version = "1", features = ["v4", "v7"] }
aws-sdk-s3 = { version = "1", optional = true }
aws-config = { version = "1", features = ["behavior-version-latest"], optional = true }
bollard = { version = "0.18", optional = true }
rusqlite = { version = "0.32", features = ["bundled"], optional = true }
chrono = { version = "0.4", features = ["serde"] }
wechatbot = { version = "0.3.2", optional = true }
qrcode = { version = "0.14", optional = true }
[dev-dependencies]
tokio = { version = "1", features = ["test-util", "macros", "rt-multi-thread"] }
tempfile = "3"
tracing-test = "0.2"
recursive-agent = { path = ".", features = ["test-utils"] }
tower = { version = "0.5", features = ["util"] }
http-body-util = "0.1"
jsonwebtoken = "9"
agui-client = { path = "crates/agui-client" }
agui-protocol = { version = "0.1", path = "crates/agui-protocol" }
url = "2"
mockito = "1.7.2"
[profile.dev]
opt-level = 0
debug = 1
[profile.release]
opt-level = 3
lto = "thin"
codegen-units = 1
[[example]]
name = "basic"
path = "examples/basic.rs"
required-features = ["test-utils"]
[[example]]
name = "with_tools"
path = "examples/with_tools.rs"
required-features = ["test-utils"]
[[example]]
name = "with_hooks"
path = "examples/with_hooks.rs"
required-features = ["test-utils"]
[[example]]
name = "with_mcp"
path = "examples/with_mcp.rs"
required-features = []
[[example]]
name = "with_skills"
path = "examples/with_skills.rs"
required-features = []