You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
An experimental hobby project — stitching together a few small services into a
personal agent cluster. Not production-grade. Not battle-tested. Just tinkering.
MosaicDB (memory) + Zypi (runtime) + FlowEngine (logic) + YAS-MCP (connectors),
coordinated through a ribbon ndjson event log.
git clone --recurse-submodules https://github.com/allen-munsch/weft.git
cd weft
# Build the ribbon binary (agent communication tool)
cargo build --release -p ribbon
# Start all services
make up
# Check cluster health
make status
# Run smoke test
make smoke-test
Connect dirge or pi
Weft is the sole MCP endpoint — dirge or pi connects here for all tools:
Append event with state machine validation + breadcrumbs
weft_ribbon_render
Generate markdown/compact summaries
weft_ribbon_verify
Check commit hashes against git origins
weft_ribbon_whoami
Discover agent identity from scope.toml
weft_ribbon_scope
Show owned paths and services for any agent
Vault & Permissions
Tool
Description
weft_vault_store
Store credential in OS keyring
weft_vault_list
List stored credential labels
weft_vault_token
Get OAuth2 token for a connector
weft_vault_export
Export credentials as env vars
weft_vault_grant
Grant permission scope to agent
weft_vault_revoke
Revoke permission scope
weft_audit_log
Query agent action audit log
weft_undo
Reverse a prior agent action
weft_export
Export audit log, rules, memory
Browser & Chart
Tool
Description
weft_browse
Fetch URL from sandbox, extract text/links
weft_browser_start
Start headless Chromium session
weft_browser_navigate
Navigate to URL in browser session
weft_browser_extract
Extract DOM/text/screenshot
weft_browser_stop
Stop browser session
weft_chart
Render data as HTML chart
Rules
Tool
Description
weft_rules_parse
Parse WHEN/THEN rule → structured JSON
weft_rules_compile
Compile rule → FlowEngine DAG
Operations
Tool
Description
weft_health
Cluster-wide health + circuit status
weft_config
Show cluster topology and config
weft_circuit_status
Per-service circuit breaker state
weft_mcp_status
List YAS-MCP connector tools
weft_mcp_onboard
Register new OpenAPI spec
weft_mcp_offboard
Remove registered spec
Agent Coordination (Ribbon)
Agents communicate through shared/events.ndjson — an append-only ndjson log with a hardcoded state machine.
# Agent boot sequence:
ribbon whoami # discover your identity
ribbon query --agent {me} --event submitted # find your tasks
ribbon send --agent {me} working --task "..."# claim a task# Full task lifecycle:
submitted → working → committed → completed
The ribbon binary (submodules/ribbon, v0.3.0+) enforces valid transitions with breadcrumb hints. See shared/AGENT-CONVENTIONS.md for the full protocol.
Agent Loop
1. dirge sends: "find urgent emails from the last 3 days"
2. Weft recalls: MosaicDB search for prior context
3. Weft plans: LLM (or template) → FlowEngine DAG JSON
4. FlowEngine: Executes DAG with zypi.exec nodes (parallel, retry, streaming)
5. Weft observes: Stores results + eval metrics in MosaicDB
6. Weft learns: Records findings as structured semantic memory
7. dirge receives: Handle stubs → expandable to full results
WIMSE Workload Identity
The weft-identity crate implements IETF WIMSE workload identity patterns:
Platform JWTs — short-lived identity tokens instead of raw OAuth tokens in sandboxes
Audience scoping — separate credentials for platform access vs. external federation
Delegation chains — full provenance tracking across multi-agent hops
Autonomy levels — distinguishes user-delegated from agent-autonomous actions
Status: crate built and tested (15 tests), integration into agent loop pending.
Design Principles
Thin orchestrator. MosaicDB, Zypi, FlowEngine, YAS-MCP do the actual work. Weft composes them.
Circuit breakers on every backend. Each service fails independently. Weft degrades gracefully.
All state in MosaicDB. No in-memory agent state. Errors stored as learnable memory.
Sandbox everything. User code runs in Firecracker microVMs, never on the host.
Single MCP endpoint. Dirge talks to Weft. Weft proxies to submodules internally.
Ribbon for coordination. Agents communicate through a versioned ndjson event log with state machine validation.
Development
cargo build # Build workspace
cargo build --release -p ribbon # Build ribbon binary
cargo test# Run all tests
RUST_LOG=weft=debug cargo run # Run control plane
make up # Start cluster
make down # Stop cluster
make smoke-test # Full cluster exercise
make status # Cluster health