[package]
edition = "2021"
rust-version = "1.89"
name = "fno-agents"
version = "0.3.1"
build = "build.rs"
publish = true
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "PTY supervisor substrate for persistent, attachable multi-CLI coding agents (codex, gemini, claude)"
homepage = "https://github.com/bllshttng/footnote"
documentation = "https://docs.rs/fno-agents"
readme = "README.md"
keywords = [
"pty",
"agent",
"supervisor",
"terminal",
"cli",
]
categories = [
"command-line-utilities",
"development-tools",
"asynchronous",
]
license = "Apache-2.0"
repository = "https://github.com/bllshttng/footnote"
[lib]
name = "fno_agents"
path = "src/lib.rs"
[[bin]]
name = "fno-agents"
path = "src/bin/client.rs"
[[bin]]
name = "fno-agents-daemon"
path = "src/bin/daemon.rs"
[[bin]]
name = "fno-agents-worker"
path = "src/bin/worker.rs"
[[test]]
name = "active_backlog_drain"
path = "tests/active_backlog_drain.rs"
[[test]]
name = "agy_ask_unit"
path = "tests/agy_ask_unit.rs"
[[test]]
name = "claude_ask_dispatch"
path = "tests/claude_ask_dispatch.rs"
[[test]]
name = "claude_ask_parity"
path = "tests/claude_ask_parity.rs"
[[test]]
name = "claude_bg_create"
path = "tests/claude_bg_create.rs"
[[test]]
name = "codex_ask_dispatch"
path = "tests/codex_ask_dispatch.rs"
[[test]]
name = "codex_ask_parity"
path = "tests/codex_ask_parity.rs"
[[test]]
name = "codex_ask_sigint"
path = "tests/codex_ask_sigint.rs"
[[test]]
name = "codex_ask_unit"
path = "tests/codex_ask_unit.rs"
[[test]]
name = "daemon_e2e"
path = "tests/daemon_e2e.rs"
[[test]]
name = "finalize_e2e"
path = "tests/finalize_e2e.rs"
[[test]]
name = "flock_interop"
path = "tests/flock_interop.rs"
[[test]]
name = "gemini_ask_sigint"
path = "tests/gemini_ask_sigint.rs"
[[test]]
name = "gemini_ask_unit"
path = "tests/gemini_ask_unit.rs"
[[test]]
name = "generic_completion"
path = "tests/generic_completion.rs"
[[test]]
name = "kill_criteria_parity"
path = "tests/kill_criteria_parity.rs"
[[test]]
name = "loop_check"
path = "tests/loop_check.rs"
[[test]]
name = "loop_runtime"
path = "tests/loop_runtime.rs"
[[test]]
name = "loop_target"
path = "tests/loop_target.rs"
[[test]]
name = "loopcheck_hook_payload"
path = "tests/loopcheck_hook_payload.rs"
[[test]]
name = "loopcheck_missing_manifest"
path = "tests/loopcheck_missing_manifest.rs"
[[test]]
name = "spawn_routing"
path = "tests/spawn_routing.rs"
[[test]]
name = "verify_evidence_parity"
path = "tests/verify_evidence_parity.rs"
[dependencies.alacritty_terminal]
version = "0.26"
[dependencies.base64]
version = "0.22"
[dependencies.blake3]
version = "1"
[dependencies.chrono]
version = "0.4"
features = [
"std",
"alloc",
"clock",
]
default-features = false
[dependencies.crossterm]
version = "0.29"
features = ["event-stream"]
[dependencies.futures-util]
version = "0.3"
features = [
"sink",
"std",
]
default-features = false
[dependencies.getrandom]
version = "0.3"
[dependencies.libc]
version = "0.2"
[dependencies.regex]
version = "1"
[dependencies.serde]
version = "1"
features = ["derive"]
[dependencies.serde_json]
version = "1"
[dependencies.serde_yaml_ng]
version = "0.10"
[dependencies.thiserror]
version = "2"
[dependencies.tokio]
version = "1"
features = [
"rt-multi-thread",
"net",
"io-util",
"io-std",
"sync",
"time",
"signal",
"macros",
"process",
]
[dependencies.tokio-tungstenite]
version = "0.29"
[dependencies.toml]
version = "0.8"
[dependencies.tracing]
version = "0.1"
[dev-dependencies.tempfile]
version = "3"