Chat models answer once. A ReAct harness loops: classify intent → complete → dispatch tools → update context → repeat until the task finishes or limits hit. Liminal is that harness for real software work.

Deeper architecture post: Inside the Liminal harness.

One send() turn

When you message the agent, AgentHarness.send():

  1. Binds chat id and workspace fingerprint (for memory federation).
  2. Runs intent inference on the fast model (AGENT_INTENT_INFERENCE) — coding vs knowledge vs workflow-suitable, etc.
  3. Injects reasoning budget and output effort (AGENT_EFFORT) as system guidance.
  4. Enters runReActLoop: the main model (or fast route when confidence is high) returns text and/or tool calls each round.
  5. ToolDispatcher validates schema, runs safety pre-flight, acquires locks, requests approval, executes, distills huge outputs.
  6. ContextManager keeps hot rounds verbatim, warm with provenance, cold compressed or elided to .agent_artifacts/.
  7. Ends with trajectory memory, optional vault auto-write, outcome scoring, and session JSONL.

That is why a “simple question” can still spawn ten tool rounds — the harness optimizes for done, not brevity.

140+ tools, lazy-loaded

AGENT_TOOL_LAZY (default on) registers a baseline profile (balanced, knowledge_first, or max_autonomy). The model calls activate_tool_family for shell, git, browser, memory_advanced, workflow, etc. when needed. Duplicate activation is tracked in tool_catalog.ts.

Families matter for SEO and ops: you can see exactly which capabilities were live in a session trace.

Context is a budget, not a log dump

MechanismPurpose
Hot / warm roundsKeep recent tool I/O readable
AGENT_DISTILLShrink stale giant outputs to artifact pointers
AGENT_TOOL_BODY_ELIDEReplace very old tool bodies with pointers
Harness rules (round 2)Inject named rules, recipes, failure digests

Comparison table

The model is nudged to read_artifact instead of re-ingesting megabytes.

Orchestration beyond one loop

  • spawn_agent — fork child harnesses with scoped tools.
  • plan_workflow / run_workflow — phased sub-agents, outputs in .agent_workflows/, distilled summaries only in parent context.
  • ToolDag — intra-round dependencies when calls must serialize.

Root-only tools (orchestration, workflows, refresh_world_context) never copy to children — preventing unbounded nesting.

Safety and recovery

  • Approvals on destructive tools; optional safety judge to skip obvious safe cases.
  • Retries on 429/5xx with circuit breaker on the provider.
  • Self-heal lint optional loop after edits.
  • Length-resume for truncated streamed writes.

Why developers search “ReAct agent for coding”

They need execution: git status, multi-file edits, tests, browser repro, memory recall — with a trace they can audit. The harness is the product; the LLM is interchangeable via OpenRouter or local servers.

Features · Dynamic workflows use case · Install