Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
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
20 changes: 20 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[workspace]
members = [".", "crates/ironclaw_common", "crates/ironclaw_host_api", "crates/ironclaw_storage", "crates/ironclaw_filesystem", "crates/ironclaw_memory", "crates/ironclaw_events", "crates/ironclaw_event_projections", "crates/ironclaw_reborn_event_store", "crates/ironclaw_extensions", "crates/ironclaw_processes", "crates/ironclaw_dispatcher", "crates/ironclaw_scripts", "crates/ironclaw_mcp", "crates/ironclaw_wasm", "crates/ironclaw_capabilities", "crates/ironclaw_secrets", "crates/ironclaw_network", "crates/ironclaw_host_runtime", "crates/ironclaw_runtime_policy", "crates/ironclaw_authorization", "crates/ironclaw_run_state", "crates/ironclaw_approvals", "crates/ironclaw_resources", "crates/ironclaw_trust", "crates/ironclaw_turns", "crates/ironclaw_threads", "crates/ironclaw_loop_support", "crates/ironclaw_reborn", "crates/ironclaw_reborn_config", "crates/ironclaw_reborn_cli", "crates/ironclaw_conversations", "crates/ironclaw_product_adapters", "crates/ironclaw_product_workflow", "crates/ironclaw_wasm_product_adapters", "crates/ironclaw_outbound", "crates/ironclaw_architecture", "crates/ironclaw_safety", "crates/ironclaw_skills", "crates/ironclaw_llm", "crates/ironclaw_engine", "crates/ironclaw_gateway", "crates/ironclaw_tui"]
members = [".", "crates/ironclaw_common", "crates/ironclaw_host_api", "crates/ironclaw_storage", "crates/ironclaw_filesystem", "crates/ironclaw_memory", "crates/ironclaw_events", "crates/ironclaw_event_projections", "crates/ironclaw_reborn_event_store", "crates/ironclaw_extensions", "crates/ironclaw_processes", "crates/ironclaw_dispatcher", "crates/ironclaw_scripts", "crates/ironclaw_mcp", "crates/ironclaw_wasm", "crates/ironclaw_capabilities", "crates/ironclaw_secrets", "crates/ironclaw_network", "crates/ironclaw_host_runtime", "crates/ironclaw_runtime_policy", "crates/ironclaw_authorization", "crates/ironclaw_run_state", "crates/ironclaw_approvals", "crates/ironclaw_resources", "crates/ironclaw_trust", "crates/ironclaw_turns", "crates/ironclaw_agent_loop", "crates/ironclaw_threads", "crates/ironclaw_loop_support", "crates/ironclaw_reborn", "crates/ironclaw_reborn_config", "crates/ironclaw_reborn_cli", "crates/ironclaw_conversations", "crates/ironclaw_product_adapters", "crates/ironclaw_product_workflow", "crates/ironclaw_wasm_product_adapters", "crates/ironclaw_outbound", "crates/ironclaw_architecture", "crates/ironclaw_safety", "crates/ironclaw_skills", "crates/ironclaw_llm", "crates/ironclaw_engine", "crates/ironclaw_gateway", "crates/ironclaw_tui"]
exclude = [
"channels-src/discord",
"channels-src/feishu",
Expand Down
21 changes: 21 additions & 0 deletions crates/ironclaw_agent_loop/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# ironclaw_agent_loop guardrails

- Owns "what an agent loop is": strategy traits, the `AgentLoopPlanner` facade,
the `AgentLoopExecutor` trait + canonical impl, and `LoopExecutionState`.
- Stays one layer above `ironclaw_turns` (which owns runner-facing turn
contracts). Depends on `ironclaw_turns` for `LoopRunContext`, `LoopExit`,
`LoopXxxPort` traits, and ref types.
- Does NOT depend on `ironclaw_reborn`. The framework crate has no knowledge
of `AgentLoopDriver`; that bridge lives in `PlannedDriver` in
`ironclaw_reborn`.
- Stores refs, cursors, counters, versions, and safe summaries only. Never
raw prompts, raw model output, raw tool input, secrets, host paths, provider
errors, or stack traces in `LoopExecutionState` or any strategy slot.
- Strategies are `&self`-only; `LoopExecutionState` is value-immutable. All
mutation happens by the executor swapping a strategy's returned slot into
the next whole state. There is no `&mut LoopExecutionState` API.
- New strategies, slots, and outcome enums must land typed (no string keys,
no `serde_json::Value` interior in long-lived state). Per
`.claude/rules/types.md`.
- Master spec: `docs/reborn/agent-loop-skeleton.md`. Workstream briefs:
`docs/reborn/agent-loop-briefs/`.
25 changes: 25 additions & 0 deletions crates/ironclaw_agent_loop/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
[package]
name = "ironclaw_agent_loop"
version = "0.1.0"
edition = "2024"
rust-version = "1.92"
description = "Agent-loop framework state and strategy contracts for IronClaw Reborn"
authors = ["NEAR AI <support@near.ai>"]
license = "MIT OR Apache-2.0"
homepage = "https://github.com/nearai/ironclaw"
repository = "https://github.com/nearai/ironclaw"
publish = false

[dependencies]
async-trait = "0.1"
ironclaw_host_api = { path = "../ironclaw_host_api", version = "0.1.0" }
ironclaw_turns = { path = "../ironclaw_turns", version = "0.1.0" }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
siphasher = "1"
thiserror = "2"
tokio = { version = "1", features = ["time"] }

[dev-dependencies]
futures = "0.3"
tokio = { version = "1", features = ["macros", "rt", "time", "test-util"] }
Loading
Loading