Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
e52492a
feat(nano): interactive mode
RomanEmreis Oct 5, 2026
ca6b81f
feat(nano): interactive mode without task
RomanEmreis Oct 5, 2026
c26dd25
fix: ci
RomanEmreis Oct 6, 2026
53e5d0a
fix: ci
RomanEmreis Oct 6, 2026
d595db2
fix: ci
RomanEmreis Oct 6, 2026
f3f9a62
fix: Keep the configured executor usable in default builds
RomanEmreis Oct 6, 2026
93cfbdf
fix: Size steering input by its serialized frame; Query the latest
RomanEmreis Oct 6, 2026
b5b29ef
fix: Preserve steering rejected by bounded queues; Re-enable prefetch
RomanEmreis Oct 6, 2026
9c803e2
fix: Reset no-progress tracking for each user turn
RomanEmreis Oct 6, 2026
b508bfb
fix: Preserve human-question routing for recalled answers
RomanEmreis Oct 6, 2026
726ea4b
fix: Count taskless Nano in non-Git executor concurrency
RomanEmreis Oct 6, 2026
e7000b6
fix: Serialize direct writers with canonical approval; Mark missing
RomanEmreis Oct 7, 2026
ef55bc6
fix: ci
RomanEmreis Oct 7, 2026
ae94b75
fix: Handle terminal runs with non-progressing journals; Stop before
RomanEmreis Oct 7, 2026
4a0df75
fix: Retain foreign taskless runs in shared-workspace slot counts
RomanEmreis Oct 7, 2026
78f33d4
fix: Exclude foreign taskless Nano runs from Git slot counts; Persist
RomanEmreis Oct 7, 2026
0887c8d
fix: Serialize taskless sessions in Git workspaces
RomanEmreis Oct 7, 2026
e5538a8
bumps
RomanEmreis Oct 7, 2026
0aa7f70
fix: Reserve the direct-session slot atomically; Check actual request
RomanEmreis Oct 8, 2026
f623907
fix: Reserve shared-workspace capacity against managed runs
RomanEmreis Oct 8, 2026
154f282
updated README
RomanEmreis Oct 8, 2026
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
16 changes: 12 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ Coding guidance for AI agents working in this repository.
Supervisor-Executor workflow: the Supervisor plans tasks and reviews submissions, while the
Executor implements and checks its own work. SQLite is the runtime source of truth.
Project-local `.ferrus/` files contain templates, task intent, scoped run artifacts, agent
registry data, and logs; they are not a mirrored state machine. Coordination uses MCP as an
implementation detail.
registry data, and logs; they are not a mirrored state machine. Agents coordinate through
native tools or MCP.

Licensed under Apache 2.0.

Runtime behavior for a Ferrus-managed agent is defined by its initial prompt and exposed MCP
Runtime behavior for a Ferrus-managed agent is defined by its initial prompt and exposed Ferrus
tools. This file is supporting context and must not override them. Read
`.agents/skills/ferrus/SKILL.md` for the current Ferrus CLI, MCP tools, resources, state
machine, and artifact layout.
Expand Down Expand Up @@ -49,6 +49,9 @@ cargo check # fast type-check
Before submitting, `cargo clippy -- -D warnings`, `cargo fmt --check`, and `cargo test` must
all pass.

For Nano development, add `--features nano-openai` to build, test, and Clippy commands;
include `nano-mcp` when testing external MCP peers.

## Ferrus CLI

```sh
Expand Down Expand Up @@ -94,6 +97,7 @@ src/
agent_id.rs # stable agent IDs and MCP server names
legacy_state.rs # legacy STATE.json import shape
agents/ # agent launcher and config adapters
nano/ # native Executor runtime, headless protocol, and HQ conversations
platform/ # OS-specific process and lifecycle helpers
state/ # scoped human-readable artifact helpers
checks/ # configured check runner
Expand All @@ -107,7 +111,7 @@ src/
`pub const INPUT_SCHEMA: &str`, and `pub async fn handler(...)`. Register them manually with
`app.map_tool()` in `server/mod.rs`; do not add macros for tool registration.

**Runtime state**: SQLite is the runtime source of truth. MCP tools resolve the caller's
**Runtime state**: SQLite is the runtime source of truth. Runtime tools resolve the caller's
`RuntimeTaskContext` from `ferrus.db`, update task and run rows transactionally, and write only
scoped artifacts under `.ferrus/tasks/` and `.ferrus/runs/`.

Expand Down Expand Up @@ -275,6 +279,9 @@ consistent.
**File locking**: task claiming and heartbeat renewal are SQLite operations. Do not add
`.ferrus/STATE.lock` or file locks for task leases. Canonical approval uses a separate
machine-local file lock to serialize Git integration and rollback; graph refreshes use sidecar leases.
Direct Nano writers share the canonical approval lock. Reserve their single canonical workspace
slot transactionally in SQLite before spawning. Non-Git managed Executors share that slot;
Git task worktrees retain independent capacity.

**Spec selection**: `project_runtime_state` stores the selected spec. Task rows store
`spec_path` and `milestone_id`; milestone display text is resolved from spec Markdown by
Expand All @@ -287,6 +294,7 @@ implement both role adapters, model normalization, headless prompt transport whe
version and config behavior, registration wiring, and focused tests. `opencode` is
experimental: it binds a project to one working directory by Git root commit, so it is
currently reliable only for the Supervisor and Reviewer roles.
Nano is Executor-only; keep its native runtime and adapter under `src/nano/`.

Claude Code role-scoped MCP configuration is stored in `.claude/mcp-supervisor.json` and
`.claude/mcp-executor.json`; permissions are stored in `.claude/settings.local.json`.
Expand Down
Loading
Loading