loopctl 0.1.0

A trait-based framework for building agent loops with pluggable LLM clients, tools, and memory
Documentation
[package]
name = "loopctl"
version = "0.1.0"
edition = "2024"
license = "MIT OR Apache-2.0"
description = "A trait-based framework for building agent loops with pluggable LLM clients, tools, and memory"
repository = "https://github.com/dch-labs/loopctl"
homepage = "https://github.com/dch-labs/loopctl"
documentation = "https://docs.rs/loopctl"
keywords = ["agent", "framework", "llm", "loop"]
categories = ["api-bindings", "development-tools"]
readme = "README.md"
rust-version = "1.85"

[lib]
name = "loopctl"
path = "src/lib.rs"

[dependencies]
futures = "0.3"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
serde_repr = "0.1"
thiserror = "2"
tokio = { version = "1.52.3", features = ["sync", "macros", "time"] }
tokio-util = { version = "0.7", features = ["rt"] }
uuid = { version = "1", features = ["v4", "serde"] }
tracing = "0.1"

parking_lot = "0.12"
reqwest = { version = "0.12", default-features = false, features = ["json", "stream", "rustls-tls"], optional = true }
async-stream = { version = "0.3", optional = true }

[dev-dependencies]
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "time"] }
proptest = "1"

[features]
default = []
hooks = []
testing = []
tool_health = []
tool_shield = ["tool_health"]

# Providers
providers = ["dep:reqwest", "dep:async-stream"]
openai = ["providers"]
anthropic = ["providers"]
ollama = ["providers", "openai"]
deepseek = ["providers", "openai"]
grok = ["providers", "openai"]
gemini = ["providers"]
zai = ["providers", "anthropic"]

[[example]]
name = "hello-cli"
required-features = ["testing"]

[[example]]
name = "repl-cli"
required-features = ["testing"]

[[example]]
name = "echo-tool-cli"
required-features = ["testing"]

[[example]]
name = "chat"
required-features = ["testing", "providers"]

[lints.clippy]
pedantic = { level = "warn", priority = -1 }
unwrap_used = "deny"
expect_used = "deny"
panic = "deny"
todo = "deny"
unimplemented = "deny"
unreachable = "deny"
arithmetic_side_effects = "deny"
indexing_slicing = "deny"
match_same_arms = "deny"
redundant_clone = "deny"
clone_on_ref_ptr = "deny"
let_underscore_must_use = "deny"