arf.io / ARF / MCP & Shared Memory / ARF — Autonomous Request Filter · Agent Router & Filter
ARF · Augment Reactor Frontend

One memory.
Every agent.
Every project.

ARF exposes a Model Context Protocol server with sixty-plus tools. Knowledge, tasks, vault credentials, sub-agent dispatch, agent steering, provenance, and direct human-to-agent message injection. All governed, all auditable, on a single stdio JSON-RPC connection.

The MCP Surface

A single protocol.
The whole foundry.

Model Context Protocol (Anthropic's open spec for connecting agents to tools and resources) is the lingua franca for agent capability. ARF speaks MCP and exposes its entire governance, orchestration, and memory surface through a single arf mcp-server process. Run any MCP-aware client (Claude Desktop, Cursor, Zed, custom) and get governed access to shared agent memory, project task graphs, audited credentials, and sub-agent dispatch.

# Start the ARF MCP server (stdio JSON-RPC) arf mcp-server # Or wire into Claude Desktop / Zed / Cursor config: # {"mcpServers": {"arf": {"command": "arf", "args": ["mcp-server"]}}}
Shared Memory & Knowledge

Facts that survive.
Across agents. Across sessions.

Every agent writes into the same memory. Every agent can search it. Facts carry provenance: who added them, when, and with what supporting evidence. They age through a four-stage maturity curve as other agents attest to them.

Backed by a JSONL fact store and an optional PostgreSQL + pgvector instance for semantic search. The same fact is reachable by keyword and by 1536-dim embedding similarity.

A human-readable index sits next to it: TASKS.md, project memory directories, command manifests. People and agents read and write the same store. There is no agent-only memory and no human-only memory. Everything is shared.

DIKW Maturity

Every fact starts as Data. After 3 independent attestations it becomes Information. After 6, Knowledge. After 9, Wisdom.

Queries can require a minimum maturity. knowledge_query(min_dikw="knowledge") ignores anything still in the data layer. Useful for production decisions.

# Six knowledge tools, all governed, all audited. knowledge_add(content, scope, fact_type, confidence) knowledge_query(query, scope?, min_dikw?, limit?) knowledge_get(fact_id) knowledge_attest(fact_id, evidence, confidence_boost) knowledge_topology() knowledge_context_brief(scope, token_budget)
Project & Task Management

Tasks people can read.
Tasks agents can claim.

Storage

TASKS.md & task-history.jsonl

Human-readable markdown is the source of truth. A task's lifecycle (created, updated, checked out by an agent, blocked, decided, checked in) is mirrored to an append-only JSONL event log. With [task_db] configured, every event also flows into a PostgreSQL task_events table for query and replay.

Lifecycle

Checkout. Work. Check in.

Agents call arf_task_checkout_next to claim the highest-priority unassigned task. The session ID is recorded with the checkout. On finish, arf_task_checkin records the outcome (done / blocked / deferred). People can override, comment, block, or decide via the same MCP calls.

# Fifteen task tools cover the full lifecycle. arf_task_add(title, description, owner) arf_task_list(status?, owner?) arf_task_checkout(id, session_id) arf_task_checkin(id, outcome, notes?) arf_task_checkout_next() arf_task_block(id, reason) arf_task_comment(id, comment) arf_task_decision(id, decision_text) arf_task_who_has(task_id) arf_task_priority_counts() arf_task_update_related(task_ids, status?, note?) arf_task_checkin_all(task_ids, outcome, note?) arf_task_checkout_related(tag?, blocked_by?) project_init(name, description) cmd_list(task?)
Sub-Agent Dispatch

Spawn agents.
Route them by cost. By latency. By capability.

An agent that needs help calls arf_subagent. ARF's routing engine scores every available runner-engine-model triple against the constraints (cost ceiling, latency budget, required capabilities) and dispatches the best match. The session ID and the routing rationale come back in the response.

arf_subagent

Routing-aware dispatch. Pass constraints; ARF picks the runner, engine, and model. Per-request overrides persist into the session for follow-on calls.

arf_run_*

Direct runner invocation: arf_run_claude, arf_run_codex, arf_run_gemini, arf_run_antigravity. Bypasses routing when you know exactly which runner you want.

arf_spawn_subagent

Governed child session under the AugmentFoundry executor. Linked in the provenance DAG. Child capability pack must be equal or more restrictive than parent. Privilege never escalates downstream.

Constraint-Based Routing

# Route an expensive reasoning task to Claude Opus arf_subagent({ prompt: "Design the new caching layer architecture", constraints: { max_cost_usd: 0.50, required_capabilities: ["long_context", "structured_reasoning"] } }) # → runner=claude, engine=anthropic, model=claude-opus-4-7 # Route mechanical boilerplate to local Ollama (free, offline) arf_subagent({ prompt: "Generate CRUD scaffolds for User, Post, Comment", constraints: { max_cost_usd: 0.0, max_latency_ms: 500 } }) # → runner=ollama, engine=ollama, model=qwen3-coder:30b
Agent Steering & Human-In-The-Loop

Inject a message.
Pause an agent. Redirect mid-task.

arf_human_message

Inject a human-authored message into a running agent's turn queue. The agent receives it as a synthetic user prompt on its next turn. No async waiting, no approval card overhead, no special UI.

Useful for redirecting an agent that's drifting, providing missing context the agent didn't ask for, or stopping a tool call mid-execution with new instructions.

arf steer

CLI-based process control. arf steer pause <agent> sends SIGSTOP. arf steer resume sends SIGCONT. arf steer redirect <agent> <instruction> injects a new task. arf steer priority <agent> <1-5> reorders execution.

Steering directives are recorded in the provenance chain alongside every governance event. The audit trail shows not only what the agent did but every human intervention along the way.

# Mid-task message injection. Agent receives this on its next turn. arf_human_message({ session_id: "01HX4QVPZ...AB12", message: "Stop. The auth module needs a different approach. Use crypto.randomUUID, not Math.random." }) # Response: { delivered_via: "context", queued_at: "14:23:11.340" } # Process-level control from any terminal arf steer pause 01HX4QVPZ...AB12 arf steer redirect 01HX4QVPZ...AB12 "Stop refactoring. Add tests first." arf steer priority 01HX4QVPZ...AB12 1 arf steer resume 01HX4QVPZ...AB12
The Rest of the Surface

Sixty-plus tools.
One protocol.

Vault & Credentials

Just-In-Time secrets, never values on the wire.

vault_list, vault_checkout, vault_return, vault_ssh_keygen. Checkout requires explicit user approval. ssh-keygen produces ephemeral keypairs that auto-expire.

Provenance & Audit

Merkle-DAG event chain, Ed25519 signed.

provenance_show, provenance_verify, governance_report. Every tool call records to the chain. Tampering is detected at verify time. Bundles travel; integrity is checked anywhere.

Governance & Policy

Check-before-act, report-after-act.

governance_check_action, governance_report_event, governance_rules, governance_get_accord, governance_conformance_score.

Git, Worktree & Build Queue

Concurrency-safe agent collaboration.

worktree_create, arf_git_worktree_fanin, arf_git_commit, arf_git_pr_create, arf_build_queue_status, arf_acquire_file_lock. Force-push and protected-branch writes are refused at the tool layer.

AugmentFoundry Plans

Propose. Approve. Execute. Seal.

arf_session_start, arf_plan_create, arf_plan_approve, arf_plan_exec, arf_dag_verify, arf_generate_report. Plans bind to a hash; approving a plan approves that exact command, args, and environment.

Cross-Project & Rogue Detection

Talk across projects. Catch agents bypassing ARF.

cross_project_message queues messages to another project's agent inbox. governance_rogues scans for AI CLI processes not routed through ARF. arf_intercept evaluates proposed sub-agent spawns against policy before they happen.

MCP Resources

Read the foundry.
From any MCP client.

ARF also exposes three read-only MCP resources. Configuration, governance rules, and the knowledge fact store are all addressable via standard resources/read calls. Any MCP client can inspect them without holding a long-lived tool session.

arf://config # Merged TOML config: defaults + global + project arf://rules # Active governance rules (rules.toml) arf://knowledge # Shared fact store (NDJSON)
TASKS.md Integration

Tasks people write.
Agents claim and complete.

TASKS.md is a human-readable markdown file in your project root. It's the source of truth for what work is planned. Agents use MCP tools to claim tasks, report progress, and check them in when done. Humans read and edit the same file.

# From inside a Claude Code session with ARF MCP configured: # List available tasks arf_task_list({ status: "todo" }) # → [{ id: "T-042", title: "Add rate limiting", priority: 1 }, ...] # Claim the highest-priority unassigned task arf_task_checkout_next() # → { id: "T-042", title: "Add rate limiting to auth endpoints" } # Mark done when finished arf_task_checkin({ id: "T-042", outcome: "done", notes: "Implemented sliding window limiter" }) # Report a blocker arf_task_block({ id: "T-042", reason: "Redis connection string missing from config" }) # Add a decision note arf_task_decision({ id: "T-042", decision_text: "Using token bucket, not leaky bucket — simpler impl" })

Every task lifecycle event flows to an append-only task-history.jsonl and, when configured, to the PostgreSQL task_events table. The TASKS.md source of truth is always human-readable. The event log is machine-queryable.

Wire It Up

Any MCP client.
One line of config.

# Claude Desktop / Zed / Cursor: ~/.config/<client>/mcp.json { "mcpServers": { "arf": { "command": "arf", "args": ["mcp-server"] } } }

ARF's MCP server runs as a stdio subprocess. The client speaks JSON-RPC over stdin/stdout. No HTTP port to open, no network exposure, no auth handshake. The MCP transport is the parent process boundary. Governance and provenance are enforced inside the server before a tool ever returns.