Circuit breaker: CircuitBreaker trips after N consecutive LLM failures, fast-failing subsequent calls with CircuitBreakerOpen instead of burning through retries. Opt-in via LocalRuntime(circuit_breaker=CircuitBreaker(max_failures=5)).
Budget rollback: ArtifactStore.checkpoint() / rollback() support. When SocietyConfig(on_budget_exceeded=BudgetExceededPolicy.ROLLBACK) is set, artifacts revert to pre-run state on budget exceeded.
Agent timeout enforcement: Watchdog integration in the drain loop. When LocalRuntime(watchdog=Watchdog(default_timeout=timedelta(seconds=30))) is set, agent turns that exceed the timeout produce a timeout event instead of hanging.
Structured logging: RunContext generates unique correlation IDs per society run. StructuredLogFormatter outputs JSON log lines with run_id, agent, event_type fields. SocietyResult.run_id tracks the correlation ID.
Society deserialization: Society.from_dict() and Society.from_json() reconstruct societies from serialized form (inverse of to_dict() / to_json()). Full roundtrip support for all edge types, group edges, resolve strategies, and config.
CLI entrypoint: claw run <script.py> executes society scripts (sync and async main()). claw run --dry-run sets CLAW_DRY_RUN=1 env var. claw init <name> scaffolds a new project with society.py and pyproject.toml. Registered via [project.scripts] in pyproject.toml.
Documentation guides (7 new, 8 total):
quickstart.md — 5-minute getting started with a complete runnable example
agents.md — agent creation, tools, human agents, validation
edges.md — all 5 edge types, group edges, resolution strategies, decision matrix
ReAct inner loop: LocalRuntime._execute_agent() enters a think→act→observe loop when tool_executor is provided. Agents can execute tools, see results, and iterate up to max_tool_rounds (default 10).
Budget-accurate counting: Each LLM call in the ReAct loop counts toward max_llm_calls via AgentOutput.llm_call_count.
Backward compatible: Without tool_executor, runtime behaves exactly as before.
claw.tools.FileEditTool: Sandbox-scoped file editing with read/write/patch/delete/list operations. Absolute paths and .. escapes are rejected. Writes are auto-staged with git add.
claw.tools.ShellExecTool: Strict allowlist-only command execution via asyncio.subprocess. No shell (no sh -c), preventing injection. Configurable timeout (SIGTERM→SIGKILL) and output cap (100KB).
claw.tools.GitHubTool: gh CLI wrapper for PR lifecycle: create, review, approve, request changes, merge. Also handles issues: get, comment, list. Full dry-run mode.
claw.tools.GitWorkflow: Git worktree management for agent isolation. Creates feature branches (claw/<issue>-<slug>), manages commits, push, PR creation, merge, and cleanup.
claw.tools.ToolExecutor: Middleware dispatching LLM tool calls to real tool implementations. Supports dry-run mode and tracks execution history.
claw.artifacts.CodeFileArtifact: File-backed artifact with git commits as versions. diff() uses git diff between commits.
claw.artifacts.GitHubIssueArtifact: Artifact backed by a GitHub issue via gh CLI. Reads issue data, posts comments, manages labels.
claw.artifacts.GitHubPRArtifact: Artifact backed by a GitHub PR. Supports approve, request changes, and merge lifecycle actions.
claw.triggers.GitHubPollingTrigger: Polls gh issue list on a schedule. Tracks seen issues and triggers callbacks for new ones.
claw.triggers.GitHubWebhookTrigger: FastAPI router for GitHub webhook payloads. HMAC signature verification. Maps issues.opened, issue_comment.created, and pull_request.opened to Claw events.
Demo: claw-demo/ — todo CLI app with pre-filed issues. examples/github_demo.py — investor demo script.
Safety guardrails: Allowlist-only shell execution, sandbox-scoped file access, dry-run mode for all external operations.
claw.server.WebSocketObserver: RuntimeObserver implementation that serializes lifecycle events to JSON and broadcasts to WebSocket clients. Ring buffer (default 500) replays events for late-joining clients.
claw.server.create_app(): FastAPI application with REST endpoints (/api/society, /api/artifacts, /api/trace), WebSocket endpoint (/ws), static file serving, and configurable CORS.
claw.server.serve(): One-call launcher that runs a society with the dashboard server concurrently via asyncio.gather(). Drop-in replacement for LocalRuntime.run().
React dashboard (dashboard/): Vite + React + TypeScript + TailwindCSS v4 + @xyflow/react. Graph visualization with agent status indicators, color-coded typed edges, chronological event feed with filtering, agent detail cards, artifact version history with diffs.
Example: examples/pr_review_dashboard.py — PR review society with live dashboard.
Guide: docs/guides/dashboard.md — usage, layout, dev workflow, API reference.