Skip to content

Ar5en1c/localqa

Repository files navigation

LocalQA: Agent for your agents

LocalQA: Agent for your agents

LocalQA is a Bonsai-backed local sidecar for frontier coding agents.

Your main coding agent should plan, reason, and write code. LocalQA handles the noisy local work around it: logs, browser evidence, repo context, docs, previous work memory, redaction, and context cleanup. It returns compact verified evidence so the frontier model spends less context on raw dumps.

Frontier model = planner and implementer
Bonsai = local worker model
LocalQA = sidecar layer for evidence, memory, and handoff cleanup

What we are launching

LocalQA launches with two surfaces:

Surface Role Who should use it first?
MCP server Primary public interface Anyone using an MCP-compatible coding agent
OpenCode plugin Deeper native integration OpenCode users who want rules, hooks, vault handles, and automatic compaction

The short version:

LocalQA is MCP-first, with an OpenCode plugin integration.

Why this exists

Coding agents are powerful, but they waste context on low-value evidence work:

Noisy input What LocalQA does locally
Long logs and stack traces Dedupes, ranks root-cause lines, returns compact evidence
Browser console/network/DOM dumps Runs local Playwright QA and summarizes verified issues
Repo scans and repeated file reads Compresses codebase evidence into source/test/risk signals
Prior work rediscovery Writes and queries project-local memory
Raw handoff payloads Redacts and prepares compact payloads before cloud reasoning
Tool-output bloat In OpenCode plugin mode, can compact large tool outputs before they stay in context

MCP vs OpenCode plugin

Dimension MCP mode OpenCode plugin mode
Positioning Portable default Advanced native workflow
Main interface MCP server over stdio OpenCode plugin + native tools
Primary tool local_agent_run local_agent_run
Extra tool Hidden in strict mode answer_from_handle for local vault queries
Host support Any MCP-compatible agent OpenCode only
Tool surface One strict public tool Native tools plus plugin hooks
Enforcement strength Agent chooses to call MCP Stronger rules/hooks inside the host
Large tool-output compaction Only when routed through LocalQA Can happen automatically through plugin hook
Long-session memory Returned as tool output Rules/compaction can preserve vault/memory reminders
First-prompt privacy No No full first-prompt firewall
Best use case Broad launch and easy adoption Power users who want deeper local workflows

MCP says: the main agent can call LocalQA.

OpenCode plugin says: the agent host knows LocalQA exists and can help keep noisy tool output out of context.

How the MCP flow works

flowchart LR
  U[User gives short task or file/url pointer] --> A[Frontier coding agent]
  A --> M[LocalQA MCP server]
  M --> T[local_agent_run]
  T --> E[Local files, browser, repo, docs, memory]
  E --> B[Bonsai local worker]
  B --> C[Compact verified report]
  C --> A
  A --> P[Plan, patch, or answer]
Loading

Use MCP when you want the portable one-tool local assistant.

LOCALQA_PUBLIC_SURFACE=agent-strict npm run localqa:mcp

Tell your coding agent:

Use LocalQA as the local evidence and memory layer. Before reading large logs, browser evidence, DOM dumps, screenshots, network traces, or repeated repo context, call local_agent_run. Prefer directed mode for complex work.

How the OpenCode plugin works

flowchart LR
  U[User in OpenCode] --> O[OpenCode host]
  O --> R[LocalQA rules]
  O --> H[Plugin hooks]
  O --> LT[Native tools]
  H --> K[Compact large tool output]
  LT --> L[local_agent_run]
  LT --> Q[answer_from_handle]
  L --> B[Bonsai local worker]
  B --> V[Local vault and memory]
  V --> O
Loading

Use OpenCode mode when you want deeper integration:

Feature What it gives you
.opencode/LOCALQA_RULES.md Agent instructions for when to use LocalQA
.opencode/tools/local_agent_run.ts Local sidecar agent as a native OpenCode tool
.opencode/tools/answer_from_handle.ts Scoped follow-up questions over local evidence handles
.opencode/plugins/localqa.ts Hooks for tool-output compaction, env injection, and compaction reminders
opencode.json Loads the plugin and LocalQA rules from this repo

Run OpenCode from this repo root so it discovers opencode.json.

Launch proof

LocalQA benchmark chart

Latest launch check:

npm run localqa:launch-check
Benchmark Baseline/raw LocalQA compact Saved Reduction Quality gate
Real OpenCode provider telemetry A/B 25,850 input tokens 12,048 input tokens 13,802 53.39% One controlled Fastify task
A/B workflow proxy 25,829 tokens 6,704 tokens 19,125 74.04% 3/3 maintained
Long-horizon 300k benchmark 302,772 tokens 8,842 tokens 293,930 97.08% 9/9 quality gates, 9/9 memory writes

More detailed reports:

Quick start

Install dependencies:

npm install
npx playwright install chromium

Run validation:

npm run localqa:launch-check

Start MCP strict mode:

LOCALQA_PUBLIC_SURFACE=agent-strict npm run localqa:mcp

Optional Bonsai autostart environment:

LOCALQA_DEFAULT_LLM=bonsai \
LOCALQA_BONSAI_AUTOSTART=1 \
LOCALQA_LLM_PROVIDER=openai-compatible \
LOCALQA_LLM_ENDPOINT=http://127.0.0.1:18081/v1/chat/completions \
LOCALQA_LLM_MODEL=Bonsai-8B.gguf \
LOCALQA_PUBLIC_SURFACE=agent-strict \
npm run localqa:mcp

Example tasks

Good prompt:

Use LocalQA to analyze ./logs/dev.log and return only verified auth/session errors. Do not paste raw logs into cloud context.

Good directed task shape:

{
  "controlMode": "directed",
  "task": "Investigate login QA failures and return verified evidence only.",
  "directedSteps": [
    {
      "tool": "browser_qa",
      "url": "http://localhost:3000/login",
      "task": "Collect screenshot, console, network, accessibility, and form-state evidence."
    },
    {
      "tool": "log_analysis",
      "filePath": "./logs/dev.log",
      "task": "Find auth, session, csrf, 401, 500, and stack-trace evidence."
    }
  ],
  "outputContract": {
    "maxTokens": 1600,
    "include": ["verified_findings", "evidence", "likely_files", "risks", "next_actions"],
    "exclude": ["raw_dom", "full_logs", "screenshot_metadata"]
  }
}

Bad prompt:

Here are 50,000 characters of logs pasted directly into cloud chat...

If you paste raw data into cloud chat, it already went to the cloud before MCP can help.

What LocalQA is not

Not this Actual boundary
A frontier-model replacement The frontier model still plans and writes code
A guarantee that pasted chat data stays local Pasted cloud-chat text is already sent to the cloud
A patch-correctness proof system Compression benchmarks are not patch correctness benchmarks
A formal DLP/security product Redaction exists, but this is alpha software
Browser QA that works identically everywhere Local browser permissions vary by machine

Public alpha docs

License

MIT

About

Bonsai-backed local evidence and memory layer for frontier coding agents. MCP-first with an OpenCode plugin.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors