<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Andrew</title>
    <description>The latest articles on DEV Community by Andrew (@andrew-ooo).</description>
    <link>https://dev.to/andrew-ooo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3775252%2Ff6bbe8a2-ee0c-41f7-9468-c85f0b00ca95.png</url>
      <title>DEV Community: Andrew</title>
      <link>https://dev.to/andrew-ooo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andrew-ooo"/>
    <language>en</language>
    <item>
      <title>FrontierAgent Review: Apodex's Open Agent Team Harness 2026</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Sat, 12 Sep 2026 10:12:59 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/frontieragent-review-apodexs-open-agent-team-harness-2026-40mm</link>
      <guid>https://dev.to/andrew-ooo/frontieragent-review-apodexs-open-agent-team-harness-2026-40mm</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/frontieragent-review-apodex-open-source-agent-team-harness/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;FrontierAgent&lt;/strong&gt; is the open-source half of Apodex's August 2026 release: an agent runtime, a terminal TUI (&lt;code&gt;frontier-agent&lt;/code&gt;), and a benchmark harness in one Apache-2.0 repository. It ships two workflows — a &lt;strong&gt;Stateful ReAct&lt;/strong&gt; single agent and an &lt;strong&gt;Agent Team&lt;/strong&gt; mode where a coordinator keeps a task board, dispatches parallel sub-agents, collects their structured reports, and synthesizes the answer. The same engine runs Apodex's published benchmarks, so you can reproduce the ReAct-vs-Agent-Team comparison on your own machine.&lt;/p&gt;

&lt;p&gt;Key facts (verified 2026-09-12):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;2,664 GitHub stars&lt;/strong&gt;, 179 forks, 13 open issues — repo created &lt;strong&gt;2026-08-22&lt;/strong&gt;, last push 2026-09-12&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.12 + uv&lt;/strong&gt;; works against &lt;strong&gt;any OpenAI-compatible endpoint&lt;/strong&gt;, not just Apodex's models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apache 2.0&lt;/strong&gt; framework; companion &lt;strong&gt;Apodex-1.1-mini&lt;/strong&gt; (35B MoE, Apache-2.0, built on Qwen3.5-35B-A3B, 262K context) has 9.4K+ Hugging Face downloads&lt;/li&gt;
&lt;li&gt;Fixed task sandbox: &lt;code&gt;/inputs&lt;/code&gt; (read-only) → &lt;code&gt;/workspace&lt;/code&gt; → &lt;code&gt;/outputs&lt;/code&gt;; bubblewrap or container isolation on Linux, fail-closed authorization&lt;/li&gt;
&lt;li&gt;Approval gate, JSONL trace of every action, &lt;code&gt;/revert&lt;/code&gt; to undo a session, &lt;code&gt;--resume&lt;/code&gt; for saved runs&lt;/li&gt;
&lt;li&gt;Bundled evaluation for 14 benchmarks (BrowseComp, HLE, GDPval, APEX, OfficeQA, FrontierSearchBench, ...)&lt;/li&gt;
&lt;li&gt;Free two-week Apodex-1.1 API trial at platform.apodex.ai (limited-time as of this writing)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The short version: FrontierAgent is the most &lt;em&gt;complete&lt;/em&gt; open agent-team harness released this summer. It is also three weeks old, and the issue tracker already shows a security-relevant bug in the Bash allow-list and a process leak on shell timeouts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters Now
&lt;/h2&gt;

&lt;p&gt;Agent frameworks are converging on the same shape: a coordinator, a pool of sub-agents, a shared task list, and a sandbox. We have covered several this year — &lt;a href="https://andrew.ooo/posts/trueforge-truefoundry-open-source-agent-harness-review/" rel="noopener noreferrer"&gt;TrueForge&lt;/a&gt;, &lt;a href="https://andrew.ooo/posts/praxist-review-sapient-autonomous-research-system/" rel="noopener noreferrer"&gt;PRAXIST&lt;/a&gt;, &lt;a href="https://andrew.ooo/posts/prime-agent-primeintellect-self-improving-rlm-harness-review/" rel="noopener noreferrer"&gt;Prime Agent&lt;/a&gt;, &lt;a href="https://andrew.ooo/posts/hermes-agent-nous-research-self-improving-review/" rel="noopener noreferrer"&gt;Hermes Agent&lt;/a&gt;. What is different about FrontierAgent is the claim behind it.&lt;/p&gt;

&lt;p&gt;Apodex's position, in the &lt;a href="https://www.apodex.com/blog/apodex-1.1-scaling-agentic-intelligence-for-complex-work" rel="noopener noreferrer"&gt;Apodex 1.1 blog post&lt;/a&gt; (24 Aug 2026), is that task decomposition should be a &lt;strong&gt;trained&lt;/strong&gt; capability of the model, not a script wrapped around it: the model decides at inference time whether to split a task, how many sub-agents to run, and when to consolidate. Their numbers: Agent Team adds &lt;strong&gt;4.1 to 9.3 points&lt;/strong&gt; over plain ReAct on the same model, and the 35B Mini in Agent Team mode reaches &lt;strong&gt;27.7 on APEX-Agents vs 27.9 for Kimi K2.6&lt;/strong&gt;, a roughly 1T-parameter model.&lt;/p&gt;

&lt;p&gt;Those are vendor benchmarks, and two of them (FrontierFinance, FrontierScience-Research) are Apodex's own. The harness is what makes the claim &lt;em&gt;checkable&lt;/em&gt;: it includes the runner, judges, and dataset keys Apodex used, and it accepts any OpenAI-compatible endpoint. The interesting experiment is not "does Apodex-1.1 score 38.5 on APEX" but "does Agent Team mode help &lt;em&gt;my&lt;/em&gt; model through the same harness."&lt;/p&gt;

&lt;p&gt;The release was covered by &lt;a href="https://www.hpcwire.com/aiwire/2026/09/02/apodex-launches-1-1-model-for-complex-professional-and-scientific-work/" rel="noopener noreferrer"&gt;HPCwire/AIwire&lt;/a&gt; and drew a team AMA on r/LocalLLaMA, where the intended use was described as "long-horizon agentic tasks: deep research, file/code analysis, and workflows that benefit from multiple agents working and verifying in parallel."&lt;/p&gt;

&lt;h2&gt;
  
  
  What FrontierAgent Actually Is
&lt;/h2&gt;

&lt;p&gt;Four deliberately separated layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;frontier_agent/  generic loop, scheduling, registries, AgentBus, observers
plugins/tools/   web, shell, file, sandbox, and team tool implementations
workflows/       ReAct and Agent Team pipelines, profiles, prompts, observers
apodex/          terminal CLI/TUI, approvals, sessions, traces, and Docker path
benchmarks/      public harness plus bundled FrontierSearchBench/FrontierChallenge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The framework layer has no dependency on &lt;code&gt;benchmarks&lt;/code&gt;; CI enforces that with a framework-only import smoke test. Practically, &lt;code&gt;uv sync&lt;/code&gt; installs a lightweight terminal runtime without datasets or judges, and you can embed &lt;code&gt;run_agent_loop&lt;/code&gt; in your own code without inheriting the TUI.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;Execution model&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;react&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;focused research, repository analysis, document/file work&lt;/td&gt;
&lt;td&gt;one stateful agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;agent_team&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;broad questions that benefit from decomposition&lt;/td&gt;
&lt;td&gt;coordinator + task board + bounded parallel sub-agents + report collection + synthesis&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The tool surface&lt;/strong&gt; in &lt;code&gt;plugins/tools/&lt;/code&gt; is broader than most harnesses: &lt;code&gt;bash&lt;/code&gt;, &lt;code&gt;run_python_code&lt;/code&gt;, &lt;code&gt;read_file&lt;/code&gt;/&lt;code&gt;write_file&lt;/code&gt;/&lt;code&gt;file_editor&lt;/code&gt;, &lt;code&gt;glob_search&lt;/code&gt;/&lt;code&gt;grep_search&lt;/code&gt;, &lt;code&gt;web_search&lt;/code&gt;/&lt;code&gt;web_fetch&lt;/code&gt;, &lt;code&gt;download_file&lt;/code&gt;, &lt;code&gt;view_image&lt;/code&gt;, readers &lt;em&gt;and writers&lt;/em&gt; for &lt;strong&gt;PDF, DOCX, PPTX, XLSX&lt;/strong&gt;, plus the team primitives &lt;code&gt;create_subagent&lt;/code&gt;, &lt;code&gt;assign_task&lt;/code&gt;, &lt;code&gt;collect_reports&lt;/code&gt;, &lt;code&gt;submit_report&lt;/code&gt;, &lt;code&gt;stop_subagent&lt;/code&gt;, &lt;code&gt;task_board&lt;/code&gt;, &lt;code&gt;finalize_answer&lt;/code&gt;. The registry exposes only an explicit allowlist — dropping a module into &lt;code&gt;plugins/tools/&lt;/code&gt; does not make it agent-accessible.&lt;/p&gt;

&lt;p&gt;The document toolchain is the tell for who this is for. Apodex's headline demos are a survival analysis from raw clinical tables, powder-XRD unit-cell refinement, and building a GROMACS simulation system from a protein structure. The harness is optimized for "here are 40 files in odd formats, produce a deliverable," not for editing a web app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture: Loop, Observers, AgentBus
&lt;/h2&gt;

&lt;p&gt;The core is &lt;code&gt;run_agent_loop&lt;/code&gt;, a domain-neutral ReAct kernel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;run_agent_loop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;user_message&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;loop_config&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;observers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;observers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model_profile&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model_profile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Planning, terminal-tool behavior, reporter routing, and recovery live outside the kernel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observers&lt;/strong&gt; are the extension point. They implement only the callbacks they need (&lt;code&gt;on_tool_call&lt;/code&gt;, &lt;code&gt;on_llm_response&lt;/code&gt;, &lt;code&gt;on_turn_end&lt;/code&gt;, and so on) and return an &lt;code&gt;Intervention&lt;/code&gt; to stop, retry, or replace content. Authorization observers must fail closed. Several shipped observers encode hard-won lessons about models looping:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Observer&lt;/th&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DuplicateQueryRollbackObserver&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;a &lt;code&gt;web_search&lt;/code&gt; already ran and returned content&lt;/td&gt;
&lt;td&gt;pops the turn and re-samples without spending a &lt;code&gt;max_turns&lt;/code&gt; slot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RepetitionGuard&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;consecutive byte-identical tool calls&lt;/td&gt;
&lt;td&gt;hint at 3, stop at &lt;code&gt;stop_after&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TextRepetitionGuard&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;near-verbatim prose across turns&lt;/td&gt;
&lt;td&gt;hint, then stop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NoProgressGuard&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;coordinator keeps spawning/assigning with nothing coming back&lt;/td&gt;
&lt;td&gt;owns the coordinator's spin pathology&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There is also a &lt;strong&gt;reasoning-runaway watchdog&lt;/strong&gt; for thinking models (&lt;code&gt;reasoning_only_timeout_s&lt;/code&gt; 120, &lt;code&gt;reasoning_only_max_tokens&lt;/code&gt; 16384, &lt;code&gt;logical_call_timeout_s&lt;/code&gt; 900). It only works on the streaming path, so the &lt;code&gt;anthropic&lt;/code&gt;, &lt;code&gt;responses&lt;/code&gt;, and &lt;code&gt;bedrock&lt;/code&gt; protocols ignore it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent Team&lt;/strong&gt; runs on &lt;code&gt;AgentBus&lt;/code&gt; (task submission, messaging, report collection, cancellation, shared context) with a &lt;code&gt;SpawnGuard&lt;/code&gt; limiting nesting depth, parallelism, and wall time. Sub-agents can search, read files, use the sandbox, and submit reports; they cannot spawn their own team unless the budget explicitly allows it. The coordinator's &lt;code&gt;add_task&lt;/code&gt;/&lt;code&gt;update_task&lt;/code&gt; events render live in the TUI sidebar. One footnote: the subsystem was originally called &lt;code&gt;swarm&lt;/code&gt;, and the name survives on identifiers other code binds to (&lt;code&gt;response.swarm.*&lt;/code&gt;, &lt;code&gt;logs/swarm/&lt;/code&gt;, &lt;code&gt;load_swarm_profile&lt;/code&gt;). In the code, "swarm" means Agent Team.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Sandbox and Safety Model
&lt;/h2&gt;

&lt;p&gt;Most agent frameworks hand-wave this; FrontierAgent is unusually explicit.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;Policy&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/inputs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;read-only&lt;/td&gt;
&lt;td&gt;supplied documents and benchmark inputs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/workspace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;read-write&lt;/td&gt;
&lt;td&gt;source checkout, extracted data, scratch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/outputs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;controlled read-write&lt;/td&gt;
&lt;td&gt;final persistent deliverables&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;File and shell tools share this one sandbox and path policy. Backends are &lt;code&gt;auto&lt;/code&gt; (probe bubblewrap, fail with guidance if unavailable), &lt;code&gt;bwrap&lt;/code&gt;, and &lt;code&gt;container&lt;/code&gt;. The docs state there is &lt;strong&gt;no unisolated host fallback&lt;/strong&gt; at the framework layer; network and path policies apply before execution, and authorization or sandbox failures are fail-closed. Output publication is manifest-aware — only declared publishers may write final deliverables.&lt;/p&gt;

&lt;p&gt;The interactive terminal adds a second layer: an approval gate on writes, deletions, package installs, and risky shell commands (with a unified diff shown first), hard denials that survive &lt;code&gt;--yes&lt;/code&gt;, and a journal backing &lt;code&gt;/revert&lt;/code&gt;. Every action lands in a JSONL trace under &lt;code&gt;&amp;lt;project&amp;gt;/.apodex/runs/&amp;lt;session-id&amp;gt;/&lt;/code&gt;, alongside the checkpoint, engine log, and trajectories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Caveat for Mac users:&lt;/strong&gt; the macOS native path is approval-gated but explicitly "not an OS sandbox" — commands run with your user's permissions. Real isolation means bubblewrap on Linux or Docker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Requirements: Git, Python 3.12, &lt;a href="https://docs.astral.sh/uv/" rel="noopener noreferrer"&gt;uv&lt;/a&gt;, and an OpenAI-compatible endpoint. Docker is optional.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ApodexAI/FrontierAgent.git
&lt;span class="nb"&gt;cd &lt;/span&gt;FrontierAgent
uv &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nt"&gt;--python&lt;/span&gt; 3.12 &lt;span class="nt"&gt;--extra&lt;/span&gt; dev
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OPENAI_API_KEY=your-key
OPENAI_BASE_URL=https://your-openai-compatible-endpoint/v1
OPENAI_MODEL=your-model-name

# Optional web research tools
SERPER_API_KEY=
JINA_API_KEY=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Web search goes through Serper and page fetching through Jina Reader; without keys you get a closed-book agent. A fix merged 9 Sep (issue #34) makes the TUI warn about missing search credentials at startup instead of failing mid-run. &lt;code&gt;.env.example&lt;/code&gt; also exposes &lt;code&gt;SUMMARY_LLM_*&lt;/code&gt; so whole-page condensation can go to a cheaper model, and &lt;code&gt;READDOC_VISION_URL&lt;/code&gt; for image-only PDF pages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Single stateful agent&lt;/span&gt;
uv run frontier-agent &lt;span class="nt"&gt;--mode&lt;/span&gt; react &lt;span class="nt"&gt;--cwd&lt;/span&gt; /path/to/project

&lt;span class="c"&gt;# Coordinator plus parallel sub-agents, with a task&lt;/span&gt;
uv run frontier-agent &lt;span class="nt"&gt;--mode&lt;/span&gt; agent_team &lt;span class="nt"&gt;--cwd&lt;/span&gt; /repo &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"Research the alternatives, verify the evidence, and write a report"&lt;/span&gt;

&lt;span class="c"&gt;# One-shot / line mode / resume&lt;/span&gt;
uv run frontier-agent &lt;span class="nt"&gt;--mode&lt;/span&gt; react &lt;span class="nt"&gt;--cwd&lt;/span&gt; /repo &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"explain src/main.py"&lt;/span&gt;
uv run frontier-agent &lt;span class="nt"&gt;--mode&lt;/span&gt; agent_team &lt;span class="nt"&gt;--no-tui&lt;/span&gt; &lt;span class="s2"&gt;"compare these implementations"&lt;/span&gt;
uv run frontier-agent &lt;span class="nt"&gt;--resume&lt;/span&gt;

&lt;span class="c"&gt;# Attach read-only inputs; auto-approve for trusted batch use&lt;/span&gt;
uv run frontier-agent &lt;span class="nt"&gt;--mode&lt;/span&gt; react &lt;span class="nt"&gt;--cwd&lt;/span&gt; /repo &lt;span class="nt"&gt;--input&lt;/span&gt; ~/Downloads/claim.pdf
uv run frontier-agent &lt;span class="nt"&gt;--cwd&lt;/span&gt; /repo &lt;span class="nt"&gt;--yes&lt;/span&gt; &lt;span class="s2"&gt;"add a --verbose flag to the CLI"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Scientific and document packages are optional in native mode; the agent installs only what a task needs into &lt;code&gt;&amp;lt;project&amp;gt;/.apodex/runtime/native&lt;/code&gt;. Pre-built &lt;code&gt;linux/amd64&lt;/code&gt; and &lt;code&gt;linux/arm64&lt;/code&gt; images are on GHCR (&lt;code&gt;docker compose run --rm agent&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Asynchronous intervention&lt;/strong&gt; is the TUI feature people notice first: type while an agent is running and the instruction is injected at the next safe turn boundary without discarding the active run. In Agent Team mode it steers the coordinator; running sub-agents finish.&lt;/p&gt;

&lt;h3&gt;
  
  
  Going fully local with Apodex-1.1-mini
&lt;/h3&gt;

&lt;p&gt;The mini is a 35B MoE fine-tune of Qwen3.5-35B-A3B with 262K context, published as FP16 (roughly 70 GB) plus FP8, GPTQ-Int4, NVFP4, and GGUF. Apodex's serving command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; sglang.launch_server &lt;span class="nt"&gt;--model-path&lt;/span&gt; apodex/Apodex-1.1-mini &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tp&lt;/span&gt; 8 &lt;span class="nt"&gt;--host&lt;/span&gt; 0.0.0.0 &lt;span class="nt"&gt;--port&lt;/span&gt; 1234 &lt;span class="nt"&gt;--context-length&lt;/span&gt; 262144 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tool-call-parser&lt;/span&gt; qwen3_coder &lt;span class="nt"&gt;--reasoning-parser&lt;/span&gt; qwen3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;config/sglang/&lt;/code&gt; ships templates for one RTX 4090 (24 GB), one RTX 5090 (32 GB), and a two-GPU host. Read the caveat: &lt;strong&gt;none of the consumer-GPU templates can load FP16 as-is&lt;/strong&gt; — quantize first (GPTQ-Int4 is "the only format that fits" a 5090) and set &lt;code&gt;SGLANG_LOCAL_MODEL_PATH&lt;/code&gt;. Driver/CUDA/SGLang mismatches surface late as opaque Triton errors; check the GPU compatibility matrix first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmark Evaluation
&lt;/h2&gt;

&lt;p&gt;Each question runs in an isolated subprocess with resumable multi-run experiments and benchmark-specific judges:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nt"&gt;--extra&lt;/span&gt; &lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="nt"&gt;--extra&lt;/span&gt; sandbox &lt;span class="nt"&gt;--extra&lt;/span&gt; document-readers
uv run python &lt;span class="nt"&gt;-m&lt;/span&gt; benchmarks.public.runner.run_subprocess &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--benchmark&lt;/span&gt; browsecomp &lt;span class="nt"&gt;--pipeline&lt;/span&gt; stateful-react-agent &lt;span class="nt"&gt;--profile&lt;/span&gt; default &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--limit&lt;/span&gt; 1 &lt;span class="nt"&gt;--concurrency&lt;/span&gt; 1 &lt;span class="nt"&gt;--out&lt;/span&gt; ./results/smoke
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Supported: BrowseComp, BrowseComp-ZH, xbench-DeepResearch, HLE, SuperChem, FrontierScience-Research/Olympiad, DeepSearchQA, WideSearch, FrontierSearchBench, OfficeQA, GDPval, APEX, OneMillion-Bench. GDPval uses deterministic deliverable validation only — the agentic pairwise grader is excluded, so the 78.8 GDPval figure is not reproducible from this repo alone. Agent Team parallelism multiplies with &lt;code&gt;--concurrency&lt;/code&gt;; start at 1.&lt;/p&gt;

&lt;p&gt;For reference, Apodex's own table has Apodex-1.1 Agent Team at 38.5 APEX-Agents / 78.8 GDPval / 56.1 HLE versus 34.4 / 69.5 / 53.2 for the same model in ReAct mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Reaction
&lt;/h2&gt;

&lt;p&gt;No big Hacker News thread — the discussion happened on r/LocalLLaMA, X, and in the repo. The pattern is consistent: praise for the harness, skepticism about the model claims. &lt;a href="https://juliangoldie.com/apodex-frontieragent/" rel="noopener noreferrer"&gt;Julian Goldie&lt;/a&gt; called it "the most complete open-source agent-team harness to ship this month" while noting the model claims "need independent verification"; &lt;a href="https://www.explainx.ai/blog/apodex-1-1-agent-team-frontieragent-august-2026" rel="noopener noreferrer"&gt;explainx.ai&lt;/a&gt; flagged the Kimi K2.6 comparison as "a strong signal on Apodex's own benchmark suite, not yet an independently reproduced result."&lt;/p&gt;

&lt;p&gt;The GitHub issues are the better signal, because they come from people who ran it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;#39 — Bash allow-rule bypass via command substitution.&lt;/strong&gt; A saved &lt;code&gt;Bash(git push)&lt;/code&gt; rule matches by string prefix without unwrapping &lt;code&gt;$(...)&lt;/code&gt;, and the rules layer downgrades &lt;code&gt;CONFIRM&lt;/code&gt; to &lt;code&gt;SAFE&lt;/code&gt;, so &lt;code&gt;git push --force&lt;/code&gt; can slip past the typed-confirmation gate — the exact case the module docstring says is impossible. Reproduced on &lt;code&gt;main&lt;/code&gt;; fix PR #42 is open.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;#40 — &lt;code&gt;run_shell&lt;/code&gt; leaks the child process on timeout&lt;/strong&gt; on the host/native/container path (the Linux default). The caller sees &lt;code&gt;TimeoutError&lt;/code&gt;; the child keeps mutating the workspace. Only the bwrap path reaps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benchmark-runner bugs, fixed fast:&lt;/strong&gt; inverted &lt;code&gt;--web&lt;/code&gt;/&lt;code&gt;--no-web&lt;/code&gt; (#26, fixed 1 Sep), &lt;code&gt;--limit&lt;/code&gt; applied before the seeded shuffle (#32, fixed 8 Sep). Still open: the FrontierChallenge open track needs a licensed ORCA runtime for one task and ships a stale checksum file (#27, #28).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read together: a young codebase with real users, maintainers merging community fixes within days, and the bugs you expect three weeks in — including one in the safety layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Three weeks old, no tagged releases.&lt;/strong&gt; You are tracking &lt;code&gt;main&lt;/code&gt;. Open issues #39 and #40 touch exactly the pieces you trust when you pass &lt;code&gt;--yes&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Research-shaped, not code-shaped.&lt;/strong&gt; It can edit code, but there is no test-runner, git, or LSP integration; it is not competing with Claude Code or Codex on software work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web research needs paid keys&lt;/strong&gt; (Serper, Jina). Otherwise closed-book.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local model is a real GPU commitment.&lt;/strong&gt; 35B, 4-bit export, 24-32 GB card minimum; no Ollama-style path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runaway watchdogs are streaming-only.&lt;/strong&gt; Non-streaming protocols get only the post-hoc reduced-cap resample.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS native is not isolated.&lt;/strong&gt; Approval-gated, journaled, revertible — but running as your user.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partly vendor-owned benchmarks&lt;/strong&gt;, and the GDPval agentic grader is excluded from the open harness.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who Should Use FrontierAgent
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Good fit:&lt;/strong&gt; teams testing whether Agent Team decomposition helps &lt;em&gt;their&lt;/em&gt; model; analysts working from piles of PDFs and spreadsheets who want an auditable, revertible local agent; runtime builders who want a reference implementation of observers, spawn guards, and a manifest-aware sandbox; self-hosters with a 24 GB+ NVIDIA card who want a fully local deep-research stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad fit:&lt;/strong&gt; coding-agent users (Claude Code, Codex, OpenCode are better at software work); anyone who needs it fully local on a Mac; production deployment today — wait for a tagged release and the #39/#40 fixes.&lt;/p&gt;

&lt;h2&gt;
  
  
  FrontierAgent vs Alternatives
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;FrontierAgent&lt;/th&gt;
&lt;th&gt;&lt;a href="https://andrew.ooo/posts/gpt-researcher-deep-research-agent-review/" rel="noopener noreferrer"&gt;GPT Researcher&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href="https://andrew.ooo/posts/local-deep-research-self-hosted-ai-research-review/" rel="noopener noreferrer"&gt;Local Deep Research&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href="https://andrew.ooo/posts/praxist-review-sapient-autonomous-research-system/" rel="noopener noreferrer"&gt;PRAXIST&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Primary job&lt;/td&gt;
&lt;td&gt;file + web research deliverables&lt;/td&gt;
&lt;td&gt;web research reports&lt;/td&gt;
&lt;td&gt;self-hosted research, local models&lt;/td&gt;
&lt;td&gt;ML experiment campaigns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-agent&lt;/td&gt;
&lt;td&gt;coordinator + parallel sub-agents, task board&lt;/td&gt;
&lt;td&gt;planner + parallel researchers&lt;/td&gt;
&lt;td&gt;no (iterative)&lt;/td&gt;
&lt;td&gt;parallel peers across generations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sandbox&lt;/td&gt;
&lt;td&gt;3-dir layout, bwrap/container, fail-closed&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;project-scoped&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Document I/O&lt;/td&gt;
&lt;td&gt;PDF/DOCX/PPTX/XLSX read + write&lt;/td&gt;
&lt;td&gt;web + local docs&lt;/td&gt;
&lt;td&gt;web + local docs&lt;/td&gt;
&lt;td&gt;task project defines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Eval harness&lt;/td&gt;
&lt;td&gt;14 benchmarks bundled&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;MLE-bench focus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;Fair Source 1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If your question is "which open framework should I copy the &lt;em&gt;design&lt;/em&gt; from," FrontierAgent's observer contract and sandbox policy are the most carefully specified of the four. If your question is "what runs on my laptop tonight," Local Deep Research still wins.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does FrontierAgent require Apodex's models?&lt;/strong&gt;&lt;br&gt;
No. It needs an OpenAI-compatible chat endpoint; &lt;code&gt;OPENAI_BASE_URL&lt;/code&gt; can point at OpenAI, OpenRouter, vLLM, SGLang, or anything else that speaks the API. Apodex-1.1-mini is the intended companion and the target of the shipped SGLang templates, but the harness is model-agnostic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between &lt;code&gt;react&lt;/code&gt; and &lt;code&gt;agent_team&lt;/code&gt; mode?&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;react&lt;/code&gt; runs one stateful agent through the research/read/write/run loop in a task-scoped sandbox. &lt;code&gt;agent_team&lt;/code&gt; runs a coordinator that decomposes the request into a task board, dispatches bounded parallel sub-agents, collects their structured reports, and synthesizes an answer (optionally via a fast "reporter"). Apodex reports 4.1-9.3 points of lift; it also multiplies concurrent model calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I run FrontierAgent on macOS?&lt;/strong&gt;&lt;br&gt;
Yes, natively without Docker, against a hosted or reachable endpoint — &lt;code&gt;./scripts/run-macos.sh&lt;/code&gt; does the install. The native macOS path is approval-gated and revertible but not an OS-level sandbox; use Docker Desktop for isolation. Local SGLang serving is Linux/NVIDIA only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much GPU do I need for Apodex-1.1-mini?&lt;/strong&gt;&lt;br&gt;
The FP16 checkpoint is about 70 GB. The shipped templates target one 24 GB RTX 4090 or one 32 GB RTX 5090 with a 4-bit export, or two GPUs with tensor parallelism. FP8, NVFP4, and GGUF variants are on Hugging Face. Budget KV cache separately; you will cap the 262K context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is FrontierAgent production-ready?&lt;/strong&gt;&lt;br&gt;
Not yet. No tagged releases, and two open issues affect the safety layer: the Bash allow-rule bypass (#39) and the child-process leak on timeout (#40). Treat it as a research workbench until those close.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it work with Claude Code or Codex skills?&lt;/strong&gt;&lt;br&gt;
Not directly. Unlike PRAXIST, which ships as Codex/Claude Code skills, FrontierAgent is its own runtime. You can embed &lt;code&gt;run_agent_loop&lt;/code&gt; in Python or drive it with &lt;code&gt;--no-tui&lt;/code&gt;, but there is no MCP server or skill package in the repo as of 2026-09-12.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;FrontierAgent is the rare vendor open-source release that is more interesting than the model it ships with. The observer contract, the repetition and no-progress guards, the fixed three-directory sandbox with fail-closed authorization, the journaled &lt;code&gt;/revert&lt;/code&gt;, and the bundled eval runner add up to a genuinely reusable reference for building an agent-team harness. Because it is endpoint-agnostic, it lets you test Apodex's central claim — trained-in decomposition beats scripted orchestration — with your own model instead of taking the benchmark table on faith.&lt;/p&gt;

&lt;p&gt;What it is not, yet, is something to hand &lt;code&gt;--yes&lt;/code&gt; and walk away from. Give it a tagged release and the #39/#40 fixes and it becomes the default open workbench for file-heavy research agents. Today: star it, run the smoke benchmark against your endpoint, and read &lt;code&gt;docs/framework.md&lt;/code&gt; even if you never adopt the tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rating: 4/5&lt;/strong&gt; — excellent architecture and documentation, model-agnostic, Apache 2.0; docked for age, open safety-layer bugs, and the GPU bar for going fully local.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ApodexAI/FrontierAgent" rel="noopener noreferrer"&gt;ApodexAI/FrontierAgent on GitHub&lt;/a&gt; — README, &lt;code&gt;docs/framework.md&lt;/code&gt;, &lt;code&gt;workflows/agent_team/README.md&lt;/code&gt;, &lt;code&gt;config/sglang/README.md&lt;/code&gt;, issues #26-#42&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.apodex.com/blog/apodex-1.1-scaling-agentic-intelligence-for-complex-work" rel="noopener noreferrer"&gt;Apodex 1.1: Scaling Agentic Intelligence for Complex Work&lt;/a&gt; — Apodex blog, 24 Aug 2026&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://arxiv.org/abs/2608.23283" rel="noopener noreferrer"&gt;Apodex-1.1 technical report&lt;/a&gt; — arXiv&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://huggingface.co/apodex/Apodex-1.1-mini" rel="noopener noreferrer"&gt;apodex/Apodex-1.1-mini&lt;/a&gt; — Hugging Face model card&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.hpcwire.com/aiwire/2026/09/02/apodex-launches-1-1-model-for-complex-professional-and-scientific-work/" rel="noopener noreferrer"&gt;Apodex Launches 1.1 Model for Complex Professional and Scientific Work&lt;/a&gt; — HPCwire/AIwire, 2 Sep 2026&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.reddit.com/r/LocalLLaMA/comments/1vzxdui/were_the_team_behind_apodex_11_ask_us_anything/" rel="noopener noreferrer"&gt;r/LocalLLaMA: We're the Team Behind Apodex 1.1 — Ask Us Anything&lt;/a&gt; — 27 Aug 2026&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>frontieragent</category>
      <category>apodex</category>
      <category>agentteam</category>
      <category>multiagent</category>
    </item>
    <item>
      <title>PRAXIST Review: Sapient's Autonomous R&amp;D System (6.5K Stars)</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Fri, 11 Sep 2026 10:13:57 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/praxist-review-sapients-autonomous-rd-system-65k-stars-4bk8</link>
      <guid>https://dev.to/andrew-ooo/praxist-review-sapients-autonomous-rd-system-65k-stars-4bk8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/praxist-review-sapient-autonomous-research-system/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;PRAXIST&lt;/strong&gt; is an autonomous research system from &lt;strong&gt;Sapient Intelligence&lt;/strong&gt; (the Singapore/Palo Alto lab behind the Hierarchical Reasoning Model). You hand it a project that already runs and has a measurable objective; it runs parallel "research peers" that propose, implement, and evaluate competing approaches, then synthesizes the evidence into the next generation's agenda. The pitch is not "an agent that writes code" — it's a persistent research loop with an auditable lineage for every reported improvement.&lt;/p&gt;

&lt;p&gt;Key facts (verified 2026-09-11):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;6,559 GitHub stars&lt;/strong&gt;, 624 forks, 10 open issues — repo created &lt;strong&gt;2026-08-27&lt;/strong&gt;, last push 2026-09-09&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.11+&lt;/strong&gt;, &lt;code&gt;pip install "praxist[agents,codex]"&lt;/code&gt;; operated through &lt;strong&gt;Codex&lt;/strong&gt; or &lt;strong&gt;Claude Code&lt;/strong&gt; skills, or the plain &lt;code&gt;praxist&lt;/code&gt; CLI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fair Source License 1.0&lt;/strong&gt; — source-available, free under &lt;strong&gt;US$1M annual revenue&lt;/strong&gt; and for academic use&lt;/li&gt;
&lt;li&gt;Headline benchmark (arXiv 2608.25955, 26 Aug 2026): &lt;strong&gt;60 medals / 49 gold on the 75-task MLE-bench at US$3,054&lt;/strong&gt; model spend, vs &lt;strong&gt;55 / 34 gold for a Claude Code baseline on Claude Opus 4.8 at US$38,370&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Runs on DeepSeek V4 Pro (the "priority 1" profile), OpenRouter, Anthropic, or a &lt;strong&gt;no-API-key Codex-native mode&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Release-tested only on &lt;strong&gt;Linux&lt;/strong&gt;; macOS is a "compatibility target"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interesting part is the architecture claim: instead of a tree search that prunes weak branches, PRAXIST keeps a &lt;strong&gt;generation-layered evidence graph&lt;/strong&gt; so later attempts can recombine mechanisms from &lt;em&gt;failed&lt;/em&gt; lineages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters Now
&lt;/h2&gt;

&lt;p&gt;We've covered the "AI runs your experiments" space before. &lt;a href="https://andrew.ooo/posts/karpathy-autoresearch-autonomous-ml-experiments/" rel="noopener noreferrer"&gt;Karpathy's AutoResearch&lt;/a&gt; is the minimalist end — 630 lines of Python, one GPU, let the agent loop overnight. &lt;a href="https://andrew.ooo/posts/prime-agent-primeintellect-self-improving-rlm-harness-review/" rel="noopener noreferrer"&gt;Prime Agent&lt;/a&gt; and &lt;a href="https://andrew.ooo/posts/hermes-agent-nous-research-self-improving-review/" rel="noopener noreferrer"&gt;Hermes Agent&lt;/a&gt; are self-improving harnesses. PRAXIST sits at the heavyweight end: a full orchestration layer with preregistered metrics, evidence maturity rules, resource scheduling, and legal acceptance flows.&lt;/p&gt;

&lt;p&gt;The paper's framing is the sharpest statement of the problem. From the &lt;a href="https://arxiv.org/abs/2608.25955" rel="noopener noreferrer"&gt;arXiv abstract&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Most systems treat each attempt as nearly self-contained, so logs, memories, and search trees record what happened without establishing which design element produced an improvement... Long campaigns therefore keep re-learning the same lessons."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Anyone who has run a coding agent on a long optimization task will recognize that: the agent tries the same three ideas, in a slightly different order, every session. PRAXIST's answer is to make &lt;em&gt;evidence&lt;/em&gt; — not conversation history — the unit of memory.&lt;/p&gt;

&lt;p&gt;It also matters who is shipping it. Sapient Intelligence made noise in 2025 with HRM, a tiny recurrent model that punched above its weight on ARC-style puzzles. A commenter in the &lt;a href="https://www.reddit.com/r/LocalLLaMA/comments/1w0k4yr/praxist_from_sapient_intelligence/" rel="noopener noreferrer"&gt;r/LocalLLaMA thread&lt;/a&gt; read PRAXIST as a pivot from "better motor" to "better car body around any motor" — the same bet much of the harness ecosystem is making this year.&lt;/p&gt;

&lt;h2&gt;
  
  
  What PRAXIST Actually Is
&lt;/h2&gt;

&lt;p&gt;PRAXIST owns orchestration, run lifecycle, evidence protocols, replay, scheduling, and plugin interfaces. Your &lt;strong&gt;task project&lt;/strong&gt; owns the objective, executable code, evaluator, metrics, baselines, prompts, roles, and domain constraints — PRAXIST "contains no task-specific scientific assumptions."&lt;/p&gt;

&lt;p&gt;Every run is driven by a &lt;strong&gt;task project&lt;/strong&gt; — a directory with a &lt;code&gt;task.yaml&lt;/code&gt;, a &lt;code&gt;description.md&lt;/code&gt;, a &lt;code&gt;roles/&lt;/code&gt; folder of Markdown role contracts, &lt;code&gt;audit_rules/&lt;/code&gt;, and an &lt;code&gt;evaluations/&amp;lt;name&amp;gt;/run.py&lt;/code&gt; that turns a candidate into structured metrics. PRAXIST never touches your original project; run artifacts land in a separate &lt;code&gt;experiments/&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;The three prerequisites from the README's FAQ are the whole gating logic:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The objective is measurable&lt;/strong&gt; — at least one metric with a known direction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The project already runs&lt;/strong&gt; — baseline code, environment, data or simulator all work without PRAXIST.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The best path forward is unknown.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If any prerequisite is missing, PRAXIST is designed to stop and say so. It will not "silently download unspecified datasets, invent a simulator, or fabricate baseline performance." Given how often coding agents hallucinate a benchmark number to close a loop, that refusal is one of the more valuable design decisions here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture: Generations, Lanes, and the Evidence Graph
&lt;/h2&gt;

&lt;p&gt;The core loop runs in &lt;strong&gt;generations&lt;/strong&gt;. In each, a cohort of parallel &lt;strong&gt;research peers&lt;/strong&gt; (the docs' examples use 12) each build a candidate; a task-owned evaluator scores every candidate through the same protocol; then a &lt;strong&gt;planning panel&lt;/strong&gt; of Principal Investigator (PI) agents — optionally with a Chair in multi-PI mode — reads the accumulated evidence and writes the next generation's agenda.&lt;/p&gt;

&lt;p&gt;What distinguishes it from a plain best-of-N loop:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typed evidence graph.&lt;/strong&gt; Evaluator outcomes become &lt;em&gt;findings&lt;/em&gt; with provenance and lineage, not free-form logs. The press release contrasts this with "the tree-like search used by other similar systems, where each candidate inherits from one parent and weaker branches are pruned." A later peer can inherit a mechanism from a dead branch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontier lanes.&lt;/strong&gt; Candidates live in incubator, frontier, and "Gems" states. Each lane declares &lt;code&gt;parent_eligible&lt;/code&gt; — only mature, durable lanes seed the next generation; partial, diagnostic, and "suspect" results stay visible without contaminating the parent pool. Multi-metric tasks can retain &lt;strong&gt;Pareto-optimal&lt;/strong&gt; solutions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deep Innovation Gate (DIG).&lt;/strong&gt; An optional pre-code reasoning phase, recommended only for generation zero. Before a peer writes anything, it maps the baseline mechanism, critiques a pool of candidate mechanisms with read-only planner tools, and commits to a &lt;code&gt;selected_contract.yaml&lt;/code&gt; naming the intervention surface, rejected alternatives, expected metric signature, and fail-fast checks. Deviating mid-implementation requires an auditable &lt;code&gt;contract_amendment.yaml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quality-Diversity (QD) allocation.&lt;/strong&gt; An independent switch that spreads peers across diversity cells so the cohort doesn't collapse onto one approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Central resource scheduler.&lt;/strong&gt; Experiment admission adapts to observed resource pressure, with explicit NVIDIA/CUDA UUID handling for multi-GPU boxes.&lt;/p&gt;

&lt;p&gt;Everything is designed for &lt;strong&gt;resume, replay, and audit&lt;/strong&gt;. &lt;code&gt;praxist resume &amp;lt;run_dir&amp;gt;&lt;/code&gt; picks a run back up; &lt;code&gt;Ctrl-C&lt;/code&gt; closes the monitor, not the research.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Benchmark Claims
&lt;/h2&gt;

&lt;p&gt;The MLE-bench numbers are why this repo hit 6.5K stars in two weeks.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;System&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Medals (of 75)&lt;/th&gt;
&lt;th&gt;Gold&lt;/th&gt;
&lt;th&gt;Recorded model spend&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PRAXIST&lt;/td&gt;
&lt;td&gt;DeepSeek V4 Pro&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;60 (80.0%)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;49&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;US$3,054&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code baseline&lt;/td&gt;
&lt;td&gt;Claude Opus 4.8&lt;/td&gt;
&lt;td&gt;55 (73.3%)&lt;/td&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;US$38,370&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Source: &lt;a href="https://arxiv.org/abs/2608.25955" rel="noopener noreferrer"&gt;arXiv 2608.25955&lt;/a&gt;, "finalized official-grader results."&lt;/p&gt;

&lt;p&gt;Three things to note before quoting these:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;These are vendor-run evaluations.&lt;/strong&gt; Sapient ran both arms. A Claude Code baseline is a choice of harness, and Claude Code isn't designed for multi-day research campaigns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The cost comparison mixes model and harness.&lt;/strong&gt; DeepSeek V4 Pro is far cheaper per token than Opus 4.8, and PRAXIST's docs favor it for "high observed cache-hit rate." The 12× cost gap is at least partly a model-pricing story. The medal gap (60 vs 55) is the cleaner signal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The engineering case studies are partner-provided.&lt;/strong&gt; The press release reports a rocket-landing simulation reaching 100% success within 12 hours (TRL 3), and an industrial SLAM problem where 9.37 cm of accumulated error dropped to 5.01 cm in three days. Neither the simulators nor the baselines are public; the two &lt;code&gt;rocket_booster_recovery&lt;/code&gt; examples in the repo (Python/JAX and Rust) are the closest reproducible artifact.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The honest read: the medal count on a standardized suite is a strong result, the cost multiplier is a marketing number, and the partner stories are unverifiable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;The README's one-liner installs the runtime integrations and launches an interactive first-use wizard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--index-url&lt;/span&gt; https://pypi.org/simple &lt;span class="s2"&gt;"praxist[agents,codex]"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; praxist setup &lt;span class="nt"&gt;--interactive&lt;/span&gt; &lt;span class="nt"&gt;--install-skills&lt;/span&gt; codex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The wizard walks through &lt;strong&gt;Fair Source License acceptance&lt;/strong&gt; (explicit, digest recorded), optional usage consent (nothing preselected), a &lt;strong&gt;runtime profile&lt;/strong&gt; (provider + agent runtime + model + auth mode), masked API-key entry, and readiness checks. It deliberately does &lt;em&gt;not&lt;/em&gt; pick a project or start a run. Claude Code users get a separate one-liner and invoke &lt;code&gt;/praxist-takeover&lt;/code&gt; instead of &lt;code&gt;$praxist-takeover&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Codex-native mode (no API key)
&lt;/h3&gt;

&lt;p&gt;The shortest path: choose the Codex-native profile and PRAXIST uses your saved ChatGPT/Codex login. It's meant for trying things out — for sustained runs the docs steer you to a cheaper API-backed profile.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent-managed install
&lt;/h3&gt;

&lt;p&gt;Or open &lt;code&gt;codex --yolo&lt;/code&gt; (or &lt;code&gt;claude --dangerously-skip-permissions&lt;/code&gt;) and ask it to &lt;em&gt;"Install and configure Praxist. Follow the packaged OOBE runbook and stop after readiness checks."&lt;/em&gt; The agent polls &lt;code&gt;praxist setup --agent-managed&lt;/code&gt; for JSON describing the next decision; it's forbidden from accepting the license on your behalf or asking for an API key in chat.&lt;/p&gt;

&lt;h3&gt;
  
  
  Takeover
&lt;/h3&gt;

&lt;p&gt;Once installed, &lt;code&gt;cd&lt;/code&gt; into a project that already runs and hand it over:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Codex&lt;/span&gt;
praxist &lt;span class="nt"&gt;--takeover&lt;/span&gt; &lt;span class="nt"&gt;--task-path&lt;/span&gt; /absolute/path/to/research-project
&lt;span class="c"&gt;# Claude Code&lt;/span&gt;
praxist &lt;span class="nt"&gt;--takeover&lt;/span&gt; &lt;span class="nt"&gt;--operator&lt;/span&gt; claude &lt;span class="nt"&gt;--task-path&lt;/span&gt; /absolute/path/to/research-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Takeover runs &lt;strong&gt;Discover → Design → Verify → Launch&lt;/strong&gt;: inspect the project, runtime, and baseline; design metrics, evidence rules, roles, and resource plans; run task tests plus &lt;code&gt;praxist resolve&lt;/code&gt; and &lt;code&gt;praxist doctor&lt;/code&gt;; launch a detached run. The brief matters: the README's template asks for objective, metric direction, constraints, peer and generation counts, budget, and whether launch is authorized.&lt;/p&gt;

&lt;p&gt;Operate a running campaign with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;praxist status &lt;span class="nt"&gt;--json&lt;/span&gt;
praxist &lt;span class="nt"&gt;--monitor&lt;/span&gt; &lt;span class="nt"&gt;--latest&lt;/span&gt;
praxist stop &amp;lt;run_id&amp;gt;
praxist resume &amp;lt;run_dir&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Try a bundled example first: &lt;code&gt;praxist examples install rocket_booster_recovery&lt;/code&gt; installs a &lt;em&gt;writable copy&lt;/em&gt; to run from.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bundled Skills
&lt;/h2&gt;

&lt;p&gt;PRAXIST ships as &lt;a href="https://andrew.ooo/posts/superpowers-agentic-skills-framework-claude-code/" rel="noopener noreferrer"&gt;Agent Skills&lt;/a&gt;-style commands rather than a monolithic CLI:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;praxist-takeover&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Inspect readiness, build/repair the harness, launch after gates pass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;praxist-task-initialization&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Build or repair a task harness without launching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;praxist-control&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Start, stop, resume, monitor, inspect runs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;praxist-diagnostic&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Diagnose run health, produce reports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;praxist-scientific-research&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Gather sourced literature and benchmark context&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The README is explicit that PRAXIST is "not a replacement for Codex" — Codex (or Claude Code) stays the interactive agent that talks to you; PRAXIST adds the persistent loop underneath.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Reaction
&lt;/h2&gt;

&lt;p&gt;Reception has been cooler than the star count suggests. The &lt;a href="https://www.reddit.com/r/LocalLLaMA/comments/1w0k4yr/praxist_from_sapient_intelligence/" rel="noopener noreferrer"&gt;r/LocalLLaMA post&lt;/a&gt; sat at a 38% upvote ratio; the top comment was "buy an ad." Another called the "vague and 'scientific' descriptions" a possible "money pump from VC funds" and asked for something "down to earth for regular pleb" — like finding the cheapest RTX 3090 in Europe — rather than tokamak control. The most-repeated correction: &lt;strong&gt;it is not open source&lt;/strong&gt; — "source available, as they write themself on their github page." The &lt;a href="https://news.ycombinator.com/item?id=49473502" rel="noopener noreferrer"&gt;Hacker News submissions&lt;/a&gt; got one point each, no discussion.&lt;/p&gt;

&lt;p&gt;Some of that is r/LocalLLaMA's allergy to enterprise press releases. But the README, docs, and paper &lt;em&gt;are&lt;/em&gt; written in a dense, contract-heavy register ("lane-structured frontiers," "cooperative launch guard") that makes it hard to tell in five minutes whether this is for you.&lt;/p&gt;

&lt;p&gt;The issue tracker is healthier: recent PRs added &lt;strong&gt;Groq, Mistral, and xAI provider plugins&lt;/strong&gt; (#184), provider cost metering (#111), and macOS symlink fixes (#192). One open bug (#189) reports the &lt;code&gt;rocket_booster_recovery&lt;/code&gt; example failing a canary check due to a stale hash pin — check before using it as your first run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Source-available, not open source.&lt;/strong&gt; Fair Source License 1.0. Free under US$1M aggregate annual revenue (affiliates included) and for academic research; above that, you negotiate with Sapient Intelligence Pte Ltd. Externally published outputs must keep the attribution "Praxist by Sapient Intelligence."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linux-first.&lt;/strong&gt; Release-tested only on Linux with CPython 3.11/3.12. macOS is a compatibility target. Windows isn't mentioned.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heavy onboarding.&lt;/strong&gt; Legal acceptance, consent, profile selection, skills registration, then a separate takeover with its own gates. For a weekend project it's overkill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Requires a measurable objective.&lt;/strong&gt; No evaluator, no PRAXIST. Fuzzy goals are out of scope by design.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost is open-ended.&lt;/strong&gt; Twelve peers over thirty generations, each running your evaluator, adds up fast. The docs advise one or two bounded calibration runs first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Beta.&lt;/strong&gt; Two weeks old, 10 open issues, an example with a broken canary. Expect churn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vendor benchmarks only.&lt;/strong&gt; No independent reproduction yet.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who Should Use PRAXIST
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Good fit:&lt;/strong&gt; ML teams with a pipeline that already runs, a clear metric, and GPU budget for parallel experiments; robotics/controls/simulation groups where the objective is a simulator score; Kaggle-style competition work (literally what MLE-bench measures); academic labs, since the revenue threshold doesn't apply.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Poor fit:&lt;/strong&gt; anyone without a working evaluator; companies over the $1M threshold who want an open-source guarantee; quick one-off optimizations (use &lt;a href="https://andrew.ooo/posts/karpathy-autoresearch-autonomous-ml-experiments/" rel="noopener noreferrer"&gt;AutoResearch&lt;/a&gt; or a plain Codex/Claude Code loop); macOS-only shops that need release-qualified stability today.&lt;/p&gt;

&lt;h2&gt;
  
  
  PRAXIST vs Alternatives
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;PRAXIST&lt;/th&gt;
&lt;th&gt;Karpathy AutoResearch&lt;/th&gt;
&lt;th&gt;Plain Claude Code / Codex loop&lt;/th&gt;
&lt;th&gt;AutoML (Optuna etc.)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Search space&lt;/td&gt;
&lt;td&gt;Methods, architectures, code&lt;/td&gt;
&lt;td&gt;Code edits in one file&lt;/td&gt;
&lt;td&gt;Whatever you prompt&lt;/td&gt;
&lt;td&gt;Predefined hyperparameters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory across attempts&lt;/td&gt;
&lt;td&gt;Typed evidence graph, lineages&lt;/td&gt;
&lt;td&gt;Git history + results log&lt;/td&gt;
&lt;td&gt;Conversation / files&lt;/td&gt;
&lt;td&gt;Trial database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parallelism&lt;/td&gt;
&lt;td&gt;Cohorts of peers, scheduled&lt;/td&gt;
&lt;td&gt;Sequential, one GPU&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit trail&lt;/td&gt;
&lt;td&gt;Preregistered metrics, provenance&lt;/td&gt;
&lt;td&gt;Commit log&lt;/td&gt;
&lt;td&gt;None by default&lt;/td&gt;
&lt;td&gt;Trial log&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;Fair Source 1.0 (&amp;lt;$1M free)&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;Proprietary tools&lt;/td&gt;
&lt;td&gt;Open source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Setup weight&lt;/td&gt;
&lt;td&gt;Heavy&lt;/td&gt;
&lt;td&gt;Trivial&lt;/td&gt;
&lt;td&gt;Light&lt;/td&gt;
&lt;td&gt;Light&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sapient's framing of the AutoML comparison is fair: "AutoML tunes parameters within a predefined search space. Praxist runs the full research loop."&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is PRAXIST open source?
&lt;/h3&gt;

&lt;p&gt;No. It's under the &lt;strong&gt;Fair Source License Agreement 1.0&lt;/strong&gt; — source-available. You can read, download, and modify the code; organizations under US$1M aggregate annual revenue and academic institutions can use it commercially for free. Above that, you negotiate a commercial license with Sapient Intelligence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need an API key?
&lt;/h3&gt;

&lt;p&gt;Not for a first try — &lt;strong&gt;Codex-native mode&lt;/strong&gt; uses your saved ChatGPT/Codex login. For sustained research, the docs recommend an API-backed profile: DeepSeek V4 Pro direct (priority 1), open models via OpenRouter, or Anthropic. Keys are entered at a masked local prompt, never in chat.&lt;/p&gt;

&lt;h3&gt;
  
  
  What did PRAXIST score on MLE-bench?
&lt;/h3&gt;

&lt;p&gt;Per the paper (26 Aug 2026): &lt;strong&gt;60 medals out of 75 tasks (80.0%), 49 gold&lt;/strong&gt;, at US$3,054 recorded model spend on DeepSeek V4 Pro. Sapient's Claude Code baseline on Claude Opus 4.8 scored 55 medals / 34 gold at US$38,370. Vendor-run; no independent reproduction yet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does PRAXIST work with Claude Code?
&lt;/h3&gt;

&lt;p&gt;Yes. Install with the Claude Code one-liner from the docs, then use &lt;code&gt;/praxist-takeover&lt;/code&gt; inside Claude Code or &lt;code&gt;praxist --takeover --operator claude --task-path &amp;lt;path&amp;gt;&lt;/code&gt; from the shell. Codex is the default and the only runtime with the no-key mode.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it run on macOS?
&lt;/h3&gt;

&lt;p&gt;It's a "compatibility target," not a release-qualified host — only Linux on CPython 3.11/3.12 is continuously tested. Run &lt;code&gt;praxist doctor&lt;/code&gt; first. A recent PR fixed macOS symlink handling, so it's being actively worked on.&lt;/p&gt;

&lt;h3&gt;
  
  
  How is this different from Karpathy's AutoResearch?
&lt;/h3&gt;

&lt;p&gt;AutoResearch is ~630 lines letting one agent edit one training file sequentially on one GPU. PRAXIST runs cohorts of parallel agents across generations with a typed evidence graph, preregistered evaluation, Pareto lanes, and resource scheduling. AutoResearch is a script; PRAXIST is a platform with a license agreement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;PRAXIST is the most serious attempt we've seen to turn "let the agent run experiments" into an auditable process rather than a vibe. The evidence-graph design targets the biggest weakness of long agent campaigns — re-learning the same lessons — and the refusal to fabricate baselines or datasets is exactly the discipline the space needs.&lt;/p&gt;

&lt;p&gt;But it's heavy, it's beta, it's source-available rather than open, and its headline cost number leans on model pricing as much as orchestration. If you have a measurable objective, a working evaluator, and a Linux box with GPUs, install a bundled example and run one calibration generation — that will tell you more than the press release. If you don't have all three, start lighter and come back when you do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/sapientinc/PRAXIST" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · &lt;a href="https://praxist.sapient.inc/en/docs" rel="noopener noreferrer"&gt;Docs&lt;/a&gt; · &lt;a href="https://arxiv.org/abs/2608.25955" rel="noopener noreferrer"&gt;Paper (arXiv 2608.25955)&lt;/a&gt; · &lt;a href="https://www.morningstar.com/news/business-wire/20260827755757/sapient-intelligence-launches-praxist-beta-to-accelerate-a-new-era-of-autonomous-ai-led-research-and-development" rel="noopener noreferrer"&gt;Launch press release&lt;/a&gt;&lt;/p&gt;

</description>
      <category>praxist</category>
      <category>sapientintelligence</category>
      <category>autonomousresearch</category>
      <category>aiagents</category>
    </item>
    <item>
      <title>Codex with ChatGPT Review: ChatGPT Plans, Codex Executes</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Thu, 10 Sep 2026 10:11:58 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/codex-with-chatgpt-review-chatgpt-plans-codex-executes-bkk</link>
      <guid>https://dev.to/andrew-ooo/codex-with-chatgpt-review-chatgpt-plans-codex-executes-bkk</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/codex-with-chatgpt-review-chatgpt-plans-codex-executes/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Codex with ChatGPT&lt;/strong&gt; (repo: &lt;code&gt;XiaoDuoYa/codex-with-chatgpt&lt;/code&gt;, "C2C" for short) is an open-source bridge that makes the &lt;strong&gt;ChatGPT web app the planning-and-review brain&lt;/strong&gt; for your &lt;strong&gt;Codex&lt;/strong&gt; coding sessions, while Codex keeps every write, shell command, test run and git operation. The pitch in one line from the README: &lt;em&gt;"ChatGPT thinks. Codex works."&lt;/em&gt; It was created on &lt;strong&gt;August 28, 2026&lt;/strong&gt;, shipped v0.1.0 on August 30, and sits at &lt;strong&gt;~3,900 stars and 400+ forks&lt;/strong&gt; on September 10 — the fastest-growing new agent repo on GitHub this fortnight.&lt;/p&gt;

&lt;p&gt;Key facts, as of September 10, 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it solves:&lt;/strong&gt; your paid ChatGPT Plus/Pro web quota sits idle while Codex burns its own scarce quota on planning and code review. C2C moves the thinking to the subscription you already pay for.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How:&lt;/strong&gt; a loopback-only local "C2C Bridge" exposes &lt;strong&gt;9 read-only MCP tools&lt;/strong&gt; (&lt;code&gt;read_file&lt;/code&gt;, &lt;code&gt;search_workspace&lt;/code&gt;, &lt;code&gt;git_diff&lt;/code&gt;, &lt;code&gt;test_status&lt;/code&gt;, …) to ChatGPT via an OAuth 2.1-protected Cloudflare tunnel. No API key, no reverse proxy, no cookie scraping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control loop:&lt;/strong&gt; Codex and ChatGPT exchange tiny &lt;code&gt;[C2C]&lt;/code&gt; state messages (&lt;code&gt;INIT → PLAN → EXECUTED → REVIEW → DONE&lt;/code&gt;), never diffs or logs. Default cap: &lt;strong&gt;12 iterations&lt;/strong&gt; per task (configurable in &lt;code&gt;.c2c.json&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security posture is the strongest part:&lt;/strong&gt; write/shell/commit tools &lt;em&gt;do not exist&lt;/em&gt; on the server; &lt;code&gt;.env*&lt;/code&gt;, keys and SSH files are denied by default; tokens are stored only as SHA-256 hashes; the pairing code is the only secret that ever touches a browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Requirements:&lt;/strong&gt; Node.js ≥ 20, git, &lt;code&gt;cloudflared&lt;/code&gt;, a ChatGPT plan with &lt;strong&gt;Developer Mode&lt;/strong&gt; enabled (Plus works — see the caveats), and the Codex desktop app's built-in browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Honest limits:&lt;/strong&gt; setup takes 20-40 minutes the first time, temporary tunnel URLs mean re-pairing after restarts unless you own a Cloudflare domain, Computer Use driving the ChatGPT UI is token-hungry and sometimes flaky, and the project is a V1 maintained by a single student author (with an AI agent answering issues).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT. &lt;strong&gt;Unofficial&lt;/strong&gt; — not affiliated with OpenAI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you pay for both a ChatGPT plan and Codex and you're hitting 5-hour limits, this is the most interesting "use the quota you already have" hack of the month. If you want a polished, hands-off tool, wait for V2.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Codex with ChatGPT actually is
&lt;/h2&gt;

&lt;p&gt;Most "connect model A to coding agent B" projects are cookie-scraping proxies that break on every header change and violate the terms of service. C2C instead splits the collaboration into two planes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Control plane (Computer Use):&lt;/strong&gt; Codex opens ChatGPT in its built-in in-app browser and types short structured messages into the chat. ChatGPT replies in the same format. Messages are capped at &amp;lt; 1 KB and carry &lt;em&gt;state only&lt;/em&gt; — a goal, a plan, a count of changed files, a test summary. No file bodies. Ever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data plane (MCP):&lt;/strong&gt; ChatGPT reads whatever it needs &lt;em&gt;itself&lt;/em&gt; through a custom MCP connector pointed at your local bridge. It pulls the exact lines it wants to see, runs a search, inspects the real git diff, and checks recorded test results.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So ChatGPT never receives a pasted dump of your repo, and Codex never spends its own tokens re-explaining the codebase. The piece most agent setups skip: &lt;strong&gt;ChatGPT does not trust Codex's "all tests passed" claim — it reads &lt;code&gt;git_diff&lt;/code&gt; and &lt;code&gt;test_status&lt;/code&gt; through MCP and checks.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It ships as a &lt;strong&gt;Codex Skill&lt;/strong&gt; (&lt;code&gt;skill/SKILL.md&lt;/code&gt;) plus a Node CLI called &lt;code&gt;c2c&lt;/code&gt;. The Skill is the real UX layer: it tells Codex how to start the bridge, pair, drive the ChatGPT tab, and speak the protocol.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;The README offers a one-paste prompt that makes Codex do everything, dependencies included. Here's the manual path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/XiaoDuoYa/codex-with-chatgpt ~/codex-with-chatgpt
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/codex-with-chatgpt
corepack pnpm &lt;span class="nb"&gt;install
&lt;/span&gt;corepack pnpm build        &lt;span class="c"&gt;# -&amp;gt; dist/, exposes the `c2c` bin&lt;/span&gt;
pnpm &lt;span class="nb"&gt;test&lt;/span&gt;                  &lt;span class="c"&gt;# vitest: 146 tests (path security, OAuth, pairing, MCP e2e)&lt;/span&gt;

&lt;span class="c"&gt;# install the Codex Skill&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.codex/skills/codex-with-chatgpt
&lt;span class="nb"&gt;cp &lt;/span&gt;skill/SKILL.md ~/.codex/skills/codex-with-chatgpt/SKILL.md
&lt;span class="c"&gt;# then edit the "The codex-with-chatgpt checkout lives at:" line to your clone path&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, inside your project, tell Codex: &lt;strong&gt;"Set up Codex with ChatGPT."&lt;/strong&gt; The Skill runs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;c2c setup           &lt;span class="c"&gt;# bridge + tunnel + pairing code, all in one&lt;/span&gt;
c2c sandbox-allow   &lt;span class="c"&gt;# whitelist the C2C settings dir in Codex's sandbox&lt;/span&gt;
c2c doctor &lt;span class="nt"&gt;--json&lt;/span&gt;   &lt;span class="c"&gt;# health gate — nothing talks to ChatGPT until this is green&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;c2c setup&lt;/code&gt; starts the bridge on &lt;code&gt;127.0.0.1:48765&lt;/code&gt; (ephemeral port on conflict), launches a Cloudflare Quick Tunnel for a public HTTPS URL, and prints a one-time &lt;strong&gt;8-character pairing code&lt;/strong&gt; (5-minute TTL, 5 attempts, rate-limited). Codex then opens &lt;code&gt;chatgpt.com&lt;/code&gt; in the in-app browser, creates a custom MCP connector pointing at the tunnel URL, completes OAuth and enters the pairing code. You log into ChatGPT once. Success looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Codex with ChatGPT

✓ Project detected
✓ Workspace Bridge started
✓ Secure connection established
✓ ChatGPT connected
✓ File read test passed

Ready.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since v0.1.1, first-time setup asks one explicit question: &lt;strong&gt;auto&lt;/strong&gt; (Codex drives the ChatGPT settings pages itself) or &lt;strong&gt;manual&lt;/strong&gt; (Codex tells you exactly which fields to fill in). Given how flaky Computer Use can be — more on that below — I'd pick manual on the first run.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional: a stable hostname
&lt;/h3&gt;

&lt;p&gt;The default Quick Tunnel URL is temporary: when the bridge restarts, the URL changes and Codex has to delete and re-create the ChatGPT connector — the "why do I reconnect every day?" complaint in issue #60. If you own a domain on Cloudflare, setup offers a &lt;strong&gt;Named Tunnel&lt;/strong&gt; (&lt;code&gt;c2c-&amp;lt;project&amp;gt;.your-domain.com&lt;/code&gt;) that survives restarts after a one-time Cloudflare login. Credentials live in the OS app-state directory (&lt;code&gt;~/Library/Application Support/codex-with-chatgpt&lt;/code&gt; on macOS), never in the repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  The C2C protocol in practice
&lt;/h2&gt;

&lt;p&gt;Once paired, a task looks like this. You say: &lt;em&gt;"Use Codex with ChatGPT to implement dark mode."&lt;/em&gt; Codex types into the ChatGPT tab:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[C2C]&lt;/span&gt;
&lt;span class="err"&gt;STATE:&lt;/span&gt; &lt;span class="err"&gt;INIT&lt;/span&gt;
&lt;span class="err"&gt;TASK_ID:&lt;/span&gt; &lt;span class="err"&gt;c2c_f81a&lt;/span&gt;
&lt;span class="err"&gt;ITERATION:&lt;/span&gt; &lt;span class="err"&gt;0&lt;/span&gt;

&lt;span class="err"&gt;GOAL:&lt;/span&gt;
&lt;span class="err"&gt;Implement&lt;/span&gt; &lt;span class="err"&gt;dark&lt;/span&gt; &lt;span class="err"&gt;mode.&lt;/span&gt;

&lt;span class="err"&gt;INSTRUCTION:&lt;/span&gt;
&lt;span class="err"&gt;Inspect&lt;/span&gt; &lt;span class="err"&gt;the&lt;/span&gt; &lt;span class="err"&gt;connected&lt;/span&gt; &lt;span class="err"&gt;workspace&lt;/span&gt; &lt;span class="err"&gt;through&lt;/span&gt; &lt;span class="err"&gt;Codex&lt;/span&gt; &lt;span class="err"&gt;with&lt;/span&gt; &lt;span class="err"&gt;ChatGPT&lt;/span&gt; &lt;span class="err"&gt;MCP.&lt;/span&gt;
&lt;span class="err"&gt;Create&lt;/span&gt; &lt;span class="err"&gt;an&lt;/span&gt; &lt;span class="err"&gt;implementation&lt;/span&gt; &lt;span class="err"&gt;plan&lt;/span&gt; &lt;span class="err"&gt;for&lt;/span&gt; &lt;span class="err"&gt;Codex.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ChatGPT calls &lt;code&gt;workspace_info&lt;/code&gt;, &lt;code&gt;list_directory&lt;/code&gt;, &lt;code&gt;search_workspace&lt;/code&gt; and &lt;code&gt;read_file&lt;/code&gt; through the connector, then answers with a plan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;C2C&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;STATE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;PLAN&lt;/span&gt;
&lt;span class="na"&gt;TASK_ID&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;c2c_f81a&lt;/span&gt;
&lt;span class="na"&gt;ITERATION&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;

&lt;span class="na"&gt;RATIONALE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="s"&gt;Theme tokens live in src/styles/tokens.css; components read CSS vars…&lt;/span&gt;

&lt;span class="na"&gt;ACTIONS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="s"&gt;1. Add [data-theme="dark"] token overrides in tokens.css&lt;/span&gt;
&lt;span class="s"&gt;2. Add useTheme() hook with localStorage persistence&lt;/span&gt;
&lt;span class="s"&gt;3. Wire toggle into Header.tsx&lt;/span&gt;

&lt;span class="na"&gt;FILES_LIKELY_INVOLVED&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="s"&gt;src/styles/tokens.css, src/hooks/useTheme.ts, src/components/Header.tsx&lt;/span&gt;

&lt;span class="na"&gt;TESTS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="s"&gt;pnpm vitest run src/hooks&lt;/span&gt;

&lt;span class="na"&gt;SUCCESS_CRITERIA&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="s"&gt;Toggle persists across reload; no contrast regressions in Header&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Codex applies the plan, runs the tests, and &lt;em&gt;records&lt;/em&gt; the iteration locally before reporting back:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;c2c record &lt;span class="nt"&gt;--task&lt;/span&gt; c2c_f81a &lt;span class="nt"&gt;--iteration&lt;/span&gt; 1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--changed-files&lt;/span&gt; 3 &lt;span class="nt"&gt;--tests&lt;/span&gt; &lt;span class="s2"&gt;"27 passed"&lt;/span&gt; &lt;span class="nt"&gt;--exit-status&lt;/span&gt; ok &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--command&lt;/span&gt; &lt;span class="s2"&gt;"pnpm vitest run src/hooks"&lt;/span&gt; &lt;span class="nt"&gt;--output-file&lt;/span&gt; /tmp/vitest.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then it sends &lt;code&gt;STATE: EXECUTED&lt;/code&gt; with just the metadata (&lt;code&gt;CHANGED_FILES: 3&lt;/code&gt;, &lt;code&gt;TESTS: 27 passed&lt;/code&gt;) and a request to review. ChatGPT reads &lt;code&gt;git_diff&lt;/code&gt;, &lt;code&gt;execution_summary&lt;/code&gt; and &lt;code&gt;test_status&lt;/code&gt; via MCP — and optionally the sanitized test log through &lt;code&gt;execution_output&lt;/code&gt; — and replies with either another &lt;code&gt;PLAN&lt;/code&gt;, &lt;code&gt;DONE&lt;/code&gt;, or &lt;code&gt;BLOCKED&lt;/code&gt; with a reason. The loop stops at 12 iterations by default and asks whether to continue.&lt;/p&gt;

&lt;p&gt;Two design details I like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The local sanitizer.&lt;/strong&gt; Codex can nominate a test/build log for ChatGPT, but a local filter redacts tokens, pairing-code-shaped strings and home paths, applies size caps, and withholds private-key blocks entirely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Checkpoints, not resume states.&lt;/strong&gt; If Codex restarts mid-task, it reads a local checkpoint (&lt;code&gt;PLAN_RECEIVED&lt;/code&gt;, &lt;code&gt;EXECUTED_SENT&lt;/code&gt;, …) and continues the &lt;em&gt;same&lt;/em&gt; ChatGPT conversation; if that chat is gone, it sends a &lt;code&gt;HANDOFF&lt;/code&gt; brief built from the checkpoint, never from logs. The doc is explicit: &lt;em&gt;"Do not re-pair, recreate the connector, or rewrite Project instructions just to resume."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since September, each workspace maps to one &lt;strong&gt;ChatGPT Project&lt;/strong&gt; (project-only memory) rather than one endless conversation, so history stays organized — a community proposal (issue #30) the author implemented within days.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 9 read-only MCP tools
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What ChatGPT gets&lt;/th&gt;
&lt;th&gt;Guardrails&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;workspace_info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Root, package metadata, sanitized&lt;/td&gt;
&lt;td&gt;Metadata sanitized before structured output (v0.1.2)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_directory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Paginated listing&lt;/td&gt;
&lt;td&gt;Sensitive-file gate applies to listings too&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;read_file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Line/byte-capped file body&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.env*&lt;/code&gt;, keys, SSH, cloud creds denied; &lt;code&gt;.c2cignore&lt;/code&gt; adds rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_workspace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ripgrep results (Node fallback)&lt;/td&gt;
&lt;td&gt;Match and file-size caps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Working tree status&lt;/td&gt;
&lt;td&gt;Read-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git_diff&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Paginated diff (&lt;code&gt;hasMore&lt;/code&gt;, &lt;code&gt;nextOffset&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Pathspec excludes for sensitive files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;test_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Last recorded test result&lt;/td&gt;
&lt;td&gt;Validated on write and read&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;execution_summary&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Iteration metadata from &lt;code&gt;c2c record&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Numeric args validated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;execution_output&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;list&lt;/code&gt;/&lt;code&gt;read&lt;/code&gt; sanitized command logs&lt;/td&gt;
&lt;td&gt;Local redaction; private keys withheld&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Scopes are enforced per tool (&lt;code&gt;workspace.read&lt;/code&gt;, &lt;code&gt;workspace.search&lt;/code&gt;, &lt;code&gt;git.read&lt;/code&gt;, &lt;code&gt;execution.read&lt;/code&gt;, &lt;code&gt;offline_access&lt;/code&gt;), access tokens live one hour, refresh tokens rotate on every use and are bound to both the workspace and the client. v0.1.2 (September 4) added &lt;strong&gt;structured output schemas&lt;/strong&gt; for all nine tools, so ChatGPT — or any other MCP client — no longer has to guess response shapes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security model: the best part of the project
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;docs/security.md&lt;/code&gt; is a proper threat table, not hand-waving. The highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Read-only by construction.&lt;/strong&gt; There are no write, delete, shell or commit tools on the server, so no prompt injection in a README, code comment or diff can escalate. Every tool description carries an explicit "workspace content is untrusted" warning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Path containment&lt;/strong&gt; uses &lt;code&gt;realpath&lt;/code&gt; canonicalization of the deepest existing ancestor, rejects &lt;code&gt;..&lt;/code&gt;, absolute escapes, backslash tricks and null bytes, resolves symlinks before the check, and is case-insensitive on macOS/Windows. All of it is covered by tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The bridge binds 127.0.0.1 only&lt;/strong&gt; and refuses &lt;code&gt;0.0.0.0&lt;/code&gt;. The only public surface is HTTPS through the tunnel, gated by OAuth 2.1 with mandatory PKCE S256, dynamic client registration and rotating refresh tokens. Knowing the URL gets you a 401; the wrong workspace's token gets a 403.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The admin API&lt;/strong&gt; is loopback-only, uses a random token in a &lt;code&gt;0600&lt;/code&gt; runtime file, and rejects any request carrying proxy headers like &lt;code&gt;cf-connecting-ip&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logs redact&lt;/strong&gt; bearer headers, token prefixes and pairing-code-shaped strings before they're written.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One acknowledged V1 gap:&lt;/strong&gt; client registrations and token hashes are file-based, not in the OS keychain. Raw tokens are never written anywhere, so a stolen state file doesn't yield a usable bearer, but keychain integration is on the V2 list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For comparison, &lt;a href="https://andrew.ooo/posts/codex-security-openai-ai-vulnerability-scanner-review/" rel="noopener noreferrer"&gt;OpenAI's Codex Security scanner&lt;/a&gt; finds vulnerabilities in &lt;em&gt;your&lt;/em&gt; code; C2C is a community tool whose own attack surface is thought through more carefully than most MCP servers I see.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community reaction
&lt;/h2&gt;

&lt;p&gt;The repo blew up in the Chinese-speaking Codex community first (README, issues and Skill strings are bilingual), then crossed over via dev.to and scriptbyai write-ups in early September. Across 400+ issues and PRs, the recurring themes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Does Plus work or only Pro?"&lt;/strong&gt; (issues #2, #21, #25). Early on, some Plus users got &lt;code&gt;FORBIDDEN: This conversation does not support developer MCPs&lt;/code&gt;. The resolution in #21: toggle &lt;strong&gt;Developer Mode&lt;/strong&gt; off and on again under ChatGPT Settings → Security, then add the connector from the Plugins page. The author is a Plus user and confirms it works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Setup took 40 minutes"&lt;/strong&gt; (#8) and &lt;strong&gt;"I have to reconnect every day"&lt;/strong&gt; (#60). Both trace back to Quick Tunnel URLs changing and Computer Use slowly clicking through ChatGPT's settings. Fixes so far: Named Tunnels (#18), a manual setup mode (v0.1.1), and a machine-level preference cache after one user noted the Skill "asks the same questions every day."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Computer Use is unreliable and eats tokens"&lt;/strong&gt; (#126). The author's answer: fully manual mode exists; only ChatGPT reading the workspace through MCP is irreplaceable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"My quota exploded after the Project update"&lt;/strong&gt; (#407). The user had left ChatGPT's high-effort mode on. The web model &lt;em&gt;will&lt;/em&gt; call MCP tools liberally when reviewing; the author's own pairing is &lt;strong&gt;Codex on Luna Max + web ChatGPT on Sol High&lt;/strong&gt; (#24).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows pain&lt;/strong&gt; (#7, #59, #164): external browser launching, &lt;code&gt;cloudflared&lt;/code&gt; path discovery, console windows flashing. v0.1.2 fixed the console spam and made Quick Tunnel startup fail closed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Why can't the web model write code directly?"&lt;/strong&gt; (#24). Intentional. The author &lt;em&gt;deliberately&lt;/em&gt; exposed only read access and is evaluating a safer hand-off, without committing to it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most first responses in the tracker come from &lt;strong&gt;"the author's AI Agent,"&lt;/strong&gt; which logs the issue, notes the author "is currently at school," and promises a human look within 48 hours — a fitting meta-detail, and a reminder that the bus factor is one.&lt;/p&gt;

&lt;p&gt;Also watch PR #409: a machine-wide gateway with authentication set to &lt;em&gt;none&lt;/em&gt; plus two &lt;strong&gt;write-capable&lt;/strong&gt; MCP "mailbox" tools. The author's agent flagged it as breaking the read-only boundary. That thread decides whether V2 keeps the security story intact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Codex with ChatGPT vs the alternatives
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Where planning runs&lt;/th&gt;
&lt;th&gt;Repo exposure&lt;/th&gt;
&lt;th&gt;Bills against&lt;/th&gt;
&lt;th&gt;Setup friction&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Codex with ChatGPT (C2C)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ChatGPT web (Plus/Pro)&lt;/td&gt;
&lt;td&gt;Read-only MCP, OAuth, tunnel&lt;/td&gt;
&lt;td&gt;ChatGPT plan + Codex plan&lt;/td&gt;
&lt;td&gt;High first run, then low with Named Tunnel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex alone&lt;/td&gt;
&lt;td&gt;Codex's own model&lt;/td&gt;
&lt;td&gt;Local&lt;/td&gt;
&lt;td&gt;Codex quota only&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;codex-bridge&lt;/code&gt; (Claude Code plugin)&lt;/td&gt;
&lt;td&gt;Codex, called from Claude Code&lt;/td&gt;
&lt;td&gt;Local process&lt;/td&gt;
&lt;td&gt;ChatGPT plan via &lt;code&gt;codex login&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cookie/session proxies&lt;/td&gt;
&lt;td&gt;ChatGPT web&lt;/td&gt;
&lt;td&gt;Full request forwarding&lt;/td&gt;
&lt;td&gt;ChatGPT plan (ToS risk)&lt;/td&gt;
&lt;td&gt;Low, but breaks often&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Two-agent setups (planner API + executor)&lt;/td&gt;
&lt;td&gt;API model&lt;/td&gt;
&lt;td&gt;Whatever you paste&lt;/td&gt;
&lt;td&gt;API credits&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;C2C is the only option where the planning model gets &lt;em&gt;self-serve, scoped, read-only&lt;/em&gt; access to the code rather than a pasted context blob, and the only one with an independent diff review between "Codex says done" and "done."&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Two subscriptions required.&lt;/strong&gt; ChatGPT plan &lt;em&gt;and&lt;/em&gt; Codex. It doesn't reduce what you pay; it rebalances which quota gets consumed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Computer Use is the weak link.&lt;/strong&gt; Driving the ChatGPT UI through the in-app browser is slower and more brittle than an API call, and it costs Codex tokens. Expect occasional stalls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temporary tunnels rot.&lt;/strong&gt; Without a Cloudflare-managed domain, every bridge restart means a connector rebuild.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex-only.&lt;/strong&gt; No Claude Code or Cursor path, and the ChatGPT side must be the web app, not the API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan quality is bounded by what ChatGPT chooses to read.&lt;/strong&gt; On a large monorepo, plans can miss context a full-repo agent would catch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;V1, single maintainer, moving fast.&lt;/strong&gt; Three releases in six days, 400+ issues/PRs, an AI agent triaging — impressive velocity, also a stability warning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not for regulated codebases.&lt;/strong&gt; Even read-only, source goes through a public HTTPS tunnel to a third-party model; the deny list is pattern-based.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does Codex with ChatGPT work with ChatGPT Plus, or do I need Pro?
&lt;/h3&gt;

&lt;p&gt;Plus works. You must enable &lt;strong&gt;Developer Mode&lt;/strong&gt; in ChatGPT settings to add a custom MCP connector; several Plus users hit a &lt;code&gt;FORBIDDEN: This conversation does not support developer MCPs&lt;/code&gt; error until they toggled Developer Mode off and on again. The author uses it on a Plus account. Team/Business plans may have connector policies set by an admin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can ChatGPT modify my files through the bridge?
&lt;/h3&gt;

&lt;p&gt;No. The bridge exposes nine read-only MCP tools and no write, delete, shell, commit or install tools exist on the server. Codex is the only component that edits files, runs commands and commits. A pending PR proposes write-capable "mailbox" tools, but as of September 10, 2026 it has not been merged.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is my repository uploaded to OpenAI?
&lt;/h3&gt;

&lt;p&gt;Not as a whole. ChatGPT pulls individual files, search results and diffs on demand through the MCP connection, capped in size, with &lt;code&gt;.env*&lt;/code&gt;, private keys, SSH and cloud credentials denied by default. Whatever it reads &lt;em&gt;does&lt;/em&gt; go to OpenAI's servers like any ChatGPT conversation, so treat it as you would pasting that code into ChatGPT manually.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does it need Cloudflare?
&lt;/h3&gt;

&lt;p&gt;ChatGPT's connector must reach your machine over public HTTPS. The bridge only listens on &lt;code&gt;127.0.0.1&lt;/code&gt;, so &lt;code&gt;cloudflared&lt;/code&gt; provides a Quick Tunnel (temporary URL) or a Named Tunnel (stable hostname on your own domain). No Cloudflare account is needed for the temporary option.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it cost extra?
&lt;/h3&gt;

&lt;p&gt;The software is free (MIT). It uses your existing ChatGPT plan and Codex plan; there's no API key and no per-token bill. The trade-off is that ChatGPT-side MCP calls and Codex-side Computer Use both consume plan quota, so leave high-effort modes off unless you need them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use it without Computer Use?
&lt;/h3&gt;

&lt;p&gt;Yes. Ask Codex for manual mode and the Skill will give you the exact settings values to enter and let you relay &lt;code&gt;[C2C]&lt;/code&gt; messages yourself. Only the MCP read connection is mandatory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;Codex with ChatGPT is a smart answer to a real problem: two paid quotas, one of them idle. The &lt;strong&gt;security design is genuinely good&lt;/strong&gt; — read-only by construction, OAuth 2.1 with PKCE, realpath containment, sanitized logs — and the &lt;strong&gt;protocol is disciplined&lt;/strong&gt; (tiny state messages, independent diff review, checkpoint-based resume). That's more engineering than most weekend MCP projects get.&lt;/p&gt;

&lt;p&gt;The rough edges are all operational: first-time setup, Computer Use flakiness, tunnel churn, Windows quirks, a single student maintainer. If you're a Codex + ChatGPT Plus/Pro user who keeps hitting limits and can stomach a manual first setup and a Cloudflare domain, install it today. Everyone else: star it and check back when V2 lands — especially if the read-only boundary survives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rating: 4/5&lt;/strong&gt; — strong idea, unusually careful security, V1 ergonomics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/XiaoDuoYa/codex-with-chatgpt" rel="noopener noreferrer"&gt;XiaoDuoYa/codex-with-chatgpt on GitHub&lt;/a&gt; — README, &lt;code&gt;docs/protocol.md&lt;/code&gt;, &lt;code&gt;docs/security.md&lt;/code&gt;, &lt;code&gt;docs/architecture.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/XiaoDuoYa/codex-with-chatgpt/releases" rel="noopener noreferrer"&gt;Release v0.1.2 (September 4, 2026)&lt;/a&gt; — structured MCP outputs, Windows tunnel fixes&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/XiaoDuoYa/codex-with-chatgpt/issues/21" rel="noopener noreferrer"&gt;Issue #21 — Plus accounts and Developer MCP&lt;/a&gt;, &lt;a href="https://github.com/XiaoDuoYa/codex-with-chatgpt/issues/60" rel="noopener noreferrer"&gt;Issue #60 — daily reconnects&lt;/a&gt;, &lt;a href="https://github.com/XiaoDuoYa/codex-with-chatgpt/pull/409" rel="noopener noreferrer"&gt;PR #409 — machine-wide gateway proposal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/dd8888/codex-with-chatgpt-splits-planning-from-execution-3bp2"&gt;Codex with ChatGPT splits planning from execution — dev.to&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>codexwithchatgpt</category>
      <category>codex</category>
      <category>chatgpt</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Reverify Review: Make Your AI Agent Prove Every Claim</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Wed, 09 Sep 2026 10:13:26 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/reverify-review-make-your-ai-agent-prove-every-claim-44e9</link>
      <guid>https://dev.to/andrew-ooo/reverify-review-make-your-ai-agent-prove-every-claim-44e9</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/reverify-ai-hallucination-verifier-mcp-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Reverify&lt;/strong&gt; is a Python CLI and MCP server built on one rule: &lt;strong&gt;the model proposes, a deterministic tool decides.&lt;/strong&gt; An LLM can hypothesize anything it likes about an artifact — a function prologue, an imported symbol, whether a refactor is behavior-equivalent — but nothing counts as a fact until a tool checks it against ground truth and returns &lt;code&gt;VERIFIED&lt;/code&gt; or &lt;code&gt;REFUTED&lt;/code&gt; with evidence. The model never gets to assert a fact on its own.&lt;/p&gt;

&lt;p&gt;It picked the hardest place to prove that idea: &lt;strong&gt;binary reverse engineering&lt;/strong&gt;, where hallucination is at its worst. On 71 real Windows system DLLs, the model's "textbook" answer for the entry-point prologue was wrong &lt;strong&gt;97% of the time&lt;/strong&gt;; Reverify's verifier refuted every wrong claim and accepted zero. That gate now runs in CI on Linux, macOS, and Windows on every push and fails the build if a single wrong claim is ever marked &lt;code&gt;VERIFIED&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Key facts as of September 9, 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1,053 GitHub stars, 217 forks&lt;/strong&gt;, created August 31, 2026 — nine days old&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MIT licensed&lt;/strong&gt;, &lt;code&gt;pip install reverify&lt;/code&gt;, pure standard library with &lt;strong&gt;zero required dependencies&lt;/strong&gt;; optional &lt;strong&gt;capstone / unicorn / lief / Z3 / angr&lt;/strong&gt; engines upgrade it in place&lt;/li&gt;
&lt;li&gt;Ships as an &lt;strong&gt;MCP server&lt;/strong&gt; (&lt;code&gt;re_verify_claim&lt;/code&gt;, &lt;code&gt;re_ledger&lt;/code&gt;, &lt;code&gt;re_checkpoint&lt;/code&gt;, …) for Claude Code, Cursor, and any MCP client&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;reverify rollover&lt;/code&gt;&lt;/strong&gt; replaces auto-compaction in Claude Code, Codex CLI, Gemini CLI, and OpenCode with a file-based hand-off&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0 false &lt;code&gt;VERIFIED&lt;/code&gt;&lt;/strong&gt; across 275 binaries in four formats/architectures; v0.8.0 → v0.11.0 shipped September 3–4, 2026&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a narrow tool with a very general idea inside it. If you do binary analysis, malware triage, or CTF work with an AI agent, it is immediately useful. If you don't, the interesting part is the architecture — an anti-hallucination pattern most agent frameworks still don't implement.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem Reverify is built around
&lt;/h2&gt;

&lt;p&gt;Every agent framework has the same soft spot: the model's own output goes back into its context as if it were true. It guesses an API signature in turn 3, builds on it in turn 8, and by turn 20 an entire plan rests on something nobody checked. When the window fills, a summarizer compresses the transcript — and the guess and the verified fact get the same treatment, because nothing in a transcript marks which is which. Reverify's author frames it for binaries: "Ask a model to reconstruct a struct or an algorithm from a binary and it will confidently invent offsets, sizes, and behavior."&lt;/p&gt;

&lt;p&gt;The fix separates two roles most agents blur. &lt;strong&gt;The proposer&lt;/strong&gt; — the LLM — emits &lt;em&gt;claims&lt;/em&gt;: structured JSON hypotheses about the artifact. &lt;strong&gt;The judge&lt;/strong&gt; — deterministic tooling — checks each claim against the actual bytes and hands back a verdict plus the evidence it saw. Only verified claims become facts. Refuted claims come back with what the tool observed, so the model can correct instead of re-guessing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The verification loop in practice
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;reverify              &lt;span class="c"&gt;# pure-Python core&lt;/span&gt;
&lt;span class="c"&gt;# or: pip install "reverify[full]"  → capstone + unicorn + lief + z3&lt;/span&gt;
reverify auto sample.bin &lt;span class="nt"&gt;--json&lt;/span&gt;   &lt;span class="c"&gt;# triage: format, arch, sections, strings&lt;/span&gt;
reverify backends                 &lt;span class="c"&gt;# which engines are active&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A claim is a JSON object with a &lt;code&gt;kind&lt;/code&gt; and whatever the verifier needs to check it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;reverify verify sample.bin &lt;span class="nt"&gt;--claim&lt;/span&gt; &lt;span class="s1"&gt;'{
  "kind": "instructions", "offset": 4096,
  "mnemonics": ["push", "mov", "sub"],
  "note": "function prologue"
}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The verifier disassembles at that offset and answers &lt;code&gt;VERIFIED&lt;/code&gt;, &lt;code&gt;REFUTED&lt;/code&gt;, or &lt;code&gt;INCONCLUSIVE&lt;/code&gt;. Claims batch from a file (&lt;code&gt;--claims-file claims.json&lt;/code&gt;), and the CLI exits non-zero if &lt;strong&gt;anything&lt;/strong&gt; is refuted, which makes it a drop-in CI gate.&lt;/p&gt;

&lt;p&gt;The claim vocabulary is wider than it first looks. Structural kinds: &lt;code&gt;bytes_at&lt;/code&gt;, typed reads (&lt;code&gt;u32_at&lt;/code&gt; / &lt;code&gt;u64_at&lt;/code&gt;), &lt;code&gt;pattern_present&lt;/code&gt;, &lt;code&gt;string_present&lt;/code&gt;, &lt;code&gt;import_present&lt;/code&gt;, &lt;code&gt;export_present&lt;/code&gt;, &lt;code&gt;section_present&lt;/code&gt;. Behavioral kinds: &lt;code&gt;emulate_result&lt;/code&gt; (run the bytes, compare registers), &lt;code&gt;behavior_equiv&lt;/code&gt; (run the original function and a candidate reconstruction over shared inputs), and &lt;code&gt;prove_equiv&lt;/code&gt; (Z3 proves two expressions equal for &lt;em&gt;all&lt;/em&gt; inputs — the tool for MBA deobfuscation). The v0.9.0 semantic layer adds &lt;code&gt;function_at&lt;/code&gt;, &lt;code&gt;calls&lt;/code&gt;, &lt;code&gt;references&lt;/code&gt;, and &lt;code&gt;reachable_from_entry&lt;/code&gt; on top of angr. A refuted &lt;code&gt;bytes_at&lt;/code&gt; even reports where the expected bytes &lt;em&gt;actually&lt;/em&gt; are, and &lt;code&gt;"observe": true&lt;/code&gt; lets the model read a value instead of guessing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real hallucination, caught
&lt;/h2&gt;

&lt;p&gt;The repository's &lt;code&gt;EXAMPLE.md&lt;/code&gt; walks through one run on &lt;code&gt;C:\Windows\System32\kernel32.dll&lt;/code&gt; with Claude as the proposer. The model saw only a fact sheet — format, architecture, sections, imports, strings, entry RVA — and &lt;em&gt;not&lt;/em&gt; the entry-point disassembly.&lt;/p&gt;

&lt;p&gt;Round 1, the model proposed from priors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[REFUTED ] instructions @ entry (rva 0x2c500)  mnemonics ["push","mov","sub"]
           note: "DllMainCRTStartup: standard frame prologue (prior guess)"
[VERIFIED] export_present  CreateFileW
[VERIFIED] export_present  GetProcAddress
[VERIFIED] section_present .text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The textbook &lt;code&gt;push rbp; mov rbp, rsp; sub rsp, N&lt;/code&gt; frame prologue is the strongest prior in any model's training data. It is wrong here. The verifier refuted it and returned the real bytes — the MSVC x64 shadow-space prologue:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nasm"&gt;&lt;code&gt;&lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;qword&lt;/span&gt; &lt;span class="nv"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt; &lt;span class="c1"&gt;; push rdi ; sub rsp, 0x20 ; mov edi, edx ; mov rbx, rcx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Round 2, the model corrected from evidence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[VERIFIED] instructions @ entry  mnemonics ["mov","push","sub","mov","mov"]
           operands ["qword ptr [rsp + 8], rbx","rdi","rsp, 0x20","edi, edx","rbx, rcx"]  mode=exact
Verified 3/3.  Information 1.236.  Trustworthy: True  Grounded: True
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That &lt;code&gt;Information 1.236&lt;/code&gt; line is the second clever piece. "Every claim verified" is trivially reachable — assert that the file starts with &lt;code&gt;MZ&lt;/code&gt; and that &lt;code&gt;.text&lt;/code&gt; exists. So Reverify weighs each verified claim by how much it actually says: restating the fact sheet weighs zero, and the rest is scored by how rare and high-entropy the expected content is &lt;em&gt;in this specific binary&lt;/em&gt;. A reconstruction is only "grounded" when nothing is refuted &lt;strong&gt;and&lt;/strong&gt; the verified weight clears &lt;code&gt;--min-information&lt;/code&gt; (default 1.0).&lt;/p&gt;

&lt;h2&gt;
  
  
  The benchmark: 275 binaries, 0 false accepts
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;BENCHMARK.md&lt;/code&gt; applies the textbook-prologue prior &lt;em&gt;blind&lt;/em&gt; to a deterministic sample of the host's own system binaries and records, per file, whether the prior was wrong and whether the verifier ever accepted a wrong claim.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Tested&lt;/th&gt;
&lt;th&gt;Prior wrong&lt;/th&gt;
&lt;th&gt;False &lt;code&gt;VERIFIED&lt;/code&gt;
&lt;/th&gt;
&lt;th&gt;95% upper bound&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Windows 11 (reference run)&lt;/td&gt;
&lt;td&gt;PE x86 + x86_64&lt;/td&gt;
&lt;td&gt;71&lt;/td&gt;
&lt;td&gt;69 (97%)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux x86_64 (ubuntu-latest)&lt;/td&gt;
&lt;td&gt;ELF&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS (macos-latest, x86_64 slice)&lt;/td&gt;
&lt;td&gt;Mach-O&lt;/td&gt;
&lt;td&gt;77&lt;/td&gt;
&lt;td&gt;77&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows Server (windows-latest)&lt;/td&gt;
&lt;td&gt;PE&lt;/td&gt;
&lt;td&gt;68&lt;/td&gt;
&lt;td&gt;68&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Pooled with a third-party aarch64 replication: &lt;strong&gt;275 binaries, 4 formats/architectures, 0 false &lt;code&gt;VERIFIED&lt;/code&gt;&lt;/strong&gt;, with a pooled 95% Wilson upper bound of about 1.4% on the false-accept rate. Two of the 71 Windows DLLs genuinely open with &lt;code&gt;push; mov&lt;/code&gt; and were correctly verified — the benchmark is not rigged to always refute.&lt;/p&gt;

&lt;p&gt;A control corpus makes this more credible: CI compiles two small C libraries with gcc, clang, and MSVC at -O0 and -O2. At -O0 the frame-pointer prologue really is there and verifies; at -O2 it isn't and gets refuted. Every run leaves a record with the SHA-256 of every binary and every verdict under &lt;code&gt;benchmarks/results/&lt;/code&gt;, and releases ship with SLSA build provenance. For a nine-day-old solo project, this is an unusual amount of evidence engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ledger: facts that survive &lt;code&gt;/clear&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The second half of the project generalizes from "verify a claim" to "manage context." Every harness handles a full window the same way: summarize and drop the rest. Reverify's argument is that this loss is only unavoidable &lt;em&gt;because the transcript doesn't know which parts were state.&lt;/em&gt; Its loop does know: the only things that matter are what the tools verified, observed, proved, and refuted. Everything else was never trusted, so dropping it loses nothing.&lt;/p&gt;

&lt;p&gt;Since v0.8.0 that state lives in &lt;code&gt;.reverify/ledger/&amp;lt;sha256&amp;gt;.json&lt;/code&gt; per binary (content-keyed, so a renamed copy shares its ledger), checkpointed after every round. Refutations are stored as &lt;code&gt;KNOWN FALSE&lt;/code&gt;, so a fresh context doesn't re-propose the same wrong prior — the part a summary usually drops.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;reverify reconstruct target.exe &lt;span class="nt"&gt;--goal&lt;/span&gt; &lt;span class="s2"&gt;"..."&lt;/span&gt;   &lt;span class="c"&gt;# resumes from .reverify/ automatically&lt;/span&gt;
reverify ledger target.exe                     &lt;span class="c"&gt;# what is established, what is known false&lt;/span&gt;
reverify ledger &lt;span class="nt"&gt;--hook&lt;/span&gt;                         &lt;span class="c"&gt;# Claude Code SessionStart hook&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Over MCP, &lt;code&gt;re_verify_claim&lt;/code&gt; records every grounded result and &lt;code&gt;re_ledger&lt;/code&gt; hands them back after the host compacts or clears. &lt;code&gt;re_checkpoint&lt;/code&gt; notes are explicitly labelled UNVERIFIED — "only &lt;code&gt;re_verify_claim&lt;/code&gt; results become facts."&lt;/p&gt;

&lt;p&gt;&lt;code&gt;reverify orchestrate&lt;/code&gt; closes the loop across sessions, running a goal as a sequence of fresh contexts and rolling over on the model's request, a token budget, or &lt;em&gt;drift&lt;/em&gt;. The recorded run on &lt;code&gt;msimg32.dll&lt;/code&gt; with the Claude Agent SDK driver — 2 sessions × 4 turns — produced 15 grounded facts across the rollover, 2 refuted guesses, 0 false accepts, and a second session that started from the ledger rather than a summary.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;reverify rollover&lt;/code&gt;: the same idea for any agent CLI
&lt;/h2&gt;

&lt;p&gt;This is the piece most readers will actually try, because it has nothing to do with binaries.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;reverify rollover &lt;span class="nb"&gt;install&lt;/span&gt;          &lt;span class="c"&gt;# wires hooks into every CLI on PATH (backups kept)&lt;/span&gt;
reverify rollover doctor           &lt;span class="c"&gt;# what is wired, recent events&lt;/span&gt;
reverify rollover claude           &lt;span class="c"&gt;# launch Claude Code through the launcher&lt;/span&gt;
reverify rollover codex &lt;span class="nt"&gt;--full-auto&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;install&lt;/code&gt; turns off native auto-compaction in each CLI and installs a guard at its "turn finished" hook. At the threshold — &lt;code&gt;REVERIFY_ROLLOVER_TOKENS&lt;/code&gt;, default 200k — or when the model runs &lt;code&gt;reverify rollover request&lt;/code&gt;, the guard blocks one stop and asks the model to write a hand-off &lt;em&gt;file&lt;/em&gt; with fixed sections, labelled UNVERIFIED. Nothing is summarized inside the conversation.&lt;/p&gt;

&lt;p&gt;The design is fail-closed: on the next stop the guard checks that the hand-off was really rewritten, and only then writes a receipt carrying the transcript's SHA-256 and the user's verbatim first and latest messages. Then whoever can end the session does it — the launcher for any CLI, Gemini in-process, OpenCode via the SDK. The old transcript stays on disk as an audit trail. In the author's words, the hand-off is written while the model still has the whole context, "and the conversation that produced it is dropped, not paraphrased."&lt;/p&gt;

&lt;p&gt;The same rule now reaches ordinary code: &lt;code&gt;reverify equiv &amp;lt;reference&amp;gt; &amp;lt;candidate&amp;gt; --lang python&lt;/code&gt; (or C) runs both implementations over shared inputs and returns a counterexample on mismatch, so an AI's refactor is &lt;em&gt;tested, not trusted&lt;/em&gt;. It is a small feature today, but it is the one that could pull Reverify out of its niche.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting it up as an MCP server
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"reverify"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"/path/to/reverify/reverify/mcp_server.py"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exposed tools: &lt;code&gt;re_auto_triage&lt;/code&gt;, &lt;code&gt;re_parse&lt;/code&gt;, &lt;code&gt;re_pattern_scan&lt;/code&gt;, &lt;code&gt;re_disasm&lt;/code&gt;, &lt;code&gt;re_verify_claim&lt;/code&gt;, &lt;code&gt;re_semantic&lt;/code&gt;, &lt;code&gt;re_checkpoint&lt;/code&gt;, and &lt;code&gt;re_ledger&lt;/code&gt;. Once wired, your agent can have its hypotheses judged against the bytes before it reports them, and its grounded facts come back automatically after a &lt;code&gt;/clear&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community and early feedback
&lt;/h2&gt;

&lt;p&gt;Reverify has not had a Hacker News or Reddit moment yet; the README notes it was shared on &lt;strong&gt;LINUX DO&lt;/strong&gt;, a Chinese-language developer community. The 217-fork-to-1,053-star ratio is unusually high, which usually means people are pulling the code to run the benchmark locally — consistent with a project whose whole pitch is "replicate it yourself."&lt;/p&gt;

&lt;p&gt;The most substantive external feedback is from contributor &lt;strong&gt;IMGillusion&lt;/strong&gt;, who has landed five PRs (ARM64 disassembler routing, an ExeBench adapter, a multi-prior scorecard, among others). Their open issue &lt;strong&gt;#14&lt;/strong&gt; is the most honest picture of where the loop still breaks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"When the orchestrate goal is phrased as an open-ended description, the model stops using the structured claim kinds and degrades to raw &lt;code&gt;bytes_at&lt;/code&gt; guessing. The run never converges."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Their repro on a qwen3.8-27b endpoint: &lt;code&gt;/usr/bin/ls&lt;/code&gt; with the goal "find the dynamic import list" converged on 14 &lt;code&gt;import_present&lt;/code&gt; claims; &lt;code&gt;/usr/bin/cat&lt;/code&gt; with an open-ended phrasing of the same goal produced zero structured claims and stalled. The root cause is a prompt gap, and the one-line fix in PR &lt;strong&gt;#19&lt;/strong&gt; flips the run to 100% structured claims. The verifier is airtight, but the &lt;em&gt;proposer&lt;/em&gt; is still a language model, and small prompt details decide whether the loop converges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limitations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Nine days old, single-author, alpha.&lt;/strong&gt; 74 of 82 commits are from &lt;code&gt;2akouwu&lt;/code&gt;; PyPI's classifier says &lt;code&gt;Development Status :: 3 - Alpha&lt;/code&gt;. Four versions shipped in 48 hours, and PyPI currently lists 0.10.0 while the repo is at 0.11.0 — APIs will move.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The benchmark measures one prior.&lt;/strong&gt; The 97%-wrong figure is for the textbook-prologue guess specifically, not a general hallucination rate — the author says to "treat it as a data point, not a headline."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The pure-Python core is limited.&lt;/strong&gt; Without capstone/unicorn/lief, semantic claims answer &lt;code&gt;INCONCLUSIVE&lt;/code&gt; for almost everything. Real work wants &lt;code&gt;reverify[full]&lt;/code&gt;; the semantic layer wants angr, a heavy install, and its verdicts sit at a lower &lt;code&gt;DERIVED&lt;/code&gt; tier because CFGFast is heuristic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;rollover&lt;/code&gt; has a sharp edge.&lt;/strong&gt; The hooks can write the hand-off but cannot end a Claude Code or Codex session. Start the CLI yourself with native compaction now disabled and the conversation has no ceiling — the README admits "one measured session reached 909k tokens before its owner noticed." Use the launcher, set &lt;code&gt;REVERIFY_ROLLOVER_SUCCESSOR=bg&lt;/code&gt;, or run &lt;code&gt;doctor&lt;/code&gt; regularly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authorized use only.&lt;/strong&gt; Malware analysis, CTF, interoperability research, and software you own — a policy line, not a technical control.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How it compares
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Judge is deterministic?&lt;/th&gt;
&lt;th&gt;Survives context reset?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reverify&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Model proposes claims about bytes/code; tools verify with evidence&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (content-keyed ledger + rollover)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ghidra / IDA + LLM plugins&lt;/td&gt;
&lt;td&gt;LLM annotates a decompilation&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Guardrails / LLM-as-judge&lt;/td&gt;
&lt;td&gt;A second model scores the first model's output&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native auto-compaction (Claude Code, Codex)&lt;/td&gt;
&lt;td&gt;Summarize transcript when full&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Lossy (summary includes guesses)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ExeBench-style re-executability&lt;/td&gt;
&lt;td&gt;Compile and run candidate vs. reference&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;N/A (one-shot)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The unique seat is the combination: deterministic verdicts &lt;em&gt;and&lt;/em&gt; a memory that only stores what was verified.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Reverify free?
&lt;/h3&gt;

&lt;p&gt;Yes. MIT license, &lt;code&gt;pip install reverify&lt;/code&gt;, zero required dependencies. The optional engines (capstone, unicorn, lief, Z3, angr) are open-source too.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it need an API key or a specific model?
&lt;/h3&gt;

&lt;p&gt;No. The proposer is whatever agent you already run over MCP. &lt;code&gt;reverify orchestrate --driver claude&lt;/code&gt; uses your Claude Code login via the Claude Agent SDK; &lt;code&gt;--driver openai&lt;/code&gt; takes &lt;code&gt;OPENAI_*&lt;/code&gt; env vars for any OpenAI-compatible endpoint; &lt;code&gt;--driver mock&lt;/code&gt; runs the loop with no model at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  How is this different from an LLM-as-judge guardrail?
&lt;/h3&gt;

&lt;p&gt;The judge is not a model. A claim is checked by disassembling, emulating, or proving against the actual artifact, and the verdict comes with the observed bytes. The verifier is itself cross-checked against capstone, Unicorn, lief, and &lt;code&gt;objdump&lt;/code&gt;, fuzzed nightly, and gated so that 0 of 475 known-false claims may ever be accepted.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use it on source code, not binaries?
&lt;/h3&gt;

&lt;p&gt;Partially — &lt;code&gt;reverify equiv&lt;/code&gt; covers Python and C behavior equivalence. The structural claim vocabulary (&lt;code&gt;bytes_at&lt;/code&gt;, &lt;code&gt;import_present&lt;/code&gt;, etc.) is binary-specific.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;Reverify is two products in one repo. The first is a rigorous reverse-engineering companion for AI agents — if you do binary analysis with Claude Code or Cursor, install it today. The second is a working prototype of an idea the whole agent ecosystem needs: &lt;strong&gt;an agent's memory should contain only what a deterministic tool confirmed, and a context reset should drop the chatter, not the facts.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is early, niche, and moving fast. But the evidence discipline — receipts on every verdict, a CI benchmark that fails on a single false accept — is better than most tools ten times its age. Watch &lt;code&gt;reverify equiv&lt;/code&gt; and &lt;code&gt;reverify rollover&lt;/code&gt;; those are the parts that could matter to everyone.&lt;/p&gt;

&lt;p&gt;Install: &lt;code&gt;pip install "reverify[full]"&lt;/code&gt;. Source, benchmarks, and replication package at &lt;a href="https://github.com/2akouwu/reverify" rel="noopener noreferrer"&gt;github.com/2akouwu/reverify&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/2akouwu/reverify" rel="noopener noreferrer"&gt;2akouwu/reverify on GitHub&lt;/a&gt; — README, star/fork counts, release history (v0.8.0–v0.11.0, September 3–4, 2026)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/2akouwu/reverify/blob/main/EXAMPLE.md" rel="noopener noreferrer"&gt;EXAMPLE.md&lt;/a&gt; — the kernel32.dll worked example&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/2akouwu/reverify/blob/main/BENCHMARK.md" rel="noopener noreferrer"&gt;BENCHMARK.md&lt;/a&gt; — the 275-binary, 0-false-accept measurement and CI records&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/2akouwu/reverify/issues/14" rel="noopener noreferrer"&gt;Issue #14&lt;/a&gt; and &lt;a href="https://github.com/2akouwu/reverify/pull/19" rel="noopener noreferrer"&gt;PR #19&lt;/a&gt; — open-ended goal drift reported by IMGillusion&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://pypi.org/project/reverify/" rel="noopener noreferrer"&gt;reverify on PyPI&lt;/a&gt; — version, license, optional dependency groups&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>reverify</category>
      <category>hallucination</category>
      <category>mcp</category>
      <category>claudecode</category>
    </item>
    <item>
      <title>VoiceStudio Review 2026: Local ElevenLabs Alternative</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Tue, 08 Sep 2026 10:10:51 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/voicestudio-review-2026-local-elevenlabs-alternative-2l3e</link>
      <guid>https://dev.to/andrew-ooo/voicestudio-review-2026-local-elevenlabs-alternative-2l3e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/voicestudio-review-local-elevenlabs-alternative/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;VoiceStudio&lt;/strong&gt; is a desktop app that bundles 16 local text-to-speech engines and 11 speech-recognition engines behind one UI, plus an OpenAI-compatible API on &lt;code&gt;localhost:3900&lt;/code&gt;. It does voice cloning, voice design, video dubbing, dictation, and audiobook production without an account, an API key, or a usage meter.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/debpalash/VoiceStudio" rel="noopener noreferrer"&gt;debpalash/VoiceStudio&lt;/a&gt; — &lt;strong&gt;21,026 stars&lt;/strong&gt;, 2,618 forks, Python + TypeScript, &lt;strong&gt;AGPL-3.0&lt;/strong&gt;, created &lt;strong&gt;April 9, 2026&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Momentum:&lt;/strong&gt; roughly &lt;strong&gt;7,900 stars in the last week&lt;/strong&gt;, which is what put it near the top of GitHub Trending.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Formerly:&lt;/strong&gt; OmniVoice-Studio. The rename is recent, so search results and forks still carry the old name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latest release:&lt;/strong&gt; &lt;strong&gt;v0.5.1&lt;/strong&gt; (August 28, 2026). The README labels the project an &lt;strong&gt;active beta&lt;/strong&gt; in a warning box.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The catch nobody mentions:&lt;/strong&gt; the app is AGPL-3.0, but the &lt;em&gt;default model weights&lt;/em&gt; are &lt;strong&gt;CC-BY-NC&lt;/strong&gt;. Commercial use requires switching engines. More on this below.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Quick Reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Repo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;github.com/debpalash/VoiceStudio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;App license&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AGPL-3.0 (commercial license on request)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Default model license&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CC-BY-NC weights (Apache-2.0 code)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stack&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tauri v2 (Rust) + React/Vite + FastAPI + SQLite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backend port&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;127.0.0.1:3900&lt;/code&gt; (loopback only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TTS engines&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ASR engines&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language catalogue&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;646 (engine-dependent)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Platforms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;macOS 13.3+ (Apple Silicon), Windows 10/11 x64, Linux x86_64 glibc 2.39+, Docker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compute&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CUDA · MPS/MLX · ROCm (Linux) · CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data dir&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;omnivoice_data/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  The Problem VoiceStudio Actually Solves
&lt;/h2&gt;

&lt;p&gt;The local TTS ecosystem in 2026 is not short of models. It is short of &lt;em&gt;plumbing&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If you want to clone a voice on your own hardware today, the usual path looks like this: clone a model repo, fight a PyTorch version, discover the weights need a Hugging Face token, write a script to chunk long text, write another to stitch WAVs, then realise the model cannot do the language you need and start over with a repo that has entirely different conventions.&lt;/p&gt;

&lt;p&gt;Every one of those models is good. The glue between them is what nobody ships.&lt;/p&gt;

&lt;p&gt;VoiceStudio's actual contribution is the glue: a registry-based engine interface where 16 TTS backends and 11 ASR backends expose the same capabilities to the same UI and the same API. You switch engines from the status bar with Ctrl/Cmd+E. The app handles the Python environment, model downloads, GPU routing, and disk accounting.&lt;/p&gt;

&lt;p&gt;That reframing matters when you judge it. VoiceStudio is not competing with OmniVoice or CosyVoice — it &lt;em&gt;ships&lt;/em&gt; them. It is competing with the afternoon you would otherwise spend wiring them together.&lt;/p&gt;




&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;The one-command installer covers every desktop OS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# macOS / Linux / WSL&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://voicestudio.sh/install | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Windows&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;irm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://voicestudio.sh/install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prebuilt packages are on the releases page: an Apple Silicon DMG, a Windows x64 MSI (with a current-user build that skips admin rights), and a Linux AppImage. Docker works if you would rather keep it contained:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 127.0.0.1:3900:3900 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; omnivoice-data:/app/omnivoice_data &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; voicestudio &lt;span class="se"&gt;\&lt;/span&gt;
  palashdeb/omnivoice-studio:stable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From source it is Bun-based (&lt;code&gt;bun install &amp;amp;&amp;amp; bun run desktop&lt;/code&gt;, or &lt;code&gt;bun run dev&lt;/code&gt; for the browser UI). First launch builds a managed Python environment via &lt;code&gt;uv&lt;/code&gt; and pulls the default model. Budget time and disk for that — the stated minimum is 10 GB free, with 20 GB+ SSD recommended.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The macOS footnote that will bite someone:&lt;/strong&gt; Intel Macs cannot run the local Python backend at all, because current PyTorch wheels are unavailable for them. Intel Mac owners have to point the app at a remote backend. Apple Silicon gets MPS and MLX paths.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your First Clone
&lt;/h2&gt;

&lt;p&gt;The documented flow is three steps: open Voice Cloning, drop in a reference clip, generate. The interesting detail is in the FAQ, and it corrects the most common user assumption — longer reference audio does &lt;strong&gt;not&lt;/strong&gt; reliably produce a better clone:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Cloning is zero-shot: the clip is a prompt, not training data. Use 5 to 15 seconds of one speaker, close to the microphone, without music, noise, or reverb.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Three seconds works; five to fifteen is the sweet spot. Feeding it two minutes of podcast audio is not "more training data" — it is a longer prompt with more chances to include a cough. If you genuinely want a trained voice rather than a zero-shot prompt, the repo has separate data-preparation and training docs.&lt;/p&gt;




&lt;h2&gt;
  
  
  The API Is the Real Story
&lt;/h2&gt;

&lt;p&gt;For anyone building rather than clicking, the OpenAI-compatible endpoint is the headline feature. It is a one-line base-URL swap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;- base_url="https://api.openai.com/v1"
&lt;/span&gt;&lt;span class="gi"&gt;+ base_url="http://localhost:3900/v1"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:3900/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;local&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;audio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;speech&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;with_streaming_response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tts-1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;voice&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;profile-id&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Made on my own hardware.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;response_format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wav&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stream_to_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;speech.wav&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or without an SDK at all:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:3900/v1/audio/speech &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"model":"tts-1","input":"Made on my own hardware.","voice":"default","response_format":"wav"}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; speech.wav
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The surface covers more than synthesis:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POST /v1/audio/speech&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TTS to mp3, opus, aac, flac, wav, pcm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POST /v1/audio/transcriptions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;STT to json, text, verbose_json, srt, vtt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;WS /v1/audio/transcriptions/stream&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Live PCM/WebM transcription with partial + final events&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GET /v1/audio/voices&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List local voice profiles and engines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GET /.well-known/voicestudio-speech&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Transport discovery (HTTP, WS, MCP, dictation)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There is also an MCP server mounted at &lt;code&gt;http://localhost:3900/mcp&lt;/code&gt;, exposing &lt;code&gt;generate_speech&lt;/code&gt;, &lt;code&gt;clone_voice&lt;/code&gt;, and &lt;code&gt;transcribe&lt;/code&gt; to Claude Desktop, Cursor, and other agent clients:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"voicestudio"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:3900/mcp"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And agent skills, if your harness speaks skills.sh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add debpalash/VoiceStudio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Security posture is sane by default.&lt;/strong&gt; The backend binds loopback only. Loopback calls need no key; anything non-local requires a share PIN or API key. Non-loopback ASR endpoints must be HTTPS and redirects are explicitly not followed. Analytics is off until you consent, and when enabled sends allowlisted, content-free metadata — never text, audio, filenames, or projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  Picking an Engine
&lt;/h2&gt;

&lt;p&gt;Sixteen engines is a lot of choice, which is its own kind of problem. The README's hardware table is the shortcut:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Hardware&lt;/th&gt;
&lt;th&gt;Recommended TTS&lt;/th&gt;
&lt;th&gt;Recommended ASR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Apple Silicon (M1–M4)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MLX-Audio · OmniVoice (MPS)&lt;/td&gt;
&lt;td&gt;MLX Whisper · Parakeet MLX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NVIDIA GPU (8 GB+ VRAM)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OmniVoice · CosyVoice 3&lt;/td&gt;
&lt;td&gt;WhisperX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Low VRAM / CPU-only&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PocketTTS · Sherpa-ONNX · KittenTTS&lt;/td&gt;
&lt;td&gt;Moonshine · Faster-Whisper (&lt;code&gt;int8&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The engine roster spans licenses and capabilities unevenly, and that unevenness is the thing to check before committing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OmniVoice&lt;/strong&gt; (default) — 600+ languages, cloning, instruct. Apache-2.0 code, &lt;strong&gt;CC-BY-NC weights&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CosyVoice 3&lt;/strong&gt; — 9 languages + 18 dialects, cloning, instruct, &lt;strong&gt;Apache-2.0&lt;/strong&gt;. The best all-round permissive option.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VoxCPM2&lt;/strong&gt; — 30 languages, cloning, instruct, &lt;strong&gt;Apache-2.0&lt;/strong&gt;, runs on MPS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MOSS-TTS-v1.5&lt;/strong&gt; — 31 languages, cloning, &lt;strong&gt;Apache-2.0&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-SoVITS&lt;/strong&gt; — 5 languages, cloning, &lt;strong&gt;MIT&lt;/strong&gt;, but no macOS support.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KittenTTS&lt;/strong&gt; — English only, CPU only, no cloning, &lt;strong&gt;MIT&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IndexTTS 2.5&lt;/strong&gt; — 5 languages, cloning, under a &lt;strong&gt;Bilibili model license&lt;/strong&gt; that requires a separate written agreement above 100 million MAU or RMB 1 billion annual revenue.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One design decision deserves credit: engines without cloning support cannot preserve a reference speaker in dubbing or pinned-voice batch jobs, and VoiceStudio &lt;strong&gt;rejects those jobs rather than silently swapping engines&lt;/strong&gt;. Failing loudly beats quietly producing the wrong voice, and plenty of tools get this wrong.&lt;/p&gt;




&lt;h2&gt;
  
  
  Beyond Cloning
&lt;/h2&gt;

&lt;p&gt;The feature list is wider than "ElevenLabs alternative" implies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Video dubbing&lt;/strong&gt; — transcribe, translate, preserve speakers, synthesize, export. Completed dubs flag timing issues for review, plus a glossary for term consistency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stories and audiobooks&lt;/strong&gt; — multi-voice scripts, EPUB/PDF import, chapter rendering, &lt;code&gt;.m4b&lt;/code&gt; export.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dictation widget&lt;/strong&gt; — system-wide shortcut, live transcription, optional local-LLM cleanup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vocal isolation&lt;/strong&gt; — Demucs speech/background separation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speaker diarization&lt;/strong&gt; — Pyannote and WhisperX speaker assignment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch queue&lt;/strong&gt; — large job sets with per-job progress, or watch a folder for new videos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AudioSeal watermarking&lt;/strong&gt; — imperceptible synthetic-speech watermarking, on by default.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one is worth pausing on. Zero-shot voice cloning on consumer hardware is genuinely dual-use, and the project enables Meta's AudioSeal watermarking by default rather than hiding it behind a checkbox nobody finds. Not a complete answer to misuse, but a better default than most of the field.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Community Says
&lt;/h2&gt;

&lt;p&gt;The underlying OmniVoice model has strong word of mouth. From r/LocalLLaMA:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It's way better than Qwen3, Chatterbox or any other local TTS that I was able to use."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The same commenter supplied the useful number: on an RX 590, roughly &lt;strong&gt;15 seconds of audio takes 25–30 seconds to generate&lt;/strong&gt; at 32 inference steps. Slower than realtime on old hardware — fine for audiobooks and dubbing, not fine for a live conversational agent.&lt;/p&gt;

&lt;p&gt;The counterweight comes from r/TextToSpeech, where someone who tested echoTTS, Chatterbox, VibeVoice, Qwen3-TTS, IndexTTS2, Fish Audio, MOSS-TTS, and OmniVoice concluded:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Once in a while, one model will outperform the other. So is there one best? I would not say so."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Which is, incidentally, the strongest argument &lt;em&gt;for&lt;/em&gt; VoiceStudio. If no single model wins across languages, voices, and speed, then the app that lets you switch between sixteen of them behind a stable API is worth more than any individual model choice.&lt;/p&gt;




&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The license trap is the big one.&lt;/strong&gt; The application is AGPL-3.0 and does not restrict selling generated audio. But the &lt;em&gt;default&lt;/em&gt; OmniVoice weights are &lt;strong&gt;CC-BY-NC&lt;/strong&gt; — non-commercial. Anyone who installs VoiceStudio, records a demo, and ships it in a client project has a problem they probably do not know they have. The fix is straightforward: switch to CosyVoice 3, VoxCPM2, or MOSS-TTS-v1.5, all Apache-2.0. But the default is the trap, and "read the model terms" in a footnote is not a loud enough warning for how easily this goes wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AGPL matters if you host it.&lt;/strong&gt; Modify VoiceStudio and offer that version as a network service, and AGPL requires you to publish your source. A commercial license for VoiceStudio-owned code exists on request — it does not relicense the third-party models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is beta, and the release notes prove it.&lt;/strong&gt; v0.5.1's highlights are a catalogue of crash fixes: fatal MPS memory exits taking down the backend on Apple Silicon, a Windows &lt;code&gt;0xC0000005&lt;/code&gt; access violation from overlapping WhisperX calls, remounts stacking native jobs. These are all &lt;em&gt;fixed&lt;/em&gt; — the maintainer is clearly responsive, and several fixes credit outside contributors. But 91 open issues and that changelog shape say pre-1.0 loudly. &lt;a href="https://github.com/debpalash/VoiceStudio/issues/315" rel="noopener noreferrer"&gt;Issue #315&lt;/a&gt; is representative: on Windows, the first voice-clone render is perfect and every render afterward in the same session comes out with static and slowed playback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cold-start latency is real.&lt;/strong&gt; The v0.5.1 notes measure first synthesis on a cold filesystem at roughly &lt;strong&gt;42 seconds&lt;/strong&gt;, three seconds short of a 90-second client timeout — which is why the AudioSeal watermark generator now warms on a background thread ~35s after boot, and cloned voice references persist to disk (~10 KB each) so the first generation of a session skips the re-encode. Good fixes that exist because the cold path was genuinely painful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hardware reality check.&lt;/strong&gt; 8 GB RAM and CPU-only technically works, but the default multi-stage workflow wants 8 GB+ VRAM and large optional engines want 12–16 GB. ROCm is Linux-only; Windows AMD and Ryzen AI fall back to CPU.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;646 languages is a catalogue number, not a quality claim.&lt;/strong&gt; The README says so directly: coverage and quality depend on the engine. Only the OmniVoice family reaches 600+. CosyVoice 3 does 9. KittenTTS does English.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who Should Use This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Good fit:&lt;/strong&gt; volume work where per-character cloud billing hurts — audiobook production, multilingual dubbing, dataset generation. Privacy or compliance constraints that keep audio on the machine. Agents needing a local voice via MCP or the OpenAI-compatible endpoint. A/B testing several TTS models without maintaining several repos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad fit:&lt;/strong&gt; realtime conversational agents on modest GPUs — the latency is not there yet. Intel Mac owners. Teams that need commercial rights and will not audit which engine is loaded. Anyone who needs a hosted API with an SLA.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is VoiceStudio really free?&lt;/strong&gt;&lt;br&gt;
The software is, with no paid tier and no usage meter for the local workflow. You supply the hardware, and development is donation-funded. The cost that is not money is disk, VRAM, and setup time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I sell audio I generate with it?&lt;/strong&gt;&lt;br&gt;
Not with the default engine, realistically. The AGPL-3.0 application license does not restrict generated audio, but the default OmniVoice weights are CC-BY-NC and the bundled audio tokenizer carries separate Boson Higgs Audio 2 and Meta Llama community terms. For commercial work, switch to an Apache-2.0 engine — CosyVoice 3, VoxCPM2, or MOSS-TTS-v1.5 — and confirm the terms of the specific weights you download.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is this different from just running OmniVoice directly?&lt;/strong&gt;&lt;br&gt;
OmniVoice is one model. VoiceStudio is the application layer around 16 TTS and 11 ASR engines: managed Python environment, model catalogue, GPU auto-detection, batch queue, dubbing pipeline, diarization, watermarking, an OpenAI-compatible API, and an MCP server. If you only ever want OmniVoice and you are comfortable in Python, run it directly. If you want to compare engines or expose speech to other apps, the wrapper is the point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it work without a GPU?&lt;/strong&gt;&lt;br&gt;
Yes. CPU mode is supported and some engines target it specifically — PocketTTS, Sherpa-ONNX, KittenTTS for synthesis, Moonshine and Faster-Whisper at &lt;code&gt;int8&lt;/code&gt; for transcription. Expect substantially slower generation with the heavier engines, and expect low-VRAM systems to offload to CPU automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it phone home?&lt;/strong&gt;&lt;br&gt;
Not by default. Analytics is off until you opt in, and skipping the consent prompt keeps it off. When enabled it sends allowlisted, content-free usage metadata — never text, audio, filenames, voices, or projects. The backend is loopback-only. The exceptions are all explicit opt-ins: remote workers, external OpenAI-compatible ASR endpoints, and the Colab notebook, which is remote compute by definition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can other apps and agents drive it?&lt;/strong&gt;&lt;br&gt;
Yes, through several transports: REST, SSE, WebSocket, JSON-RPC, a CLI, and an MCP server at &lt;code&gt;localhost:3900/mcp&lt;/code&gt;. A bundled Rust control sidecar lets coding agents, VS Code, desktop apps, and TUIs trigger the system-wide dictation flow or reuse its native text insertion. Read the API auth doc before exposing the backend beyond loopback.&lt;/p&gt;




&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;VoiceStudio is the most complete local voice stack currently packaged as a single install, and the OpenAI-compatible API plus MCP server make it useful as infrastructure rather than just a desktop toy. 21,000 stars in five months is not noise — the plumbing problem it solves is real, and the maintainer is shipping fixes fast.&lt;/p&gt;

&lt;p&gt;Two caveats decide whether it fits you. It is beta, and the crash-fix-heavy changelog means you should track releases rather than run &lt;code&gt;main&lt;/code&gt;. And the default engine's CC-BY-NC weights make the out-of-box configuration non-commercial — check which engine is loaded before you invoice anyone for the output.&lt;/p&gt;

&lt;p&gt;For personal projects, privacy-constrained work, and high-volume audio where cloud billing stings, it is an easy recommendation. For commercial pipelines, it is an easy recommendation &lt;em&gt;after&lt;/em&gt; you have deliberately switched engines.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/debpalash/VoiceStudio" rel="noopener noreferrer"&gt;debpalash/VoiceStudio on GitHub&lt;/a&gt; — README, engine tables, architecture, FAQ, license notice&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/debpalash/VoiceStudio/releases/tag/v0.5.1" rel="noopener noreferrer"&gt;VoiceStudio v0.5.1 release notes&lt;/a&gt; — crash isolation, cold-start measurements, prompt disk cache&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/debpalash/VoiceStudio/issues/315" rel="noopener noreferrer"&gt;Issue #315: Windows repeat-render static noise&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/LocalLLaMA/comments/1t4rst5/i_know_this_isnt_technically_an_llm_but_omnivoice/" rel="noopener noreferrer"&gt;r/LocalLLaMA — OmniVoice quality and RX 590 generation timings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/TextToSpeech/comments/1tb1mng/which_tts_is_the_best_right_now/" rel="noopener noreferrer"&gt;r/TextToSpeech — comparative testing across local TTS models&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://huggingface.co/k2-fsa/OmniVoice#license" rel="noopener noreferrer"&gt;k2-fsa/OmniVoice model license on Hugging Face&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>voicestudio</category>
      <category>omnivoice</category>
      <category>texttospeech</category>
      <category>tts</category>
    </item>
    <item>
      <title>Future AGI Review 2026: Open-Source LLM Eval Platform</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Mon, 07 Sep 2026 10:12:01 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/future-agi-review-2026-open-source-llm-eval-platform-3n2p</link>
      <guid>https://dev.to/andrew-ooo/future-agi-review-2026-open-source-llm-eval-platform-3n2p</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/future-agi-review-open-source-llm-eval-observability/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Future AGI&lt;/strong&gt; is an Apache-2.0 platform that tries to replace four or five separate LLMOps tools at once: tracing, evaluation, guardrails, an LLM gateway, agent simulation, and prompt optimization — all self-hostable, all in one Docker Compose stack.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/future-agi/future-agi" rel="noopener noreferrer"&gt;future-agi/future-agi&lt;/a&gt; — &lt;strong&gt;1,944 stars&lt;/strong&gt;, 583 forks, Python, Apache 2.0, created &lt;strong&gt;April 23, 2026&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Activity:&lt;/strong&gt; genuinely busy. &lt;strong&gt;~4,849 commits in 52 weeks&lt;/strong&gt;, 66 contributors, 1,690 merged PRs, and &lt;strong&gt;v1.35.0 shipped September 4, 2026&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The pitch in one line:&lt;/strong&gt; stop stitching Langfuse + Braintrust + Helicone + Guardrails AI together and run one feedback loop instead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The catch:&lt;/strong&gt; the README itself opens with a &lt;strong&gt;nightly-release warning&lt;/strong&gt; — "Expect rough edges." There are &lt;strong&gt;294 open issues&lt;/strong&gt;, no official Kubernetes/Helm support yet, and the self-hosted build phones home with admin email addresses unless you opt out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verdict:&lt;/strong&gt; the most ambitious open-source LLMOps scope I've reviewed this year, and the least settled. Great for a team that wants one stack and can tolerate churn. Wrong choice if you just need a span viewer.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Quick Reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Repo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;github.com/future-agi/future-agi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache License 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Latest release&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;v1.35.0 (September 4, 2026)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python (Django 5.1) + Go 1.23 gateway + React 18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Datastores&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PostgreSQL, ClickHouse, Redis, RabbitMQ + Temporal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;git clone&lt;/code&gt; + &lt;code&gt;./bin/install&lt;/code&gt; (Docker Compose)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Local UI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Python SDK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pip install ai-evaluation&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TS SDK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm i @traceai/fi-core&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Managed option&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cloud free tier at app.futureagi.com&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  What Future AGI Actually Is
&lt;/h2&gt;

&lt;p&gt;Most LLM observability tools pick a lane. Langfuse is tracing plus prompt management. Phoenix is an OpenTelemetry span viewer with evals bolted on. Helicone is a proxy that happens to log. Guardrails AI does input/output validation and nothing else.&lt;/p&gt;

&lt;p&gt;Future AGI's bet is that those lanes are artificial — that the interesting product is the &lt;em&gt;loop&lt;/em&gt; between them. Production traces should become eval datasets. Eval failures should become simulation scenarios. Simulation results should feed a prompt optimizer. The optimizer's output should go back out through the gateway.&lt;/p&gt;

&lt;p&gt;That's a real architectural argument, and it's the reason this repo is worth looking at even if you don't deploy it. Whether the loop actually closes in practice is the open question, and I'll get to that.&lt;/p&gt;

&lt;p&gt;The system ships as &lt;strong&gt;six pillars&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pillar&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Replaces&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Simulate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-turn conversations against generated personas, adversarial inputs, edge cases. Text and voice (LiveKit, VAPI, Retell, Pipecat).&lt;/td&gt;
&lt;td&gt;Custom simulator scripts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Evaluate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;50+ metrics behind one &lt;code&gt;evaluate()&lt;/code&gt; call — groundedness, hallucination, tool-use correctness, PII, tone, custom rubrics. LLM-as-judge + heuristic + ML.&lt;/td&gt;
&lt;td&gt;Braintrust, Ragas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Protect&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;18 built-in scanners (PII, jailbreak, injection) plus 15 vendor adapters (Lakera, Presidio, Llama Guard).&lt;/td&gt;
&lt;td&gt;Guardrails AI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Observe&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OpenTelemetry-native tracing across 50+ frameworks. Span graphs, latency, token cost.&lt;/td&gt;
&lt;td&gt;Langfuse, Phoenix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OpenAI-compatible Go proxy. 100+ providers, 15 routing strategies, semantic caching, virtual keys, MCP, A2A.&lt;/td&gt;
&lt;td&gt;Helicone, LiteLLM, Portkey&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Optimize&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Six prompt-optimization algorithms: GEPA, PromptWizard, ProTeGi, Bayesian, Meta-Prompt, Random.&lt;/td&gt;
&lt;td&gt;Nothing mainstream&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The last row is the genuinely differentiated one. &lt;strong&gt;Agent simulation and automated prompt optimization are not standard features in this category&lt;/strong&gt; — Langfuse, Phoenix, Braintrust, and Helicone don't ship either.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting It Running
&lt;/h2&gt;

&lt;p&gt;Self-hosting needs Docker Desktop or Docker Engine with Compose available first. Then it's one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# macOS / Linux / WSL&lt;/span&gt;
git clone https://github.com/future-agi/future-agi.git
&lt;span class="nb"&gt;cd &lt;/span&gt;future-agi
./bin/install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Windows PowerShell&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;clone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://github.com/future-agi/future-agi.git&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;future-agi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\bin\install.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The installer pulls published images rather than building from source, which keeps first-run time reasonable. The UI comes up at &lt;code&gt;http://localhost:3000&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For anything beyond a laptop trial, use the production path instead — it generates secrets and pins image tags rather than tracking &lt;code&gt;latest&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./deploy/setup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pinning matters more than usual here. At the current release cadence — five releases in the first four days of September — an unpinned &lt;code&gt;latest&lt;/code&gt; is a moving target under your production traffic.&lt;/p&gt;

&lt;p&gt;One upgrade gotcha worth knowing before you hit it. If you're upgrading an install that already holds traces, you need to explicitly initialize inactive property catalogs after the new stack is healthy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# macOS / Linux / WSL&lt;/span&gt;
./bin/property-catalog-backfill &lt;span class="nt"&gt;--execute&lt;/span&gt;

&lt;span class="c"&gt;# Windows PowerShell&lt;/span&gt;
.&lt;span class="se"&gt;\b&lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="se"&gt;\p&lt;/span&gt;roperty-catalog-backfill.ps1 &lt;span class="nt"&gt;-Execute&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To the project's credit, ordinary restarts never trigger a historical scan, the command reuses the image Compose already selected, it skips already-active workspaces, and it resumes through a durable ledger. That's a carefully-built migration path, not an afterthought.&lt;/p&gt;




&lt;h2&gt;
  
  
  Instrumenting Your App
&lt;/h2&gt;

&lt;p&gt;This is the part that will decide whether you adopt it, and it's genuinely low-friction. Tracing is two lines before your existing code — no call-site rewrites:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fi_instrumentation&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;register&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;traceai_openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAIInstrumentor&lt;/span&gt;

&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;project_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nc"&gt;OpenAIInstrumentor&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Your existing OpenAI code is now traced.
&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;TypeScript is the same shape:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;register&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@traceai/fi-core&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;OpenAIInstrumentation&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@traceai/openai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;projectName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAIInstrumentation&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Your existing OpenAI code is now traced.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-4o&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because instrumentation is OpenTelemetry-native, the lock-in risk on the tracing layer specifically is low. Your spans are OTLP. If Future AGI doesn't work out, you point the exporter somewhere else. The SDKs are also split into independently packaged, independently usable repos — &lt;code&gt;traceAI&lt;/code&gt; for instrumentation, &lt;code&gt;ai-evaluation&lt;/code&gt; for metrics, &lt;code&gt;agent-opt&lt;/code&gt; for optimization, &lt;code&gt;agent-simulate&lt;/code&gt; for voice simulation. &lt;strong&gt;You can adopt one piece without the platform&lt;/strong&gt;, which is a materially better deal than an all-or-nothing install.&lt;/p&gt;

&lt;p&gt;Framework coverage is broad: LangChain, LangGraph, LlamaIndex, CrewAI, AutoGen, PydanticAI, DSPy, Haystack, Instructor, LiteLLM, plus 100+ model providers including self-hosted Ollama, vLLM, and LM Studio.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Gateway and Its Benchmarks
&lt;/h2&gt;

&lt;p&gt;The Agent Command Center is a Go gateway claiming &lt;strong&gt;~29,000 req/s on a t3.xlarge&lt;/strong&gt;, &lt;strong&gt;P99 ≤ 21 ms with guardrails enabled&lt;/strong&gt;, and ~9.9 ns weighted routing overhead.&lt;/p&gt;

&lt;p&gt;Those numbers are plausible for a Go proxy doing header-level routing, and the project publishes a committed benchmark harness so you can reproduce them. That's better practice than most vendors manage — a reproducible harness beats a marketing chart.&lt;/p&gt;

&lt;p&gt;Two caveats. First, these are &lt;strong&gt;vendor-run benchmarks on vendor-chosen hardware&lt;/strong&gt;; a t3.xlarge is a modest instance, so the throughput figure is more impressive than the box, but your routing rules and guardrail scanner mix will move P99 substantially. Second, guardrail latency is highly dependent on &lt;em&gt;which&lt;/em&gt; scanners you enable — an ML-based jailbreak classifier is not the same cost as a regex PII match. Run the harness on your own config before quoting the P99 anywhere it matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Compares
&lt;/h2&gt;

&lt;p&gt;The README ships a comparison table against Langfuse, Phoenix, Braintrust, and Helicone. &lt;strong&gt;It's vendor-authored&lt;/strong&gt; — Future AGI wrote a table in which Future AGI wins — and it's dated "as of April 2026," which is five months stale in a category that ships weekly. Treat it as a feature checklist to verify, not as a finding.&lt;/p&gt;

&lt;p&gt;Here's the number the table omits, and it's the one that matters most for an infrastructure dependency:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;Stars&lt;/th&gt;
&lt;th&gt;License&lt;/th&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Langfuse&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;34,286&lt;/td&gt;
&lt;td&gt;(custom/MIT core)&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Arize Phoenix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;11,354&lt;/td&gt;
&lt;td&gt;(custom)&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Helicone&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;6,134&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Future AGI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1,944&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Apache 2.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Future AGI has roughly &lt;strong&gt;6% of Langfuse's community&lt;/strong&gt;. For a tool you're putting in the request path of a production agent, ecosystem size is a real input: Stack Overflow answers, third-party integrations, battle-tested edge cases, and the odds the project is still maintained in three years all scale with it.&lt;/p&gt;

&lt;p&gt;Where Future AGI legitimately leads is &lt;strong&gt;breadth under one license&lt;/strong&gt;. Braintrust is not open source in the way the others are. Helicone and Langfuse have no simulation or optimization layer. Phoenix has no gateway. If you actually want all six pillars self-hosted under Apache 2.0, this is currently the only option — the comparison isn't rigged so much as it's asking a question only one product answers.&lt;/p&gt;

&lt;p&gt;The honest framing: &lt;strong&gt;Future AGI competes on scope, not on maturity.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;It calls itself a nightly.&lt;/strong&gt; The README's first line is a warning that this is an early-testing release with rough edges and a stable version "coming out soon." Believe it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The stack is heavy.&lt;/strong&gt; PostgreSQL &lt;em&gt;and&lt;/em&gt; ClickHouse &lt;em&gt;and&lt;/em&gt; Redis &lt;em&gt;and&lt;/em&gt; RabbitMQ &lt;em&gt;and&lt;/em&gt; Temporal, fronting Django, a Go service, and a React app. That's six stateful components before you've traced a single span. Langfuse self-hosts on Postgres and ClickHouse. If you're a small team without platform engineering capacity, this is a real operational tax — and Temporal in particular is not a casual dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No Kubernetes or Helm yet.&lt;/strong&gt; Docker Compose on a VM is the supported production path today; official manifests and Helm charts are listed as coming soon. For orgs that deploy exclusively via Helm, that's a hard blocker right now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Default telemetry collects admin email addresses.&lt;/strong&gt; On first boot the self-hosted instance registers instance ID, version, deployment type, &lt;strong&gt;and the email addresses and domains of active admin users&lt;/strong&gt;, then sends periodic anonymous usage heartbeats. You can set &lt;code&gt;FUTURE_AGI_TELEMETRY_DISABLED=1&lt;/code&gt; to opt out — but even disabled, it still sends one minimal census ping (instance ID, version, deployment type, no emails). The project documents this clearly and says no traces, prompts, or API keys are ever sent, which is the right disclosure. It's still a surprising default for a tool marketed on data sovereignty, and if you're self-hosting for compliance reasons, set that variable in your &lt;code&gt;.env&lt;/code&gt; on day one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# .env (or deploy/.env.production for the production overlay)&lt;/span&gt;
&lt;span class="nv"&gt;FUTURE_AGI_TELEMETRY_DISABLED&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;294 open issues&lt;/strong&gt; against a repo that's under five months old. High velocity cuts both ways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The open-source/cloud boundary needs watching.&lt;/strong&gt; The commercial product is the same brand, and the repo is where the free tier funnel lives. Nothing about the Apache 2.0 grant is ambiguous today, but "open core drifts" is the default outcome in this category — Braintrust and Phoenix both carry non-standard licenses for a reason.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who Should Use It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use Future AGI if:&lt;/strong&gt; you're building agents where correctness is the hard problem, not throughput — RAG with citation verification, voice agents, customer support, computer-use agents. You want evals, guardrails, and simulation under one roof, you have the ops capacity for a six-service stack, and you're comfortable pinning versions and reading changelogs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skip it if:&lt;/strong&gt; you want a span viewer (use Phoenix), you want the largest ecosystem and the safest bet (use Langfuse), you have one LLM call per request and want zero friction (use Helicone), or you need Helm charts today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Middle path, and the one I'd actually recommend for most teams:&lt;/strong&gt; adopt &lt;code&gt;traceAI&lt;/code&gt; or &lt;code&gt;ai-evaluation&lt;/code&gt; standalone. They're separately packaged, OTel-native, and Apache/MIT licensed. You get the evaluation depth without betting your infrastructure on a four-month-old platform, and you can graduate to the full stack later if the loop proves out.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is Future AGI actually open source, or open core?&lt;/strong&gt;&lt;br&gt;
The repo is Apache 2.0, including the evaluators, the gateway, and the simulation engine — genuinely permissive, not source-available. A managed cloud exists alongside it with SOC 2 Type II and HIPAA claims. As of September 2026 there's no visible feature gating in the OSS build, but as with any commercially-backed project, verify the license on the specific components you depend on before you commit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I self-host it fully air-gapped?&lt;/strong&gt;&lt;br&gt;
Yes. The docs list air-gapped/on-prem as supported with no phone-home. Set &lt;code&gt;FUTURE_AGI_TELEMETRY_DISABLED=1&lt;/code&gt;, and block egress at the edge if you need full silence — the census ping still fires once otherwise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does it compare to Langfuse for pure tracing?&lt;/strong&gt;&lt;br&gt;
Langfuse is more mature, has ~17x the community, and is lighter to operate. If tracing and prompt management are all you need, Langfuse is the better tool. Future AGI's advantage only materializes when you also want evals, guardrails, gateway, and simulation in the same system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I have to use the gateway to get tracing?&lt;/strong&gt;&lt;br&gt;
No. The instrumentation SDKs work independently — &lt;code&gt;register()&lt;/code&gt; plus an instrumentor traces your existing client calls with no proxy in the path. The gateway is optional and separately useful if you want provider routing and semantic caching.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are GEPA and ProTeGi?&lt;/strong&gt;&lt;br&gt;
They're published prompt-optimization algorithms. Future AGI's &lt;code&gt;agent-opt&lt;/code&gt; package implements six of them (GEPA, PromptWizard, ProTeGi, Bayesian, Meta-Prompt, Random), using production traces as training data. This is the most experimental pillar — treat automated prompt rewriting as something to evaluate carefully, not enable blindly against a live agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it production-ready?&lt;/strong&gt;&lt;br&gt;
The project says stable is "coming soon" and labels current builds nightly. Real teams are clearly running it — the release cadence and closed-PR count suggest active production users — but I would not put a four-month-old, self-declared-nightly platform in the synchronous request path of a critical system without pinned images, a rollback plan, and a load test of your own.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/future-agi/future-agi" rel="noopener noreferrer"&gt;future-agi/future-agi on GitHub&lt;/a&gt; — README, license, install instructions, telemetry disclosure, and comparison table (retrieved September 7, 2026)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/future-agi/future-agi/releases" rel="noopener noreferrer"&gt;Future AGI release v1.35.0&lt;/a&gt; — release cadence and changelog&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.futureagi.com/" rel="noopener noreferrer"&gt;Future AGI documentation&lt;/a&gt; — evaluation, simulation, guardrails, and gateway references&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/future-agi/traceAI" rel="noopener noreferrer"&gt;traceAI instrumentation repo&lt;/a&gt; — OpenTelemetry SDK packaging&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/langfuse/langfuse" rel="noopener noreferrer"&gt;langfuse/langfuse&lt;/a&gt;, &lt;a href="https://github.com/Arize-ai/phoenix" rel="noopener noreferrer"&gt;Arize-ai/phoenix&lt;/a&gt;, &lt;a href="https://github.com/Helicone/helicone" rel="noopener noreferrer"&gt;Helicone/helicone&lt;/a&gt; — comparison star counts and licenses (retrieved September 7, 2026)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Star counts, issue counts, and release dates were pulled from the GitHub API on September 7, 2026 and will drift.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>futureagi</category>
      <category>llmobservability</category>
      <category>llmevaluation</category>
      <category>opentelemetry</category>
    </item>
    <item>
      <title>Magnitude Review 2026: Local Models for Coding Agents</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Sun, 06 Sep 2026 10:13:16 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/magnitude-review-2026-local-models-for-coding-agents-1pbj</link>
      <guid>https://dev.to/andrew-ooo/magnitude-review-2026-local-models-for-coding-agents-1pbj</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/magnitude-local-inference-server-coding-agents-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Magnitude&lt;/strong&gt; is an Apache-2.0 local inference server that does the one job Ollama and LM Studio deliberately leave to you: &lt;strong&gt;deciding what to run&lt;/strong&gt;. It profiles your machine, measures actual memory bandwidth, ranks complete model configurations for that hardware, then downloads, tunes, and serves the one you pick — and writes your coding agent's config file so the agent switches over to it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/magnitudedev/magnitude" rel="noopener noreferrer"&gt;magnitudedev/magnitude&lt;/a&gt; — &lt;strong&gt;3,370 stars&lt;/strong&gt;, 243 forks, TypeScript, Apache 2.0, created &lt;strong&gt;June 12, 2026&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Momentum:&lt;/strong&gt; roughly &lt;strong&gt;1,400 stars in the last week&lt;/strong&gt;, which is what put it on GitHub Trending.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maturity:&lt;/strong&gt; young. CLI is at &lt;strong&gt;v0.0.11&lt;/strong&gt; (published September 2, 2026), with &lt;code&gt;0.0.12-alpha.0&lt;/code&gt; already out. Treat it as alpha.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The pitch in one line:&lt;/strong&gt; it is not a model runner, it is a &lt;em&gt;model chooser&lt;/em&gt; that also runs the model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Harnesses supported:&lt;/strong&gt; Pi, OpenCode, Hermes, OpenClaw, Codex, Claude Code, Oh My Pi, and Cline — plus an optional built-in harness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platforms:&lt;/strong&gt; macOS and Linux natively; Windows through WSL.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Quick Reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Repo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;github.com/magnitudedev/magnitude&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache License 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TypeScript (CLI) + Rust inference engine over llama.cpp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm i -g @magnitudedev/cli&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Package&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;@magnitudedev/cli&lt;/code&gt; (v0.0.11 latest stable)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Service port&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;127.0.0.1:10100&lt;/code&gt; (loopback only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;APIs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OpenAI-compatible + Anthropic-compatible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Model format&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GGUF&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Docs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;docs.magnitude.dev&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data dir&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~/.magnitude/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  The Problem Magnitude Actually Solves
&lt;/h2&gt;

&lt;p&gt;Getting a model to run locally has been solved for years. Ollama does it, LM Studio does it, &lt;code&gt;llama.cpp&lt;/code&gt; does it. What none of them do is tell you &lt;strong&gt;which&lt;/strong&gt; model to run on &lt;em&gt;your&lt;/em&gt; machine.&lt;/p&gt;

&lt;p&gt;That gap matters more for agents than for chat, and the reason is structural. A chat session is a few thousand tokens. An agent trajectory accumulates for twenty or thirty turns, and every turn drags along the whole conversation history, every command run, every tool call and result. That context sits in RAM &lt;em&gt;alongside&lt;/em&gt; the weights, and on long runs it routinely grows larger than the weights themselves.&lt;/p&gt;

&lt;p&gt;Three things follow, and they're why "just use Ollama" is weaker advice for agents than for chat:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Quantization damage is not forgiving.&lt;/strong&gt; A slightly degraded answer is fine in conversation. There is no partial credit on a tool call — it's either structurally valid JSON or the loop breaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slow speeds compound instead of resetting.&lt;/strong&gt; 20 tok/s feels fine when you're reading along as it types. Across a twenty-step agent loop, it's unusable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The agent runs flat out for minutes&lt;/strong&gt;, which is exactly when memory pressure and thermal throttling appear.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The search space has four interacting axes: which model, how heavily it's compressed, how the runtime is tuned, and how much context you configure. The honest industry practice today is to download twenty gigabytes and find out.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why you can't just read a spec sheet
&lt;/h3&gt;

&lt;p&gt;Producing one token requires reading the model's weights out of memory. So the ceiling on generation speed is roughly &lt;strong&gt;memory bandwidth ÷ size of the weights being read&lt;/strong&gt;. Compute barely enters into it. That's why a high TFLOPs rating doesn't rescue a slow generation rate, and why configurations copied from a forum post so often disappoint — they were tuned against someone else's memory bus.&lt;/p&gt;

&lt;p&gt;Two examples show how sharp the edges are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capacity cliffs.&lt;/strong&gt; Qwen3.6 35B-A3B is an MoE model — 35B total parameters, ~3B active per token — but all experts must be resident when routing picks, so the full 35B sits in memory regardless. At 8-bit that's ~38GB (fine on 64GB, impossible in BF16 at ~70GB). A 16GB machine never loads it at any setting: even 4-bit is ~20GB before a single token of context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Equal bit depth, unequal damage.&lt;/strong&gt; Gemma 4 E2B ships as a quantization-aware-training model and holds most of its accuracy at 4-bit. Liquid LFM2.5 2.6B, at the same width, was compressed after training and gives up more. &lt;strong&gt;Bit depth tells you file size. It does not tell you what you gave up.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Magnitude's bet is that this decision belongs to the layer that can see the hardware, not to whoever happens to be installing the tool.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. It profiles the machine
&lt;/h3&gt;

&lt;p&gt;Magnitude detects processor, memory, architecture, and acceleration (Metal or CUDA). Then it does the part that separates measurement from arithmetic: it &lt;strong&gt;measures achieved memory bandwidth&lt;/strong&gt; and runs short test inferences to see how the machine behaves in practice — &lt;em&gt;before&lt;/em&gt; downloading anything large. Two machines with identical spec sheets can differ on real throughput because of architecture, thermal behavior, and whatever else is competing for memory. The profile is cached and recalibrated when needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. It ranks complete configurations
&lt;/h3&gt;

&lt;p&gt;You don't get a list of models — you get &lt;strong&gt;complete configurations&lt;/strong&gt;, each naming a model, a quantization, a context size, and an expected speed range. Magnitude ranks up to ten of them using model intelligence, estimated generation speed, quantization quality, configured context size, and physical memory.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Fast ↔ Smart&lt;/strong&gt; slider sits across the top, and moving it &lt;em&gt;re-runs the recommendation against your hardware&lt;/em&gt; rather than just re-sorting a list. Speed is reported honestly as a range like &lt;code&gt;~36–48 tok/s&lt;/code&gt;, not a single flattering number.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. It runs the model like an agent server, not a chat server
&lt;/h3&gt;

&lt;p&gt;The inference engine is written in &lt;strong&gt;Rust on top of llama.cpp&lt;/strong&gt;, installed and managed by Magnitude, so there's no separate runtime to configure. The agent-specific behavior is where it earns its keep:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;On-demand loading.&lt;/strong&gt; Models stay on disk until requested, then unload when idle or when the machine needs memory. Only the first request after an unload pays load time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory protection.&lt;/strong&gt; It re-checks free memory before every load and stops a running model if memory gets dangerously low — before inference destabilizes the machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context is preserved, not silently shrunk.&lt;/strong&gt; Leftover capacity goes to concurrency rather than quietly cutting each request's context. This is a bigger deal than it sounds (see below).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prefill reuse.&lt;/strong&gt; In ongoing sessions it reuses compatible prompt state and processes only new input.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Format normalization.&lt;/strong&gt; Local models differ in reasoning formats, tool-call formats, chat templates, and history conventions. Magnitude normalizes them so a harness can swap models without model-specific code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The concurrency trap, and why it's the best argument for this tool
&lt;/h3&gt;

&lt;p&gt;Concurrency trades directly against how much context each request keeps. Set it too high on a constrained machine and your context window silently shrinks. &lt;strong&gt;Nothing crashes. The logs look fine.&lt;/strong&gt; The agent just gets quietly worse at long tasks — forgetting what it did ten steps ago — and the natural conclusion is "this model isn't smart enough."&lt;/p&gt;

&lt;p&gt;That failure mode is invisible, and it's almost certainly responsible for a chunk of the "local models can't do agentic work" consensus.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;The manual path is two commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; @magnitudedev/cli
magnitude setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Interactive setup profiles the hardware, shows the recommendations, downloads your pick, and connects it to your harness.&lt;/p&gt;

&lt;p&gt;The agent-first path is the interesting one — you paste a prompt into the agent you already use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Set up local models for me with the Magnitude CLI. Install it with
`npm i -g @magnitudedev/cli` (or my package manager), then run
`magnitude docs onboarding` and follow the instructions.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your agent profiles the hardware, walks you through the options, downloads what you choose, and &lt;strong&gt;rewrites its own config to point at the local model&lt;/strong&gt;. Every non-interactive command supports &lt;code&gt;--json&lt;/code&gt;, which is what makes this workable for agents rather than a gimmick.&lt;/p&gt;

&lt;h3&gt;
  
  
  The CLI worth knowing
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;magnitude service status              &lt;span class="c"&gt;# installation, runtime, active model&lt;/span&gt;
magnitude catalog list                &lt;span class="c"&gt;# what fits this machine, with state&lt;/span&gt;
magnitude catalog pull &amp;lt;model-id&amp;gt;     &lt;span class="c"&gt;# install or update a catalog model&lt;/span&gt;
magnitude models status               &lt;span class="c"&gt;# installed models + residency&lt;/span&gt;
magnitude models load &amp;lt;model-id&amp;gt;      &lt;span class="c"&gt;# load by canonical ID&lt;/span&gt;
magnitude models stop                 &lt;span class="c"&gt;# stop the active model&lt;/span&gt;
magnitude connections list            &lt;span class="c"&gt;# supported + installed harnesses&lt;/span&gt;
magnitude connections add claude-code &lt;span class="nt"&gt;--set-model&lt;/span&gt; &amp;lt;model-id&amp;gt;
magnitude connections &lt;span class="nb"&gt;sync&lt;/span&gt;            &lt;span class="c"&gt;# refresh harness config&lt;/span&gt;
magnitude docs onboarding             &lt;span class="c"&gt;# the agent-facing setup workflow&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Talking to it directly
&lt;/h3&gt;

&lt;p&gt;The background service listens on loopback at &lt;code&gt;http://127.0.0.1:10100&lt;/code&gt; and speaks two dialects:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Base URL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI-compatible&lt;/td&gt;
&lt;td&gt;&lt;code&gt;http://127.0.0.1:10100/inference/v1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic-compatible&lt;/td&gt;
&lt;td&gt;&lt;code&gt;http://127.0.0.1:10100/inference/anthropic&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So anything that speaks either protocol works without adapters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://127.0.0.1:10100/inference/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "gemma-4-e2b",
    "messages": [{"role": "user", "content": "Refactor this function."}]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The OpenAI side supports model listing, Chat Completions, and Responses; the Anthropic side supports Messages and token counting. That Anthropic-compatible endpoint is the quiet reason Claude Code drops in cleanly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where things live
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;~/.&lt;span class="n"&gt;magnitude&lt;/span&gt;/&lt;span class="n"&gt;models&lt;/span&gt;/                   &lt;span class="c"&gt;# managed local models
&lt;/span&gt;~/.&lt;span class="n"&gt;magnitude&lt;/span&gt;/&lt;span class="n"&gt;cache&lt;/span&gt;/                    &lt;span class="c"&gt;# metadata, hardware profiles
&lt;/span&gt;~/.&lt;span class="n"&gt;magnitude&lt;/span&gt;/&lt;span class="n"&gt;config&lt;/span&gt;.&lt;span class="n"&gt;json&lt;/span&gt;               &lt;span class="c"&gt;# settings and model selections
&lt;/span&gt;~/.&lt;span class="n"&gt;magnitude&lt;/span&gt;/&lt;span class="n"&gt;harness&lt;/span&gt;-&lt;span class="n"&gt;connections&lt;/span&gt;.&lt;span class="n"&gt;json&lt;/span&gt;  &lt;span class="c"&gt;# managed harness connections
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deleting &lt;code&gt;~/.magnitude/cache&lt;/code&gt; rebuilds derived data without losing downloaded models. The docs explicitly warn against nuking all of &lt;code&gt;~/.magnitude&lt;/code&gt; as a reflex troubleshooting step.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Real Run
&lt;/h2&gt;

&lt;p&gt;The most detailed independent walkthrough so far comes from &lt;a href="https://blog.dailydoseofds.com/p/stop-guessing-which-local-model-to" rel="noopener noreferrer"&gt;Daily Dose of DS&lt;/a&gt;, who ran it on an &lt;strong&gt;Apple M5 with 10 cores and 16GB of unified memory&lt;/strong&gt;. The profile finished in under a minute.&lt;/p&gt;

&lt;p&gt;The balanced recommendation came back as &lt;strong&gt;Gemma 4 E2B at 4-bit QAT&lt;/strong&gt; — a 5B dense text-and-vision model holding 50K context in 4.6GB, predicted at &lt;strong&gt;43–51 tok/s&lt;/strong&gt;, accuracy rated very high. Below it sat Liquid LFM2.5 2.6B and Qwen3.5 4B at various quantization levels.&lt;/p&gt;

&lt;p&gt;Two details there show the tool isn't just marketing itself:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Predicted speed is a &lt;strong&gt;range&lt;/strong&gt;, and its bottom sits near the point where an agent loop stops feeling usable. Magnitude doesn't round that up.&lt;/li&gt;
&lt;li&gt;The balanced pick had &lt;strong&gt;no speculative decoding available&lt;/strong&gt;, while the model beneath it did. That's a real trade, not a bug — Gemma 4 E2B is faster and more accurate at the same bit depth, and gives up the drafter to get there.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;They connected it to the Pi harness, &lt;strong&gt;turned off wifi&lt;/strong&gt;, and had the agent review internal client files for PII. It completed the task offline and correctly, with nothing leaving the machine — the product claim, tested the only way it can honestly be tested.&lt;/p&gt;

&lt;h3&gt;
  
  
  On speculative decoding
&lt;/h3&gt;

&lt;p&gt;Since reading the weights is the expensive part, the trick is getting more out of each read: a small fast model proposes several tokens ahead, and the real model verifies the whole proposal in one pass. Correct guesses yield several tokens for the cost of one. Whether it pays off depends on the model pairing &lt;em&gt;and&lt;/em&gt; your bandwidth — exactly the judgment that needs a hardware profile, which is why Magnitude sets it rather than exposing it as a flag.&lt;/p&gt;




&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;p&gt;This is a young project and it shows. Being specific:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It's alpha.&lt;/strong&gt; v0.0.11 stable, 59 npm versions published, a &lt;code&gt;0.0.12-alpha.0&lt;/code&gt; already out, and commits landing daily. Expect breaking changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small community, real bus factor.&lt;/strong&gt; 3,370 stars but only ~21 watchers and 17 open issues on a repo created in June 2026. Most contributions come from a handful of people around founder Tom Greenwald.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GGUF and llama.cpp only.&lt;/strong&gt; No vLLM, no native MLX, no ExLlama. On Apple silicon an MLX-native path can beat llama.cpp on some models — you give that up for the automation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loopback only.&lt;/strong&gt; The service binds &lt;code&gt;127.0.0.1&lt;/code&gt;, with no documented LAN-serving story. That rules out the homelab "one GPU box, many clients" pattern without your own proxy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not a production serving layer.&lt;/strong&gt; Single-machine, single-user, on-demand loading. For multi-user throughput you still want vLLM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The catalog is curated.&lt;/strong&gt; Outside-catalog GGUF models work only via the Hugging Face CLI into the HF cache, followed by a restart to refresh inventory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows is WSL-only.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No published benchmarks.&lt;/strong&gt; No reproducible suite of its own, so the speed estimates — refreshingly presented as ranges — are the tool grading its own homework.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Physics still applies.&lt;/strong&gt; A well-chosen 5B model is still a 5B model. Magnitude removes configuration error, not the capability gap against frontier models.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How It Compares
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Chooses the model for you&lt;/th&gt;
&lt;th&gt;Agent-tuned serving&lt;/th&gt;
&lt;th&gt;Writes harness config&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Magnitude&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ hardware-profiled ranking&lt;/td&gt;
&lt;td&gt;✅ on-demand, memory-guarded&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Agents on local models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ollama&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ you pick a tag&lt;/td&gt;
&lt;td&gt;⚠️ general-purpose&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Simplest general local LLM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LM Studio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⚠️ compatibility hints&lt;/td&gt;
&lt;td&gt;⚠️ chat-oriented&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;GUI exploration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;llama.cpp&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌ manual flags&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Maximum control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;vLLM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌ throughput-oriented&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Multi-user GPU serving&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Magnitude isn't competing with llama.cpp — it &lt;em&gt;runs&lt;/em&gt; llama.cpp. It competes with &lt;strong&gt;your afternoon&lt;/strong&gt;, and with the failure mode where someone tries a local model once, picks a configuration nobody measured for them, and concludes their hardware isn't good enough.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who Should Use This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use it if:&lt;/strong&gt; you want a coding agent running fully offline; compliance, client-data, or air-gap constraints make hosted inference a non-starter; you have decent hardware and don't know what it can run; or you burn tokens on high-volume mechanical work where per-token pricing dominates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skip it if:&lt;/strong&gt; you need frontier-model quality on hard problems; you're serving multiple users; you're on bare Windows; you've already tuned llama.cpp yourself; or you can't tolerate alpha tooling in your critical path.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Magnitude free and open source?
&lt;/h3&gt;

&lt;p&gt;Yes — Apache License 2.0, all of it, including the inference engine. No token costs, API keys, or rate limits. Your only cost is hardware and electricity.&lt;/p&gt;

&lt;h3&gt;
  
  
  How is this different from just using Ollama?
&lt;/h3&gt;

&lt;p&gt;Ollama runs the model you name. Magnitude decides &lt;em&gt;which&lt;/em&gt; model, quant, and context size to run by profiling your machine, tunes speculative decoding and concurrency for it, and writes your agent's config. As the project's FAQ puts it: an agent setting up Ollama is guessing — it doesn't know your hardware, which quant fits, or how fast it'll go.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does any data leave my machine?
&lt;/h3&gt;

&lt;p&gt;No. Prompts, files, and models stay local. Once Magnitude and a model are downloaded it runs fully offline — verified in the Daily Dose of DS test with wifi off.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which coding agents does it work with?
&lt;/h3&gt;

&lt;p&gt;Pi, OpenCode, Hermes, OpenClaw, Codex, Claude Code, Oh My Pi, and Cline, plus an optional built-in harness. Because it exposes OpenAI- and Anthropic-compatible endpoints on &lt;code&gt;127.0.0.1:10100&lt;/code&gt;, most other tools speaking either protocol can be pointed at it manually.&lt;/p&gt;

&lt;h3&gt;
  
  
  What hardware do I need?
&lt;/h3&gt;

&lt;p&gt;No fixed minimum — Magnitude profiles what you have and recommends accordingly. A 16GB Apple M5 got a usable 5B recommendation at 43–51 tok/s. Memory &lt;em&gt;bandwidth&lt;/em&gt;, not core count, sets your token rate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use models outside the catalog?
&lt;/h3&gt;

&lt;p&gt;Yes. Download compatible GGUF packages into your Hugging Face Hub cache with the HF CLI, then restart Magnitude to refresh inventory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I have to manage it after setup?
&lt;/h3&gt;

&lt;p&gt;No. It runs headless, loads models when the agent needs them, and unloads them when idle or memory tightens. Your agent can install or switch models via the CLI anytime.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is it production-ready?
&lt;/h3&gt;

&lt;p&gt;Not as a multi-user serving layer, and v0.0.11 says the rest. For a single developer running an agent on their own machine it's usable today — expect frequent updates.&lt;/p&gt;




&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;Magnitude treats &lt;strong&gt;model selection as the product&lt;/strong&gt; rather than an exercise left to the reader, and it targets the exact seam where local inference keeps failing agent workloads: not "can this run?" but "is this configured for the machine it's running on?"&lt;/p&gt;

&lt;p&gt;The measurement-over-arithmetic approach — profiling real bandwidth, running test inferences before downloading 20GB, reporting speed as an honest range, refusing to silently trade context for concurrency — is the right design. The Anthropic-compatible endpoint and &lt;code&gt;--json&lt;/code&gt; on every command show it was built for agents to drive, not just for humans to click through.&lt;/p&gt;

&lt;p&gt;It's also 0.0.11 software with a three-month-old repo and a small maintainer pool, bound to llama.cpp and loopback. If you want offline agent coding and have hardware you don't understand, install it this week. If you need stable infrastructure, watch it for a few months — but watch it, because this is the layer the local-agent stack has been missing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/magnitudedev/magnitude" rel="noopener noreferrer"&gt;magnitudedev/magnitude — GitHub repository&lt;/a&gt; (stars, license, release history)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.magnitude.dev" rel="noopener noreferrer"&gt;Magnitude documentation&lt;/a&gt; — &lt;a href="https://docs.magnitude.dev/models" rel="noopener noreferrer"&gt;Models&lt;/a&gt;, &lt;a href="https://docs.magnitude.dev/inference" rel="noopener noreferrer"&gt;Inference&lt;/a&gt;, &lt;a href="https://docs.magnitude.dev/reference" rel="noopener noreferrer"&gt;Reference&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.dailydoseofds.com/p/stop-guessing-which-local-model-to" rel="noopener noreferrer"&gt;Stop Guessing Which Local Model To Run — Daily Dose of DS&lt;/a&gt; (independent M5 walkthrough)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/@magnitudedev/cli" rel="noopener noreferrer"&gt;@magnitudedev/cli on npm&lt;/a&gt; (version history)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>magnitude</category>
      <category>localllm</category>
      <category>inferenceserver</category>
      <category>llamacpp</category>
    </item>
    <item>
      <title>TrueForge Review: Open-Source Agent Harness, 30% Cheaper</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Sat, 05 Sep 2026 10:11:33 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/trueforge-review-open-source-agent-harness-30-cheaper-4i0l</link>
      <guid>https://dev.to/andrew-ooo/trueforge-review-open-source-agent-harness-30-cheaper-4i0l</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/trueforge-truefoundry-open-source-agent-harness-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TrueForge&lt;/strong&gt; is TrueFoundry's open-source &lt;strong&gt;agent harness&lt;/strong&gt; — the runtime layer that sits between a model and a working agent. It owns the execution loop (model calls, MCP tools, skills, sandboxing, approvals, context management, session state) and exposes it three ways: a chat UI, an HTTP API with a TypeScript SDK, and an embeddable UI SDK.&lt;/p&gt;

&lt;p&gt;Key facts (verified 2026-09-05):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;5,226 GitHub stars&lt;/strong&gt;, 375 forks, &lt;strong&gt;91 open issues&lt;/strong&gt; — created &lt;strong&gt;2026-07-23&lt;/strong&gt;, last push 2026-09-04&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MIT licensed&lt;/strong&gt;, TypeScript, requires &lt;strong&gt;Node.js ≥ 22.14&lt;/strong&gt;; ~31 contributors&lt;/li&gt;
&lt;li&gt;Ships as four npm packages (&lt;code&gt;trueforge&lt;/code&gt;, &lt;code&gt;-core&lt;/code&gt;, &lt;code&gt;-sdk&lt;/code&gt;, &lt;code&gt;-ui&lt;/code&gt;) plus an OCI &lt;strong&gt;Helm chart&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Current release train is &lt;strong&gt;0.2.0-rc.0&lt;/strong&gt; (2026-08-27) — still pre-1.0&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two modes&lt;/strong&gt;: local (one process, SQLite) or hosted (Postgres + Redis via Docker Compose, Helm, or Railway)&lt;/li&gt;
&lt;li&gt;Vendor benchmark on DevRev's Enterprise-Bench: &lt;strong&gt;~30% cheaper than Claude Managed Agents&lt;/strong&gt; on the same model, &lt;strong&gt;~2.5× cheaper than deepagents&lt;/strong&gt;, &lt;strong&gt;~75% cheaper&lt;/strong&gt; on GLM-5.2&lt;/li&gt;
&lt;li&gt;Sandbox is a &lt;em&gt;tool&lt;/em&gt;, not the execution environment — the agent loop stays on the server, secrets stay out of the sandbox&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pitch isn't a smarter agent. It's that &lt;strong&gt;the loop is the expensive part&lt;/strong&gt;, and TrueForge argues most harnesses are wasting your money in it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters Now
&lt;/h2&gt;

&lt;p&gt;We've reviewed a lot of harnesses this year, and they mostly cluster into two shapes. There's the &lt;strong&gt;terminal-native coding agent&lt;/strong&gt; — &lt;a href="https://andrew.ooo/posts/pi-coding-agent-minimal-terminal-harness-review/" rel="noopener noreferrer"&gt;Pi&lt;/a&gt; competing on minimalism, &lt;a href="https://andrew.ooo/posts/deepseek-harness-everything-is-a-plugin-review/" rel="noopener noreferrer"&gt;DeepSeek Harness&lt;/a&gt; on extensibility. And there's the &lt;strong&gt;framework you assemble at runtime&lt;/strong&gt; — LangGraph, deepagents, and friends, where you write the loop yourself.&lt;/p&gt;

&lt;p&gt;TrueFoundry's team put the gap plainly in the &lt;a href="https://news.ycombinator.com/item?id=49378419" rel="noopener noreferrer"&gt;Hacker News thread&lt;/a&gt;, responding to a comparison with Pi:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It's a CLI coding agent that lives in your terminal, built mainly for devs working on a codebase on their own machines. TrueForge is a runtime for building and running general agents. It comes with a server and web UI, plus an SDK and API. So you can build production agents and run them for yourself or your org, self-hosted behind SSO.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the actual positioning: not a coding agent, and not a library. A &lt;strong&gt;server&lt;/strong&gt; you deploy, configure once, and hand to an org. The closest thing we've covered structurally is &lt;a href="https://andrew.ooo/posts/qm-yc-multiplayer-agent-harness-review/" rel="noopener noreferrer"&gt;QM&lt;/a&gt;, which solves the multi-person scoping problem; TrueForge is aiming at the multi-&lt;em&gt;agent&lt;/em&gt;, multi-&lt;em&gt;application&lt;/em&gt; problem instead — one runtime, many agents defined as data, consumed over HTTP.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Benchmark Claim, Examined
&lt;/h2&gt;

&lt;p&gt;This is the part worth reading carefully, because it's the strongest claim and the one most likely to be misread.&lt;/p&gt;

&lt;p&gt;TrueFoundry ran &lt;strong&gt;14 L1–L2 tasks from DevRev's Enterprise-Bench&lt;/strong&gt; — cross-system B2B operations tasks spanning engineering, sales, and support, where each task forces the agent to join data across three MCP servers (a Salesforce-style CRM, a Jira-style tracker, a Drive-style doc store). Every harness got the &lt;strong&gt;same model, same three MCP servers, same system prompt&lt;/strong&gt;, fresh session per task, &lt;strong&gt;n = 3 trials&lt;/strong&gt;, graded by a blind LLM judge that never sees which harness produced the answer.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;th&gt;Solved / 14&lt;/th&gt;
&lt;th&gt;$ / run&lt;/th&gt;
&lt;th&gt;Tokens / run&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Managed Agents · Opus 4.8&lt;/td&gt;
&lt;td&gt;10.7&lt;/td&gt;
&lt;td&gt;$11.8&lt;/td&gt;
&lt;td&gt;10.0M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TrueForge · Opus 4.8&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;10.7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$8.6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.7M&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TrueForge · GLM-5.2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;11.7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$3.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.8M&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;deepagents · Opus 4.8&lt;/td&gt;
&lt;td&gt;10.0&lt;/td&gt;
&lt;td&gt;$21.2&lt;/td&gt;
&lt;td&gt;16.5M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;deepagents · GLM-5.2&lt;/td&gt;
&lt;td&gt;12.0&lt;/td&gt;
&lt;td&gt;$9.1&lt;/td&gt;
&lt;td&gt;11.9M&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The headline is cost, but &lt;strong&gt;the token column is the real story&lt;/strong&gt;. TrueForge solves the same number of tasks as Claude Managed Agents using &lt;strong&gt;37% of the tokens&lt;/strong&gt; (3.7M vs 10.0M), and roughly &lt;strong&gt;22%&lt;/strong&gt; of what deepagents burns on Opus. That's not a pricing trick — it's a structurally leaner loop.&lt;/p&gt;

&lt;p&gt;Their explanation of why holds up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Leaner context each turn&lt;/strong&gt; — a compact instruction instead of heavy scaffolding. deepagents carries planning state, a virtual filesystem, and sub-agent machinery on &lt;em&gt;every&lt;/em&gt; turn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fewer tool calls&lt;/strong&gt; — 19 per task, versus 32 and 40 for the other two. Every extra round-trip re-ships the entire growing context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compaction instead of replay&lt;/strong&gt; — history gets trimmed and large tool responses offloaded, rather than re-sent verbatim.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The honest caveats.&lt;/strong&gt; This is a &lt;strong&gt;vendor-run benchmark&lt;/strong&gt; — TrueFoundry designed the comparison, tuned their own configuration, and published the result. Fourteen tasks at n=3 is a small sample, and the per-task table shows genuine variance (deepagents beats TrueForge outright on &lt;code&gt;eng-l2-a&lt;/code&gt; and &lt;code&gt;eng-l2-b&lt;/code&gt;; TrueForge wins &lt;code&gt;sales-l2-d&lt;/code&gt; and &lt;code&gt;support-l1-b&lt;/code&gt; where deepagents scores 0/3). Note too that &lt;strong&gt;deepagents on GLM-5.2 scored the highest raw accuracy&lt;/strong&gt; of any configuration (12.0/14) — TrueForge's own table doesn't hide that. To their credit the &lt;a href="https://github.com/truefoundry/trueforge/tree/main/benchmark" rel="noopener noreferrer"&gt;benchmark kit is in the repo&lt;/a&gt; and points at DevRev's canonical rubric rather than redistributing a private copy, so the claim is falsifiable. Treat it as "plausible and reproducible," not "independently verified."&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture: Sandbox as a Tool
&lt;/h2&gt;

&lt;p&gt;The design decision that most separates TrueForge from its peers is where the agent loop lives.&lt;/p&gt;

&lt;p&gt;Most sandboxed harnesses — &lt;a href="https://andrew.ooo/posts/tilde-run-agent-sandbox-versioned-filesystem-review/" rel="noopener noreferrer"&gt;Tilde Run&lt;/a&gt; among them — run &lt;em&gt;the whole agent&lt;/em&gt; inside a VM or container. TrueForge inverts it: &lt;strong&gt;the agent loop stays on the server, and the sandbox is just another tool&lt;/strong&gt; it can call for code, files, and shell.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Chat UI ─┐
SDK ─────┼─→ TrueForge server ─→ SQLite | Postgres+Redis
UI SDK ──┘      (agent loop)    ─→ models (BYO)
                     │           ─→ MCP servers
                     └─────────→ sandbox (Daytona) — provisioned on demand
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two consequences fall out of that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Secrets stay in the harness.&lt;/strong&gt; Your API keys and MCP OAuth tokens never enter the sandbox, so a prompt-injected agent that gets shell access still can't read your credentials off disk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compute is provisioned only when needed.&lt;/strong&gt; A conversational agent that never writes code never spins up a sandbox at all. Skills and Code Mode require one; nothing else does.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The tradeoff: you're depending on an external sandbox provider. Today that means &lt;strong&gt;Daytona&lt;/strong&gt;, with "more providers planned." If you need fully air-gapped execution right now, that's a real gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context Engineering: The Actual Product
&lt;/h2&gt;

&lt;p&gt;Strip away the UI and TrueForge is a set of opinions about what the model sees each step. The docs split it into two phases, and the distinction is genuinely useful even if you never run TrueForge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input context&lt;/strong&gt; is loaded at the start of every run and is mostly static: instructions, skills, MCP tool definitions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills&lt;/strong&gt; are git-backed &lt;code&gt;SKILL.md&lt;/code&gt; instruction packs. Critically, each attached skill contributes only its &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt; to context — the full body is read from the sandbox &lt;strong&gt;on demand&lt;/strong&gt; when the agent decides it's relevant. That's &lt;strong&gt;progressive disclosure&lt;/strong&gt;, and it's the same pattern that makes agent skills scale past a handful.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP tool definitions&lt;/strong&gt; are the sneaky context killer. Name, description, input schema, and output schema all cost tokens, and a few MCP servers exposing dozens of tools each can eat a large chunk of the window &lt;em&gt;before the user types anything&lt;/em&gt;. TrueForge defaults to &lt;code&gt;preload: false&lt;/code&gt;: each server contributes only its name and description, and individual tool schemas get discovered on demand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Runtime context&lt;/strong&gt; is what accumulates during the run — user messages, tool calls, tool results, subagent output. This is what compaction, large-result offloading, and subagents manage.&lt;/p&gt;

&lt;p&gt;The docs also give the single best piece of prompt advice in the whole project, which applies regardless of harness:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't duplicate MCP tool docs or skill content&lt;/strong&gt; — the harness already injects those. &lt;strong&gt;Move long procedures into skills&lt;/strong&gt; — anything that reads like a workflow or playbook belongs in a skill, not the instructions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Local mode is genuinely one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @truefoundry/trueforge@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives you one process backed by SQLite, a chat UI, and the HTTP API. Connect a model provider (OpenAI, Anthropic, Gemini, or any OpenAI-compatible endpoint), point it at some MCP servers, and you have a working agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the warning before you get clever with it.&lt;/strong&gt; The README is unusually blunt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Local mode is for your machine only... There is no login by default, and data lives in a local SQLite file. Please keep it on localhost.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For anything shared, hosted mode means Postgres + Redis via Docker Compose, the Helm chart, or Railway, with optional OIDC login.&lt;/p&gt;

&lt;p&gt;Agents themselves are &lt;strong&gt;data, not code&lt;/strong&gt; — an &lt;code&gt;AgentSpec&lt;/code&gt; you POST once and reference by name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"anthropic/claude-sonnet-4-6"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"max_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"instructions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"You help customers with orders. Look up order details before taking action. Always confirm before processing refunds."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcp_servers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"orders-api"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enable_tools"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"get_order"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"process_refund"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"require_approval_for_tools"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"process_refund"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"config"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"iteration_limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note &lt;code&gt;require_approval_for_tools&lt;/code&gt; — human checkpoints are a field on the spec, not something you wire up yourself. Same for &lt;code&gt;iteration_limit&lt;/code&gt;, which is your runaway-loop circuit breaker.&lt;/p&gt;

&lt;p&gt;The SDK's mental model is a clean hierarchy: &lt;strong&gt;one Agent → many Sessions → many Turns → many Events → some Deltas.&lt;/strong&gt; An agent is a reusable definition; a session is one issue worked through (persist its &lt;code&gt;id&lt;/code&gt; and the user resumes tomorrow); a turn is one request; events stream out (&lt;code&gt;turn.created&lt;/code&gt;, &lt;code&gt;model.message&lt;/code&gt;, &lt;code&gt;tool.response&lt;/code&gt;, &lt;code&gt;tool.approval_required&lt;/code&gt;, &lt;code&gt;turn.done&lt;/code&gt;), with deltas as the streaming chunks. Turns chain automatically via &lt;code&gt;previous_turn_id: "auto"&lt;/code&gt;, so you never resend history — a small API decision that eliminates a whole class of bugs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Should Use This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Good fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Teams that need &lt;strong&gt;several agents behind one runtime&lt;/strong&gt;, consumed by apps over HTTP rather than by one developer in a terminal&lt;/li&gt;
&lt;li&gt;Anyone who wants &lt;strong&gt;model portability as a structural property&lt;/strong&gt; — the benchmark's GLM-5.2 column is the argument, and in 2026 the best-value model changes roughly monthly&lt;/li&gt;
&lt;li&gt;Orgs with &lt;strong&gt;self-hosting or SSO requirements&lt;/strong&gt; that rule out Claude Managed Agents outright&lt;/li&gt;
&lt;li&gt;Teams currently on deepagents/LangGraph who are &lt;strong&gt;feeling the token bill&lt;/strong&gt; and would rather configure a loop than maintain one&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Poor fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Solo devs who want a coding agent in their terminal — use &lt;a href="https://andrew.ooo/posts/pi-coding-agent-minimal-terminal-harness-review/" rel="noopener noreferrer"&gt;Pi&lt;/a&gt; or a CLI agent; TrueForge's own team says so&lt;/li&gt;
&lt;li&gt;Python-first shops — the SDK is TypeScript, and while the HTTP API is language-neutral, the ergonomics aren't there yet&lt;/li&gt;
&lt;li&gt;Anyone needing &lt;strong&gt;air-gapped sandboxing today&lt;/strong&gt; (Daytona-only)&lt;/li&gt;
&lt;li&gt;Teams that can't run pre-1.0 software in production. It's &lt;code&gt;0.2.0-rc.0&lt;/code&gt; with 91 open issues, six weeks old&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pre-1.0, and young.&lt;/strong&gt; Created 2026-07-23. The changelog still contains things like "migrate persisted legacy token thresholds" — schema churn is ongoing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-reported benchmarks.&lt;/strong&gt; Reproducible, but designed and run by the vendor. See the caveats above.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single sandbox provider.&lt;/strong&gt; Daytona today.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commercial parent.&lt;/strong&gt; TrueFoundry is a paid platform company. The MIT license is real and the company insists it's "not a cut-down free tier with the good parts held back" — but the open-core funnel risk is the standard one, and worth pricing in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local mode has no auth.&lt;/strong&gt; Easy to misdeploy; the README warns you, but warnings in READMEs have a poor track record.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is an agent harness, exactly?&lt;/strong&gt;&lt;br&gt;
The runtime layer between an LLM and a working agent: it runs the loop of model call → tool call → result → model call, while managing session state, context size, tool permissions, and sandboxing. A framework makes you assemble that; a harness ships it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is TrueForge different from LangGraph or deepagents?&lt;/strong&gt;&lt;br&gt;
deepagents is a framework you build a loop with; TrueForge is a server you deploy that already has one. Practically, TrueForge's benchmark shows it using 3.7M tokens per task versus deepagents' 16.5M on the same model — mostly from compaction and deferred tool loading rather than replaying accumulated context every step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is TrueForge really free?&lt;/strong&gt;&lt;br&gt;
Yes — MIT licensed, all four npm packages and the Helm chart. You pay for your own model tokens, infrastructure, and sandbox provider.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use open models instead of Claude or GPT?&lt;/strong&gt;&lt;br&gt;
Yes, and that's the main cost argument. Any OpenAI-compatible endpoint works. The vendor benchmark puts GLM-5.2 at $3.0/run versus $8.6 for Opus 4.8 — with &lt;em&gt;higher&lt;/em&gt; measured accuracy (11.7 vs 10.7 of 14).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do I need to run it?&lt;/strong&gt;&lt;br&gt;
Node.js ≥ 22.14 and &lt;code&gt;npx @truefoundry/trueforge@latest&lt;/code&gt; for local mode. Hosted mode needs Postgres and Redis, deployable via Docker Compose, Helm, or Railway. A Daytona sandbox is only required for skills and Code Mode.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it support MCP OAuth?&lt;/strong&gt;&lt;br&gt;
Yes — remote MCP servers with header auth or OAuth, including in-chat authorization, where the agent surfaces a Connect button mid-conversation when a connector needs authorizing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it production-ready?&lt;/strong&gt;&lt;br&gt;
Hosted mode is the supported path, with OIDC login and multi-replica Postgres/Redis. But at &lt;code&gt;0.2.0-rc.0&lt;/code&gt; and six weeks old, pin your versions and expect breaking changes. Local mode is explicitly not production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/truefoundry/trueforge" rel="noopener noreferrer"&gt;truefoundry/trueforge on GitHub&lt;/a&gt; — README, releases, license (verified 2026-09-05)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://trueforge.dev/benchmarking" rel="noopener noreferrer"&gt;TrueForge Benchmarking&lt;/a&gt; — Enterprise-Bench methodology and results&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://trueforge.dev/key-features/overview" rel="noopener noreferrer"&gt;TrueForge Harness Capabilities&lt;/a&gt; — context engineering, sandbox-as-tool&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://trueforge.dev/api/overview" rel="noopener noreferrer"&gt;TrueForge SDK Concepts&lt;/a&gt; — Agent/Session/Turn/Event model, AgentSpec&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://news.ycombinator.com/item?id=49378419" rel="noopener noreferrer"&gt;TrueForge – The open-source agent harness&lt;/a&gt; — Hacker News discussion&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>trueforge</category>
      <category>truefoundry</category>
      <category>agentharness</category>
      <category>agents</category>
    </item>
    <item>
      <title>GitNexus Review: A Knowledge Graph for Your AI Agent</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Fri, 04 Sep 2026 10:12:15 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/gitnexus-review-a-knowledge-graph-for-your-ai-agent-20fg</link>
      <guid>https://dev.to/andrew-ooo/gitnexus-review-a-knowledge-graph-for-your-ai-agent-20fg</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/gitnexus-review-code-knowledge-graph-mcp-agents/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitNexus&lt;/strong&gt; indexes a codebase into a knowledge graph — every call, import, inheritance edge, and execution flow — then exposes that graph to AI agents through MCP tools. It sits at roughly &lt;strong&gt;47,000 stars&lt;/strong&gt; and &lt;strong&gt;5,150 forks&lt;/strong&gt;, was created on &lt;strong&gt;August 2, 2025&lt;/strong&gt;, and shipped &lt;strong&gt;v1.6.10 on August 27, 2026&lt;/strong&gt;. The short version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It is not a search tool.&lt;/strong&gt; Semantic search finds files that look relevant. GitNexus answers "what breaks if I change this function" from a precomputed dependency graph. Different question, different machinery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The MCP server is the product.&lt;/strong&gt; Seventeen tools — &lt;code&gt;impact&lt;/code&gt;, &lt;code&gt;trace&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;detect_changes&lt;/code&gt;, &lt;code&gt;rename&lt;/code&gt;, &lt;code&gt;cypher&lt;/code&gt;, and more — callable from Claude Code, Cursor, Codex, Cline, Roo Code, and Windsurf.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two-command setup:&lt;/strong&gt; &lt;code&gt;npx gitnexus analyze&lt;/code&gt; then &lt;code&gt;npx gitnexus setup&lt;/code&gt;. The first indexes and writes &lt;code&gt;AGENTS.md&lt;/code&gt;/&lt;code&gt;CLAUDE.md&lt;/code&gt;; the second writes MCP config for every editor it detects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The design bet is "precomputed relational intelligence"&lt;/strong&gt; — do the clustering and tracing at index time so one tool call returns a complete answer instead of a ten-query exploration chain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The big catch: it is not open source.&lt;/strong&gt; GitNexus ships under the &lt;strong&gt;PolyForm Noncommercial License 1.0.0&lt;/strong&gt;. Personal projects and evaluation are fine; using it at your job is not, without a commercial license.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Other honest catches:&lt;/strong&gt; npm 11 can crash the install, indexing is memory-bound on large repos, the browser UI caps out around 5,000 files, and there are 320 open issues.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The problem it targets
&lt;/h2&gt;

&lt;p&gt;Every coding agent has the same blind spot. Claude Code, Cursor, and Codex are excellent at reading the files you point them at, and they are good at grepping for more. What they cannot cheaply do is know the &lt;em&gt;shape&lt;/em&gt; of a repository they have only partially read.&lt;/p&gt;

&lt;p&gt;The README states the failure mode bluntly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;AI edits &lt;code&gt;UserService.validate()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Doesn't know 47 functions depend on its return type&lt;/li&gt;
&lt;li&gt;Breaking changes ship&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is not a model-intelligence problem but a retrieval problem. The information needed to avoid that mistake exists in the codebase, but finding it requires traversing a call graph the agent never built. So the agent either burns context on exhaustive searches, or guesses.&lt;/p&gt;

&lt;p&gt;GitNexus's answer is to build the graph once, ahead of time, and hand the agent structured answers instead of raw material.&lt;/p&gt;

&lt;h2&gt;
  
  
  Precomputed relational intelligence
&lt;/h2&gt;

&lt;p&gt;The interesting architectural claim is not "knowledge graph" — plenty of tools index code into graphs. It is &lt;em&gt;where the reasoning happens&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Conventional Graph RAG hands the LLM a graph and lets it explore. Ask "what depends on &lt;code&gt;UserService&lt;/code&gt;?" and the model issues a query for callers, another to resolve files, another to filter out tests, another to score risk. Four-plus round trips, each one spending tokens and each one a chance to stop early with an incomplete answer.&lt;/p&gt;

&lt;p&gt;GitNexus does that work at index time. Clustering, tracing, and confidence scoring are already computed, so &lt;code&gt;impact UserService --upstream&lt;/code&gt; returns "8 callers, 3 clusters, all above 90% confidence" in a single call. The maintainer's framing is that this buys three things: &lt;strong&gt;reliability&lt;/strong&gt; (the model can't fail to explore, because exploration already happened), &lt;strong&gt;token efficiency&lt;/strong&gt; (no query chains), and &lt;strong&gt;model democratization&lt;/strong&gt; (smaller models perform better when the tool does the reasoning).&lt;/p&gt;

&lt;p&gt;That last claim has some independent support. In &lt;a href="https://www.reddit.com/r/vibecoding/comments/1tf1kxc/anyone_using_gitnexus_or_codegraph_for_codebase/" rel="noopener noreferrer"&gt;an r/vibecoding thread&lt;/a&gt; comparing GitNexus to alternatives, one user testing it for exactly this reported that "lower-tier models get a little better with it" — which is the predicted result if the tool is genuinely offloading reasoning rather than just relocating it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting it running
&lt;/h2&gt;

&lt;p&gt;The install path is two commands from the repo root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Index your repo&lt;/span&gt;
npx gitnexus analyze

&lt;span class="c"&gt;# 2. Connect your editors (auto-detects Claude Code, Cursor, Codex, …)&lt;/span&gt;
npx gitnexus setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;analyze&lt;/code&gt; does more than parse. It indexes the codebase, installs agent skills, registers Claude Code hooks, and writes &lt;code&gt;AGENTS.md&lt;/code&gt; / &lt;code&gt;CLAUDE.md&lt;/code&gt; context files. &lt;code&gt;setup&lt;/code&gt; writes the MCP configuration.&lt;/p&gt;

&lt;p&gt;Two practical notes that will save you time. First, &lt;strong&gt;install globally before running setup&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; gitnexus
gitnexus setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This writes an absolute-path MCP config that bypasses &lt;code&gt;npx&lt;/code&gt; entirely. On a cold cache, an npx-based MCP launch can exceed Claude Code's default &lt;code&gt;MCP_TIMEOUT&lt;/code&gt; of roughly 30 seconds, and you get a server that mysteriously fails to start.&lt;/p&gt;

&lt;p&gt;Second, &lt;strong&gt;if you are on npm 11.x&lt;/strong&gt;, &lt;code&gt;npx&lt;/code&gt; can crash during install with &lt;code&gt;Cannot destructure property 'package' of 'node.target'&lt;/code&gt;. That is an npm/arborist bug that fires before GitNexus runs at all (&lt;a href="https://github.com/abhigyanpatwari/GitNexus/issues/1939" rel="noopener noreferrer"&gt;issue #1939&lt;/a&gt;). The documented workaround is pnpm, which builds the native dependencies explicitly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm &lt;span class="nt"&gt;--allow-build&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;@ladybugdb/core &lt;span class="nt"&gt;--allow-build&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gitnexus &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;--allow-build&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tree-sitter dlx gitnexus@latest analyze
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No C++ toolchain on the machine? Set &lt;code&gt;GITNEXUS_SKIP_OPTIONAL_GRAMMARS=1&lt;/code&gt; before installing. You lose Dart, Proto, Swift, and Kotlin parsing, and the install finishes in seconds without needing python3/make/g++. Note the value must be exactly &lt;code&gt;1&lt;/code&gt; — anything else falls through to a full rebuild.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tool surface
&lt;/h2&gt;

&lt;p&gt;Seventeen MCP tools ship in the current release. The ones that earn their keep day to day:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;query&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Process-grouped hybrid search (BM25 + semantic + RRF)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;context&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;360-degree symbol view — categorized refs, process participation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;impact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Blast-radius analysis with depth grouping and confidence scores&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;trace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shortest directed path between two symbols&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;detect_changes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Git-diff impact — maps changed lines to affected processes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rename&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Multi-file coordinated rename using graph + text search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cypher&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Raw Cypher queries against the graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;route_map&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Which components fetch which API endpoints, and the handlers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;shape_check&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Validates API response shapes against consumers' property access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;api_impact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pre-change impact report for a route handler&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;shape_check&lt;/code&gt; deserves a callout because it catches a specific, expensive bug class: the backend changes a response field, the frontend keeps reading the old property, nothing fails at build time, and it breaks in production. Checking response shapes against actual consumer property accesses is exactly the kind of cross-boundary reasoning agents are bad at unaided.&lt;/p&gt;

&lt;p&gt;Index with &lt;code&gt;--pdg&lt;/code&gt; and you unlock two more: &lt;code&gt;pdg_query&lt;/code&gt; for statement-level control and data dependence, and &lt;code&gt;explain&lt;/code&gt; for taint analysis — tracing source-to-sink data flows. That is genuine program-dependence-graph territory, not just a call graph.&lt;/p&gt;

&lt;p&gt;Alongside tools, GitNexus exposes MCP &lt;strong&gt;resources&lt;/strong&gt; (&lt;code&gt;gitnexus://repos&lt;/code&gt;, &lt;code&gt;gitnexus://repo/{name}/clusters&lt;/code&gt;, &lt;code&gt;.../processes&lt;/code&gt;, &lt;code&gt;.../schema&lt;/code&gt;) and &lt;strong&gt;prompts&lt;/strong&gt; (&lt;code&gt;detect_impact&lt;/code&gt; for pre-commit analysis, &lt;code&gt;generate_map&lt;/code&gt; for architecture docs with mermaid diagrams).&lt;/p&gt;

&lt;h2&gt;
  
  
  The skills layer
&lt;/h2&gt;

&lt;p&gt;This is where GitNexus goes further than its peers. Beyond static tools, it installs slash-command skills that chain them into workflows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/gitnexus-plan&lt;/code&gt; — implementation-ready engineering plans backed by the graph and PDG slices&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/gitnexus-work&lt;/code&gt; — executes a plan as impact-checked, &lt;code&gt;detect_changes&lt;/code&gt;-gated atomic commits&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/gitnexus-review&lt;/code&gt; — graph-backed review of a PR, branch, or local diff, with a taint pass&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/gitnexus-lfg&lt;/code&gt; — the full pipeline: plan → user gate → work → review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The genuinely clever piece is &lt;strong&gt;repo-specific generated skills&lt;/strong&gt;. Run &lt;code&gt;gitnexus analyze --skills&lt;/code&gt; and GitNexus applies Leiden community detection to find the functional areas of your codebase, then writes each one as a project skill under &lt;code&gt;.claude/skills/gitnexus-area-&amp;lt;name&amp;gt;/&lt;/code&gt;. Each generated skill documents that module's key files, entry points, execution flows, and cross-area connections — and gets regenerated on every &lt;code&gt;--skills&lt;/code&gt; run, so it doesn't rot the way hand-written docs do.&lt;/p&gt;

&lt;p&gt;If the repo has an &lt;code&gt;.agents/&lt;/code&gt; directory, the skills are mirrored to &lt;code&gt;.agents/skills/&lt;/code&gt; so tools like Codex that read repo-local skills stay in sync.&lt;/p&gt;

&lt;h2&gt;
  
  
  CLI versus browser
&lt;/h2&gt;

&lt;p&gt;There are two ways to run GitNexus, and they are not equivalent.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;CLI + MCP&lt;/th&gt;
&lt;th&gt;Web UI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;For&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Daily development in your editor&lt;/td&gt;
&lt;td&gt;Quick exploration, demos, one-offs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scale&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full repos, any size&lt;/td&gt;
&lt;td&gt;~5,000 files (browser memory)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LadybugDB native, persistent&lt;/td&gt;
&lt;td&gt;LadybugDB WASM, per-session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Parsing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tree-sitter native bindings&lt;/td&gt;
&lt;td&gt;Tree-sitter WASM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm install -g gitnexus&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;None — &lt;a href="https://gitnexus.vercel.app/" rel="noopener noreferrer"&gt;gitnexus.vercel.app&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The web UI answers "what is this repo?" about someone else's project in ninety seconds. But the CLI is the real tool. &lt;code&gt;gitnexus serve&lt;/code&gt; bridges the two — the web UI auto-detects a local server and browses your CLI-indexed repos without re-indexing.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it compares
&lt;/h2&gt;

&lt;p&gt;GitNexus's own positioning is "like DeepWiki, but deeper" — DeepWiki helps you &lt;em&gt;understand&lt;/em&gt; code, GitNexus lets you &lt;em&gt;analyze&lt;/em&gt; it, because a graph tracks relationships rather than descriptions.&lt;/p&gt;

&lt;p&gt;Against the tools we've reviewed here, the distinction is retrieval strategy. &lt;a href="https://dev.to/posts/claude-context-mcp-semantic-code-search-review/"&gt;Claude Context&lt;/a&gt; does semantic search over embeddings — great for "where is the thing that does X," weaker for "what else touches it." &lt;a href="https://dev.to/posts/graft-nanonets-code-graph-coding-agents-review/"&gt;Graft&lt;/a&gt; builds a code graph with a similar thesis but a lighter tool surface. &lt;a href="https://dev.to/posts/serena-mcp-coding-agent-ide-review/"&gt;Serena&lt;/a&gt; works through LSP symbols, which gives precise definitions and references but no clustering or execution-flow modeling.&lt;/p&gt;

&lt;p&gt;GitNexus is the heaviest of the four: slowest to index, most to install, and by some distance the most it can tell you. That trade scales with codebase size. On a 5,000-line project, ripgrep and a good model are fine. On a 500,000-line monolith where nobody remembers what calls what, the graph is the point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limitations
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;It is not open source.&lt;/strong&gt; This is the headline caveat and it is easy to miss, because the project is described as open source nearly everywhere it is discussed — including in the Reddit and press coverage. The &lt;code&gt;LICENSE&lt;/code&gt; file is the &lt;strong&gt;PolyForm Noncommercial License 1.0.0&lt;/strong&gt;, which grants rights only "for any permitted purpose," and permitted purposes exclude commercial use. Personal projects, research, and evaluation are fine. Indexing your employer's codebase is not, absent a commercial license from &lt;a href="https://akonlabs.com/" rel="noopener noreferrer"&gt;Akon Labs&lt;/a&gt;. GitHub's own license detector returns &lt;code&gt;NOASSERTION&lt;/code&gt; for the repo, which is why so much downstream coverage assumes MIT. Check with whoever owns licensing at your company before you run &lt;code&gt;analyze&lt;/code&gt; on work code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Indexing is memory-bound.&lt;/strong&gt; On large repositories the indexer is the constraint. The project's own Render blueprint notes that if the server OOMs you need a bigger plan — standard gives 2 GB, pro gives 4 GB. Locally this means a big monorepo can be an unpleasant first run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hosted deploy has a thin security story.&lt;/strong&gt; The one-click Render blueprint costs about &lt;strong&gt;$35/month&lt;/strong&gt; ($25 server + $7 web + $2.50 for a 10 GB disk) and protects everything with a single &lt;code&gt;GITNEXUS_SERVE_AUTH_TOKEN&lt;/code&gt;. The web proxy strips &lt;code&gt;Origin&lt;/code&gt; before forwarding, which means the server's CSRF guard does nothing for proxied traffic by design. The token is the only control, and anyone holding it can read every indexed repo. That is documented honestly in &lt;code&gt;SECURITY.md&lt;/code&gt;, but it means the hosted path is not a multi-tenant story.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install has sharp edges behind a proxy.&lt;/strong&gt; &lt;code&gt;onnxruntime-node&lt;/code&gt;'s postinstall fetches optional CUDA binaries from &lt;code&gt;api.nuget.org&lt;/code&gt; and ignores &lt;code&gt;HTTP_PROXY&lt;/code&gt;/&lt;code&gt;HTTPS_PROXY&lt;/code&gt; (&lt;a href="https://github.com/abhigyanpatwari/GitNexus/issues/2370" rel="noopener noreferrer"&gt;issue #2370&lt;/a&gt;). It no longer breaks installs — the embedding stack is optional and self-heals on first &lt;code&gt;gitnexus analyze --embeddings&lt;/code&gt; — but that path needs Node ≥ 22.15 (22.x) or ≥ 23.5 (23.x). On older Node, install with &lt;code&gt;ONNXRUNTIME_NODE_INSTALL=skip&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;320 open issues.&lt;/strong&gt; Fast-moving project, large surface area. The README's install-notes section is unusually long — both a good sign (documented) and a warning (they exist).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Codex needs care.&lt;/strong&gt; Newly installed hooks need one-time approval via &lt;code&gt;/hooks&lt;/code&gt;, and you must pick &lt;em&gt;one&lt;/em&gt; install route — plugin hooks load alongside &lt;code&gt;~/.codex/hooks.json&lt;/code&gt;, so installing both fires duplicate hooks on every tool call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A scam warning worth repeating.&lt;/strong&gt; The README opens by stating GitNexus has no official cryptocurrency or token, and anything using the name on Pump.fun is unaffiliated. At 47,000 stars, impersonation follows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who should use it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Good fit:&lt;/strong&gt; large, unfamiliar, or long-lived codebases; agents that keep breaking things three modules away; refactors where you want blast-radius analysis first; architecture docs that regenerate instead of rotting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Poor fit:&lt;/strong&gt; projects small enough to hold in context; anyone needing a permissive license for commercial use; constrained machines where indexing cost outweighs the benefit.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is GitNexus free?&lt;/strong&gt;&lt;br&gt;
Free to download and use for noncommercial purposes. It is licensed under PolyForm Noncommercial 1.0.0, not an OSI-approved open source license, so commercial use at a company requires a separate license from Akon Labs. Much of the coverage online calls it "open source" — that framing is inaccurate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is this different from semantic code search?&lt;/strong&gt;&lt;br&gt;
Semantic search retrieves code that resembles your query. GitNexus answers structural questions — what calls this, what breaks if I change it, what path connects these two symbols — from a graph of actual relationships. They solve different problems and can be used together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which AI coding tools does it support?&lt;/strong&gt;&lt;br&gt;
Claude Code, Cursor, Codex, Cline, Roo Code, Windsurf, Antigravity, and OpenCode are all auto-detected by &lt;code&gt;gitnexus setup&lt;/code&gt;. Anything that speaks MCP can use the server; you can also write the config manually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I have to re-index when I change branches?&lt;/strong&gt;&lt;br&gt;
No. Omitting the &lt;code&gt;branch&lt;/code&gt; parameter queries the workspace index, which follows your checked-out working tree. Switching branches and re-running &lt;code&gt;gitnexus analyze&lt;/code&gt; updates it incrementally. You can also pin dedicated indexes with &lt;code&gt;gitnexus analyze --branch&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does my code leave my machine?&lt;/strong&gt;&lt;br&gt;
In CLI mode, no — indexing and storage are local, in LadybugDB. The web UI runs entirely in-browser with WASM. The exception is the hosted Render deploy, where indexed repos live on that server and are protected by a single shared token.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the &lt;code&gt;--pdg&lt;/code&gt; flag for?&lt;/strong&gt;&lt;br&gt;
It builds a program dependence graph alongside the knowledge graph, enabling &lt;code&gt;pdg_query&lt;/code&gt; for statement-level control and data dependence, and &lt;code&gt;explain&lt;/code&gt; for taint analysis showing source-to-sink data flows. It makes indexing slower, so it is opt-in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;GitNexus is the most complete implementation of "give the agent a map" that we have looked at. The precomputed-intelligence design is the right instinct — moving graph traversal from inference time to index time is what makes the results reliable rather than merely available, and the generated per-area skills are a genuinely novel idea that other tools should copy.&lt;/p&gt;

&lt;p&gt;The reservations are practical rather than architectural. It is heavy, the install has real sharp edges, and — most importantly — the noncommercial license means a large share of the developers reading about it cannot legally use it for the work where it would help most. That is the project's choice to make, and the enterprise offering is presumably the business model. But it should be stated plainly, because almost nobody else covering this tool is stating it at all.&lt;/p&gt;

&lt;p&gt;If you are working on personal projects in a large codebase, index it today. If you are at a company, talk to legal first.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/abhigyanpatwari/GitNexus" rel="noopener noreferrer"&gt;GitNexus on GitHub&lt;/a&gt; — README, tool reference, install notes, and &lt;code&gt;SECURITY.md&lt;/code&gt; (v1.6.10, August 27, 2026)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://polyformproject.org/licenses/noncommercial/1.0.0/" rel="noopener noreferrer"&gt;PolyForm Noncommercial License 1.0.0&lt;/a&gt; — the license in the repo's &lt;code&gt;LICENSE&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.reddit.com/r/mcp/comments/1qpp5hl/building_opensource_zero_server_code_intelligence/" rel="noopener noreferrer"&gt;r/mcp — "Building opensource Zero Server Code Intelligence Engine"&lt;/a&gt; — maintainer's launch thread&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.reddit.com/r/vibecoding/comments/1tf1kxc/anyone_using_gitnexus_or_codegraph_for_codebase/" rel="noopener noreferrer"&gt;r/vibecoding — GitNexus vs Codegraph for codebase context&lt;/a&gt; — user reports on token savings and smaller-model performance&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.marktechpost.com/2026/04/24/meet-gitnexus-an-open-source-mcp-native-knowledge-graph-engine-that-gives-claude-code-and-cursor-full-codebase-structural-awareness/" rel="noopener noreferrer"&gt;MarkTechPost — MCP-native knowledge graph engine&lt;/a&gt; — independent coverage of the architecture&lt;/li&gt;
&lt;li&gt;GitHub REST API — star, fork, and issue counts as of September 4, 2026&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gitnexus</category>
      <category>knowledgegraph</category>
      <category>graphrag</category>
      <category>mcp</category>
    </item>
    <item>
      <title>OpenSEO Review: The Open-Source Ahrefs Your Agent Uses</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Thu, 03 Sep 2026 10:11:56 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/openseo-review-the-open-source-ahrefs-your-agent-uses-5lm</link>
      <guid>https://dev.to/andrew-ooo/openseo-review-the-open-source-ahrefs-your-agent-uses-5lm</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/openseo-review-open-source-ahrefs-alternative-mcp/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OpenSEO&lt;/strong&gt; is an MIT-licensed SEO platform that positions itself as the open-source alternative to Semrush and Ahrefs. It sits at roughly &lt;strong&gt;16,500 stars&lt;/strong&gt; and &lt;strong&gt;2,000 forks&lt;/strong&gt; after being created on &lt;strong&gt;February 27, 2026&lt;/strong&gt;, shipped &lt;strong&gt;v0.1.7 on September 2, 2026&lt;/strong&gt;, and has been climbing GitHub trending through early September. The short version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It is not a crawler.&lt;/strong&gt; OpenSEO is a UI, workflow engine, and MCP server on top of &lt;a href="https://dataforseo.com" rel="noopener noreferrer"&gt;DataForSEO&lt;/a&gt;. You bring your own API key and pay per query. Understanding that one fact resolves most of the arguments about it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The MCP server is the actual product.&lt;/strong&gt; ~20 tools covering keyword research, SERPs, backlinks, rank tracking, domain footprints, local/Maps rank grids, and first-party Google Search Console data — callable from Claude Code, Cursor, Codex, and Claude Desktop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nine Agent Skills&lt;/strong&gt; ship alongside the MCP, so your agent knows &lt;em&gt;how&lt;/em&gt; to run keyword clustering or link prospecting, not just which endpoint to hit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosting is genuinely free&lt;/strong&gt; — Docker or Cloudflare Workers (works on Cloudflare's free plan). The hosted version is &lt;strong&gt;$10/month including $10 of usage&lt;/strong&gt;, funded by a ~28% markup on DataForSEO calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real cost math:&lt;/strong&gt; ~$0.05 per keyword search, ~$0.08 per backlink domain overview, ~$1.09 per ChatGPT brand-visibility check. Ahrefs' cheapest plan is $129/month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The honest catches:&lt;/strong&gt; Docker self-hosting runs with &lt;strong&gt;authentication disabled&lt;/strong&gt; by default, DataForSEO's minimum top-up is &lt;strong&gt;$50&lt;/strong&gt;, it's pre-1.0 with 135 open issues, and the architecture is Cloudflare-shaped in ways that matter if you host elsewhere.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What OpenSEO actually is
&lt;/h2&gt;

&lt;p&gt;The origin story is refreshingly literal. The maintainer, &lt;a href="https://x.com/bensenescu" rel="noopener noreferrer"&gt;Ben Senescu&lt;/a&gt; of Every App, &lt;a href="https://www.reddit.com/r/TechSEO/comments/1r7qifp/open_source_seo_tool_that_uses_your_own/" rel="noopener noreferrer"&gt;posted in r/TechSEO&lt;/a&gt; asking whether an open-source tool wrapping DataForSEO would be useful. People said yes. He posted the working build the following week.&lt;/p&gt;

&lt;p&gt;That framing — &lt;em&gt;a wrapper, deliberately&lt;/em&gt; — is the key to evaluating it fairly. Ahrefs and Semrush are expensive largely because they operate their own web crawlers and maintain proprietary link indexes. That is a capital-intensive moat, and no MIT-licensed weekend project is going to replicate it.&lt;/p&gt;

&lt;p&gt;OpenSEO doesn't try. It rents the data layer from DataForSEO — which the &lt;a href="https://www.producthunt.com/products/openseo" rel="noopener noreferrer"&gt;Product Hunt discussion&lt;/a&gt; describes as "the gold standard for backlinks + keyword data outside of Ahrefs and Semrush" — and competes on the two layers above it: &lt;strong&gt;workflow design&lt;/strong&gt; and &lt;strong&gt;agent access&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The README's own pitch is blunt about the target user:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;OpenSEO is an SEO tool for &lt;em&gt;the people&lt;/em&gt;. If tools like Semrush or Ahrefs are too expensive or bloated, OpenSEO is a pay-as-you-go alternative that you actually control.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The core workflows are keyword research, rank tracking, competitor insights, backlinks, site audits, and AI visibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  The economics, concretely
&lt;/h2&gt;

&lt;p&gt;This is where OpenSEO makes its strongest argument, so it's worth putting real numbers on the table. From the project's own &lt;a href="https://openseo.so/pricing" rel="noopener noreferrer"&gt;pricing estimator&lt;/a&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;Approximate cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Keyword search (typical result limits)&lt;/td&gt;
&lt;td&gt;~$0.05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backlink domain overview (1 year history)&lt;/td&gt;
&lt;td&gt;~$0.08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChatGPT brand-visibility check&lt;/td&gt;
&lt;td&gt;~$1.09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rank tracking&lt;/td&gt;
&lt;td&gt;fractions of a cent per keyword check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Search Console data&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;free&lt;/strong&gt; — first-party, no credits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A worked example from their estimator: 100 keyword searches, 20 backlink checks, and weekly rank tracking on 50 keywords lands around &lt;strong&gt;$7.12/month&lt;/strong&gt; of usage — comfortably inside the $10 that the hosted Base Plan already includes.&lt;/p&gt;

&lt;p&gt;Against Ahrefs' entry plan at $129/month, that's an order of magnitude. But the comparison only holds for a specific user: someone doing &lt;strong&gt;bursty, project-shaped research&lt;/strong&gt; rather than continuous large-scale monitoring. Run enough site audits or ChatGPT brand checks and pay-as-you-go stops being cheap — that's the nature of metered billing, and it cuts both ways.&lt;/p&gt;

&lt;p&gt;Two caveats the marketing page doesn't lead with:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;DataForSEO's minimum top-up is $50.&lt;/strong&gt; New accounts get $1 of free credit to test. So "pay only for what you use" has a $50 on-ramp when self-hosting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosting is free; the hosted version requires an active subscription.&lt;/strong&gt; Top-up credits roll over indefinitely, but the $10 of included monthly usage resets each cycle.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Getting it running
&lt;/h2&gt;

&lt;p&gt;Two supported paths, and the docs are opinionated about which to pick.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker&lt;/strong&gt; — for trying it on your own machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/every-app/open-seo
&lt;span class="nb"&gt;cd &lt;/span&gt;open-seo
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;span class="c"&gt;# set DATAFORSEO_API_KEY in .env&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It pulls &lt;code&gt;ghcr.io/every-app/open-seo:latest&lt;/code&gt; and serves on port &lt;code&gt;3001&lt;/code&gt; (first start takes 1–2 minutes). Follow along with &lt;code&gt;docker compose logs -f&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read this before exposing it anywhere.&lt;/strong&gt; Docker mode sets &lt;code&gt;AUTH_MODE=local_noauth&lt;/code&gt; — no auth checks at all, with a local admin user &lt;code&gt;admin@localhost&lt;/code&gt;. The compose file binds to &lt;code&gt;127.0.0.1&lt;/code&gt; by design. The docs are explicit:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Only expose it behind your own auth-protected reverse proxy, tunnel, or private network.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's a sane default for local use and a genuine footgun if you casually stick it behind a tunnel. If you want internet-facing multi-device access, the project steers you to the &lt;strong&gt;Cloudflare&lt;/strong&gt; path instead, which provisions Cloudflare Access and gates sign-in on an allowlist:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# .env.selfhost&lt;/span&gt;
&lt;span class="nv"&gt;DATAFORSEO_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="nv"&gt;ACCESS_ALLOWED_EMAILS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;you@example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Optional keys unlock the rest: &lt;code&gt;GOOGLE_CLIENT_ID&lt;/code&gt; / &lt;code&gt;GOOGLE_CLIENT_SECRET&lt;/code&gt; / &lt;code&gt;BETTER_AUTH_SECRET&lt;/code&gt; for Google Search Console, and &lt;code&gt;OPENROUTER_API_KEY&lt;/code&gt; for SAM, the in-app SEO agent (hidden entirely if unset).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On telemetry:&lt;/strong&gt; OpenSEO sends anonymized heartbeats — aggregate install/user/project/feature counts against a random install ID, every 5 minutes for the first two hours, then at most daily. The docs state that no URLs, keywords, prompts, emails, or IP-derived location are collected, and idle installs send nothing. Opt out with &lt;code&gt;OPENSEO_TELEMETRY_DISABLED=1&lt;/code&gt; or the standard &lt;code&gt;DO_NOT_TRACK=1&lt;/code&gt;, then force-recreate the container. Documented and easy to disable is about as good as telemetry gets.&lt;/p&gt;

&lt;h2&gt;
  
  
  The MCP layer is the real differentiator
&lt;/h2&gt;

&lt;p&gt;Plenty of projects wrap DataForSEO. What makes OpenSEO interesting in late 2026 is that it was built &lt;strong&gt;MCP-first&lt;/strong&gt; rather than bolting an API onto a dashboard.&lt;/p&gt;

&lt;p&gt;Connecting Claude Code is one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http &lt;span class="nt"&gt;--scope&lt;/span&gt; user openseo https://app.openseo.so/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cursor takes the usual &lt;code&gt;mcp.json&lt;/code&gt; entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"openseo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://app.openseo.so/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Codex CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex mcp add openseo &lt;span class="nt"&gt;--url&lt;/span&gt; https://app.openseo.so/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For CI and headless environments, API keys work instead of OAuth:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;OPENSEO_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;oseo_YOUR_KEY
codex mcp add openseo &lt;span class="nt"&gt;--url&lt;/span&gt; https://app.openseo.so/mcp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--bearer-token-env-var&lt;/span&gt; OPENSEO_API_KEY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note the security posture the docs state plainly: &lt;strong&gt;API keys are personal — anything an agent does with your key acts as you in your workspace.&lt;/strong&gt; Scope accordingly before wiring one into an unattended pipeline.&lt;/p&gt;

&lt;p&gt;The exposed toolset is broader than "keyword lookup." It covers live Google organic SERPs, exact keyword/page/rank/volume/CPC/intent rows for a domain, SERP competitor comparison across a keyword set, backlink and referring-domain overviews, saved-keyword management, rank tracker configs, and a surprisingly deep local-SEO block — Maps and Local Finder SERPs, Google Business Profile audits, review collection, category-slug lookup, and &lt;strong&gt;Maps rank at each point of a geographic grid&lt;/strong&gt; around a business.&lt;/p&gt;

&lt;p&gt;Two tools stand out for agent workflows specifically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Search Console&lt;/strong&gt; — performance data (clicks, impressions, CTR, position) plus URL inspection for index status, crawl, and canonical, up to 10 URLs per call. First-party, and it doesn't consume credits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project context&lt;/strong&gt; — a shared, free, credit-less store for business description, goals, positioning, writing preferences, competitors, key pages, and a research log. Your agent reads and writes it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one is the quiet good idea. The failure mode of agentic SEO is an agent that re-derives your positioning from scratch on every invocation and produces subtly inconsistent recommendations. A persistent context object that every skill reads from is the right structural fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent Skills: telling the agent &lt;em&gt;how&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;MCP gives an agent access to data. It doesn't teach judgment. OpenSEO ships &lt;strong&gt;nine Agent Skills&lt;/strong&gt; — &lt;code&gt;SKILL.md&lt;/code&gt; files following the open Agent Skills standard — for that second half.&lt;/p&gt;

&lt;p&gt;The Claude Code and Codex plugins install MCP and all nine skills together, which is the recommended path over adding MCP alone. The skills cover SEO project setup, an SEO coach for people who don't know which workflow to run, keyword research, competitive landscape mapping, single-competitor analysis, keyword clustering, and link prospecting.&lt;/p&gt;

&lt;p&gt;The docs give one piece of advice worth repeating for any agent tooling:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Start with one focused workflow instead of asking your agent to "do SEO" broadly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Under the hood the repo is a modern Cloudflare-native TypeScript stack: TanStack Start and Router, Drizzle ORM, better-auth, Cloudflare Workers with an Alchemy deployment layer, daisyUI, recharts, and OpenRouter for the AI features. Roughly 17 contributors, 36 documented release notes, and a Playwright e2e suite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limitations
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;It's a client, not an index.&lt;/strong&gt; No proprietary crawler, no independent link graph. Your data quality ceiling is DataForSEO's. If you specifically need Ahrefs' link index, this is not a substitute at any price.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker mode ships without auth.&lt;/strong&gt; Documented, deliberate, and still the most likely way someone gets burned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's pre-1.0.&lt;/strong&gt; Version 0.1.7, 135 open issues. A commenter in &lt;a href="https://www.reddit.com/r/SEO/comments/1u9jzfu/open_seo_dataforseo/" rel="noopener noreferrer"&gt;r/SEO&lt;/a&gt; noted that "the issue for me was the amount of dependency issues it had at the time" and went with a paid alternative — though that was an earlier build, and the release cadence since has been brisk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The $50 DataForSEO floor&lt;/strong&gt; undercuts the pay-as-you-go pitch for anyone wanting to spend $5 and stop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloudflare-shaped architecture.&lt;/strong&gt; The docs recommend Cloudflare over Railway, Coolify, or Dokploy unless you're already confident self-hosting, and note that broader platform support is planned "in the next few months." Workers-oriented dependencies mean this is not a drop-in for an arbitrary VPS today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Volume without filtering is noise.&lt;/strong&gt; A Reddit commenter pushed back on 100-related-keyword expansions: "I used a similar keyword expansion tool once and ended up spending more time filtering than actually building pages. If it's research-only, keep it tight and focus on intent, not just volume." That's a critique of the whole category, but it applies here — and it's exactly where the clustering skill has to earn its keep.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ChatGPT brand checks are the expensive button.&lt;/strong&gt; At ~$1.09 each, a daily automated check across a keyword set is a real line item. Budget it deliberately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is actually for
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Good fit:&lt;/strong&gt; indie hackers, founders, and small teams who need real keyword and backlink data a few times a month and can't justify $129/month. Anyone running an agentic content pipeline who wants their coding agent to query SEO data directly. Teams already pushing volume through DataForSEO — as one Product Hunt commenter put it, self-hosting becomes "a real cost-control lever" when you're not paying twice for the same data. And anyone who wants to fork it: the README openly invites you to "fork and vibe code your own custom tool."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Poor fit:&lt;/strong&gt; agencies needing enterprise reporting, white-labeling, and SLAs. Anyone dependent on Ahrefs' specific link index. Teams without someone comfortable running Docker or Cloudflare Workers. High-volume continuous monitoring, where metered billing loses to a flat subscription.&lt;/p&gt;

&lt;p&gt;The strategic read: OpenSEO is a bet that the SEO tool of 2027 is not a dashboard you log into, but a data layer your agent queries while it writes. On that axis it's ahead of the incumbents — and it's the reason a pre-1.0 project cleared 16,000 stars in six months.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is OpenSEO really free?&lt;/strong&gt;&lt;br&gt;
The software is MIT-licensed and free to self-host. The data isn't — you need a DataForSEO API key and pay them per query ($1 free credit to start, $50 minimum top-up after). The hosted version is $10/month including $10 of usage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is it cheaper than Ahrefs?&lt;/strong&gt;&lt;br&gt;
It doesn't operate a crawler or link index. It resells DataForSEO metered per call, so you pay for the queries you make instead of a flat $129/month for capacity you may not use. Heavy continuous use erodes that advantage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can Claude Code actually use it?&lt;/strong&gt;&lt;br&gt;
Yes — that's the headline feature. &lt;code&gt;claude mcp add --transport http --scope user openseo https://app.openseo.so/mcp&lt;/code&gt; connects it, and the Claude Code plugin adds MCP plus all nine Agent Skills in one install. Cursor, Codex CLI, and Claude Desktop are also supported.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is self-hosted OpenSEO safe to expose to the internet?&lt;/strong&gt;&lt;br&gt;
Not the Docker path as shipped — it runs &lt;code&gt;AUTH_MODE=local_noauth&lt;/code&gt; with no auth checks. Put it behind your own authenticated reverse proxy or private network, or use the Cloudflare path, which provisions Cloudflare Access with an email allowlist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it send my data anywhere?&lt;/strong&gt;&lt;br&gt;
Anonymized telemetry only: aggregate counts against a random install ID. The docs state no URLs, keywords, prompts, emails, or location data are collected. Disable with &lt;code&gt;OPENSEO_TELEMETRY_DISABLED=1&lt;/code&gt; or &lt;code&gt;DO_NOT_TRACK=1&lt;/code&gt;. Your SEO queries go to DataForSEO, since that's where the data comes from.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it production-ready?&lt;/strong&gt;&lt;br&gt;
For a solo operator or small team, yes with caveats — it's at v0.1.7 with 135 open issues and active weekly releases. For agency work with client SLAs, wait for 1.0.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/every-app/open-seo" rel="noopener noreferrer"&gt;every-app/open-seo on GitHub&lt;/a&gt; — README, license, release history (v0.1.7, September 2, 2026)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openseo.so/docs/mcp" rel="noopener noreferrer"&gt;OpenSEO MCP documentation&lt;/a&gt; — client setup, full tool list, API key auth&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/every-app/open-seo/blob/main/docs/SELF_HOSTING_DOCKER.md" rel="noopener noreferrer"&gt;Docker self-hosting guide&lt;/a&gt; — auth mode, telemetry, image pinning&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openseo.so/pricing" rel="noopener noreferrer"&gt;OpenSEO pricing estimator&lt;/a&gt; — per-operation costs and the 28% hosted markup&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.reddit.com/r/TechSEO/comments/1rh9jn6/open_source_semrush_alternative_built_on/" rel="noopener noreferrer"&gt;r/TechSEO launch thread&lt;/a&gt; and &lt;a href="https://www.producthunt.com/products/openseo" rel="noopener noreferrer"&gt;Product Hunt discussion&lt;/a&gt; — community reactions&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>openseo</category>
      <category>seotools</category>
      <category>ahrefsalternative</category>
      <category>semrushalternative</category>
    </item>
    <item>
      <title>Colibri Review: Run a 744B Model on Hardware You Own</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Wed, 02 Sep 2026 10:11:02 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/colibri-review-run-a-744b-model-on-hardware-you-own-4ghi</link>
      <guid>https://dev.to/andrew-ooo/colibri-review-run-a-744b-model-on-hardware-you-own-4ghi</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/colibri-run-744b-moe-consumer-hardware-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Colibrì&lt;/strong&gt; is a pure-C inference engine that runs frontier Mixture-of-Experts models — 744B to 2.8T parameters — on hardware you already own, by treating VRAM, RAM, and NVMe as one memory hierarchy instead of one memory requirement. It went from first commit on &lt;strong&gt;2026-07-01&lt;/strong&gt; to &lt;strong&gt;26,662 stars&lt;/strong&gt; in two months.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;26,662 stars&lt;/strong&gt;, 2,920 forks, &lt;strong&gt;Apache-2.0&lt;/strong&gt;, written in &lt;strong&gt;C&lt;/strong&gt; with zero engine dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eight model families&lt;/strong&gt; run today: GLM-5.2 (744B), Inkling (975B), Kimi K3 (2.8T), GLM-5.3-Flash (321B, vision), DeepSeek V4 Flash (284B), Qwen3.8-Flash-Next (125B), Qwen3.6 (35B-A3B), OLMoE (7B)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No GPU required&lt;/strong&gt; for any of them — a GPU only ever makes it faster&lt;/li&gt;
&lt;li&gt;The trick: a 744B MoE activates only ~40B params per token, and only &lt;strong&gt;~11 GB changes&lt;/strong&gt; between tokens&lt;/li&gt;
&lt;li&gt;Real measured range: &lt;strong&gt;0.05 tok/s&lt;/strong&gt; on a 25 GB dev box, &lt;strong&gt;~1.8 tok/s&lt;/strong&gt; on a 128 GB CPU desktop, &lt;strong&gt;5.8–6.8 tok/s&lt;/strong&gt; on 6× RTX 5090&lt;/li&gt;
&lt;li&gt;The catch: you need &lt;strong&gt;372 GB&lt;/strong&gt; of disk for GLM-5.2 (1.6 TB for Kimi K3), and decode speed is set by your SSD&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not a way to get ChatGPT speeds for free. It is a way to &lt;em&gt;hold&lt;/em&gt; a frontier model instead of renting one — and to watch every expert fire while it answers you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Repo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/JustVugg/colibri" rel="noopener noreferrer"&gt;JustVugg/colibri&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Site&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://justvugg.github.io/colibri" rel="noopener noreferrer"&gt;justvugg.github.io/colibri&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;C (single file per engine)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Created&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2026-07-01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Latest release&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;v1.10.1 (2026-08-31)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stars / forks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;26,662 / 2,920&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open issues&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;97&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Runtime deps&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;none (Python only for the converter and API gateway)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reference model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GLM-5.2 int4-gs64, ~372 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Core Idea: Placement, Not Residency
&lt;/h2&gt;

&lt;p&gt;Every "you need 8× H100" claim assumes the whole model must sit in fast memory at once. For a Mixture-of-Experts model, that assumption is wrong in an exploitable way: GLM-5.2 has 744B total parameters but activates roughly 40B per token — about &lt;strong&gt;5.4%&lt;/strong&gt;. Colibrì splits the model along that line:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;dense part&lt;/strong&gt; (attention, shared experts, embeddings — ~17B params) stays &lt;strong&gt;resident in RAM at int4&lt;/strong&gt;, about &lt;strong&gt;9.9 GB&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;19,456 routed experts&lt;/strong&gt; (75 MoE layers × 256, plus the MTP head, ~19 MB each at int4) live &lt;strong&gt;on disk&lt;/strong&gt; — ~370 GB — and get streamed on demand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The README's framing is the clearest one I've seen: think of it as &lt;strong&gt;a JIT, but for weights&lt;/strong&gt;. A compiler JIT never compiles the whole program; it watches what actually runs and compiles the hot paths just in time. Colibrì makes the same bet about a 744B parameter space — parameters are not resident state to be held, they are &lt;em&gt;data to be staged&lt;/em&gt; across VRAM/RAM/NVMe exactly when the router proves they're needed.&lt;/p&gt;

&lt;p&gt;The load-bearing commitment: &lt;strong&gt;placement only ever decides speed&lt;/strong&gt;. Insufficient fast memory makes it slower; it must never quietly redefine the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes It Fast Enough to Bother
&lt;/h2&gt;

&lt;p&gt;A naive "read the expert when you need it" loop would be unusable. Most of the engine's cleverness goes into avoiding and overlapping disk misses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Batch-union reads.&lt;/strong&gt; Each expert's three matrices are stored adjacent and read in one &lt;code&gt;pread&lt;/code&gt;; batched positions read each unique expert once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Router lookahead&lt;/strong&gt; (&lt;code&gt;PILOT=1&lt;/code&gt;). A thread runs the router one layer ahead and prefetches. Routing is measurably &lt;strong&gt;71.6% predictable one layer ahead&lt;/strong&gt; — that predictability is the whole reason this works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A learning cache.&lt;/strong&gt; The engine records which experts &lt;em&gt;your&lt;/em&gt; workload routes to in &lt;code&gt;.coli_usage&lt;/code&gt;, updated every turn, and pins the hottest automatically. It literally gets faster the more you use it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;O(1) expert lookup&lt;/strong&gt; (v1.8.0). A resident hit is one probe where the legacy worst case was 44 to 219.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;O_DIRECT&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;DIRECT=1&lt;/code&gt;). Bypasses the page cache: &lt;strong&gt;+34% decode&lt;/strong&gt; measured on a Blackwell/Windows box, 4.25 → 9.69 GB/s in iobench on a GB10. Drive-dependent — QLC and DRAM-less disks can be neutral or negative.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dual-SSD striping.&lt;/strong&gt; Put a second full copy of the model on a second drive and stream from both. A 9 GB/s + 3 GB/s pair reads experts ~33% faster than the fast drive alone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one has a nice failure model. The mirror is validated at startup (byte-identical safetensors headers), never written to, and a read error falls back to the primary with one warning — so unplugging the second drive mid-run degrades instead of killing the server. A &lt;strong&gt;partial&lt;/strong&gt; mirror is fine too: &lt;code&gt;coli mirror plan / stage / verify&lt;/code&gt; ranks which shards to copy from the expert history the engine already learned.&lt;/p&gt;

&lt;p&gt;MLA attention also stores &lt;strong&gt;576 floats/token instead of 32,768&lt;/strong&gt; (57× smaller) and persists it to &lt;code&gt;.coli_kv&lt;/code&gt;, so conversations reopen warm with zero re-prefill, byte-identical to an uninterrupted session.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting It Running
&lt;/h2&gt;

&lt;p&gt;You need two things: the program (a few hundred KB) and the model (372 GB).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get the engine&lt;/strong&gt; — prebuilt archives exist for Linux, macOS, and Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;colibri &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;tar &lt;/span&gt;xzf colibri-v1.10.1-linux-x86_64.tar.gz &lt;span class="nt"&gt;-C&lt;/span&gt; colibri &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;colibri
python3 coli info                          &lt;span class="c"&gt;# engine ready ✓&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or build from source, which needs &lt;code&gt;gcc&lt;/code&gt; (or clang) with OpenMP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/JustVugg/colibri &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;colibri/c
./setup.sh                                 &lt;span class="c"&gt;# checks gcc/OpenMP, builds, self-tests&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Get the model.&lt;/strong&gt; Use the group-scaled (gs64) container with the int8 MTP head:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://huggingface.co/mastouri/GLM-5.2-colibri-int4-g64-with-int8-mtp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or convert from the FP8 source with &lt;code&gt;./coli convert --model /nvme/glm52_i4&lt;/code&gt; — one resumable command that never needs the full 756 GB on disk at once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run it:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;COLI_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/nvme/glm52_i4 ./coli chat      &lt;span class="c"&gt;# TUI; RAM budget, cache, MTP auto-detected&lt;/span&gt;
&lt;span class="nv"&gt;COLI_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/nvme/glm52_i4 ./coli plan      &lt;span class="c"&gt;# inspect planned VRAM/RAM/disk placement&lt;/span&gt;
&lt;span class="nv"&gt;COLI_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/nvme/glm52_i4 ./coli doctor    &lt;span class="c"&gt;# read-only readiness check&lt;/span&gt;
&lt;span class="nv"&gt;COLI_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/nvme/glm52_i4 ./coli tune      &lt;span class="c"&gt;# measure this machine's fastest safe profile&lt;/span&gt;
./coli serve &lt;span class="nt"&gt;--model&lt;/span&gt; /nvme/glm52_i4        &lt;span class="c"&gt;# OpenAI-compatible API + dashboard, headless&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run &lt;code&gt;coli plan&lt;/code&gt;, &lt;code&gt;coli doctor&lt;/code&gt;, and &lt;code&gt;coli tune&lt;/code&gt; before your first real session. They're the difference between "why is this 0.05 tok/s" and knowing exactly which tier your experts landed in.&lt;/p&gt;

&lt;p&gt;Switching models changes nothing about the command line — build the engine you want (&lt;code&gt;make -C c inkling&lt;/code&gt;, &lt;code&gt;make -C c kimi_k3&lt;/code&gt;), then point &lt;code&gt;COLI_MODEL&lt;/code&gt; at the right directory. &lt;code&gt;coli&lt;/code&gt; reads the model's &lt;code&gt;config.json&lt;/code&gt;, picks the matching binary, and renders that family's chat template.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Each Model Actually Costs You
&lt;/h2&gt;

&lt;p&gt;This table is the single most useful thing in the repo, and misreading two rows together has confused people into thinking the requirements contradict each other. They don't — they're different models.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Disk&lt;/th&gt;
&lt;th&gt;RAM&lt;/th&gt;
&lt;th&gt;GPU&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;OLMoE&lt;/strong&gt; (7B/1B)&lt;/td&gt;
&lt;td&gt;~7 GB&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;td&gt;not needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Qwen3.6&lt;/strong&gt; (35B-A3B)&lt;/td&gt;
&lt;td&gt;~20 GB&lt;/td&gt;
&lt;td&gt;24 GB&lt;/td&gt;
&lt;td&gt;optional — 7.0× with CUDA tier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;DeepSeek V4 Flash&lt;/strong&gt; (284B/13B)&lt;/td&gt;
&lt;td&gt;~167 GB&lt;/td&gt;
&lt;td&gt;16 GB min&lt;/td&gt;
&lt;td&gt;optional — GTX 10-series and up&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Qwen3.8-Flash-Next&lt;/strong&gt; (125B)&lt;/td&gt;
&lt;td&gt;~185.5 GB&lt;/td&gt;
&lt;td&gt;16 GB min&lt;/td&gt;
&lt;td&gt;CPU only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;GLM-5.3-Flash&lt;/strong&gt; (321B, vision)&lt;/td&gt;
&lt;td&gt;~195 GB&lt;/td&gt;
&lt;td&gt;25 GB&lt;/td&gt;
&lt;td&gt;not needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;GLM-5.2&lt;/strong&gt; (744B/40B)&lt;/td&gt;
&lt;td&gt;~372 GB&lt;/td&gt;
&lt;td&gt;16 GB min, 24 comfortable&lt;/td&gt;
&lt;td&gt;not needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Inkling&lt;/strong&gt; (975B/41B)&lt;/td&gt;
&lt;td&gt;~469 GB&lt;/td&gt;
&lt;td&gt;25 GB with int4 dense&lt;/td&gt;
&lt;td&gt;not needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Kimi K3&lt;/strong&gt; (2.8T/104B)&lt;/td&gt;
&lt;td&gt;~1.6 TB&lt;/td&gt;
&lt;td&gt;32 GB+&lt;/td&gt;
&lt;td&gt;not needed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Note the shape of it: &lt;strong&gt;RAM barely moves&lt;/strong&gt; from 8 GB to 32 GB across a 400× range in parameter count, while &lt;strong&gt;disk goes from 7 GB to 1.6 TB&lt;/strong&gt;. That's the whole thesis in one table. The binding constraint moved from expensive scarce memory to cheap abundant storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Benchmarks, Honestly
&lt;/h2&gt;

&lt;p&gt;The project publishes a hardware ladder rather than a headline number, which I appreciate:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Hardware&lt;/th&gt;
&lt;th&gt;Decode&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;6× RTX 5090, full residency&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;5.8–6.8 tok/s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TTFT ~13 s, disk drops out of decode entirely&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;128 GB CPU-only desktop&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~1.8 tok/s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;warm cache&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single RTX 5070 Ti box&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.07 tok/s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GPU-resident pipeline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25 GB dev box&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.05–0.1 tok/s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;cold — the proven floor where the project started&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Quality is measured rather than assumed. The forward pass is validated against a &lt;code&gt;transformers&lt;/code&gt; oracle with teacher-forcing typically 30–32/32, and the int4 container's quantization cost has its own ablations. The Qwen3.6 CUDA VRAM expert tier measured &lt;strong&gt;1.44 → 10.05 tok/s (7.0×)&lt;/strong&gt; on two 8 GB cards with output &lt;strong&gt;bit-identical&lt;/strong&gt; to the CPU path — verified with &lt;code&gt;cmp&lt;/code&gt; over a full 200-token generation. That's the right way to report a speedup.&lt;/p&gt;

&lt;p&gt;Speculative decoding gets the same treatment. GLM-5.2's native MTP head drafts 2.2–2.8 tokens/forward when it pays, with two hard-won defaults: the MTP head must be &lt;strong&gt;int8&lt;/strong&gt; (int4 heads collapse to 0–4% acceptance), and draft and verify must compute the same function (&lt;code&gt;SPEC_PIN=1&lt;/code&gt;). And the honest counterpoint is published too — MTP measured a &lt;strong&gt;32% loss&lt;/strong&gt; around 85% expert hit rate. Use &lt;code&gt;DRAFT=0&lt;/code&gt; when it doesn't pay.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Reaction
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://news.ycombinator.com/item?id=48842459" rel="noopener noreferrer"&gt;Show HN — "Getting GLM 5.2 running on my slow computer"&lt;/a&gt; landed on 2026-07-10 and the reception split along a predictable line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The enthusiasm&lt;/strong&gt; is about access. r/LocalLLaMA and r/LocalLLM both ran threads within days, and commenters immediately started asking about RAID0 and multi-SSD setups. One: &lt;em&gt;"it would be interesting if with a really fast drive, potentially raid0... you could get to 1 to 2 tokens a second — then for really critical work that you have extra time for and want right, I could see it being quite valuable on consumer hardware."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The skepticism&lt;/strong&gt; is about arithmetic. From r/LocalLLM: &lt;em&gt;"I don't know about people but for my SSD it will take 1s, so best case I'll do is 1 tok/s, given everything else is perfect. The only scenario where this works at any reasonable speed is for you to have enough RAM to fit the model anyway."&lt;/em&gt; That is a fair reading of the cold-cache case — and the learning cache plus lookahead prefetch is precisely the counter-argument, though it only pays on repeatable workloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The sharpest criticism&lt;/strong&gt; wasn't technical. An r/LocalLLaMA commenter called out the AI-written README and noted 24 of the first 32 commits were authored by Claude. The maintainer's reply: colibrì is a one-person project written and tested entirely on a 12-core laptop with 25 GB of RAM, and the published numbers are the ceiling of what they could measure at home. Two months and 26k stars later, that ceiling has been raised mostly by contributors A/B-testing on hardware the author doesn't have.&lt;/p&gt;

&lt;p&gt;An r/technology thread also flagged generations getting stuck in loops. Worth knowing: that was traced to the older per-row int4 containers, which measure ~9pp worse on quality. The gs64 container fixed it in controlled A/Bs — but the maintainers explicitly say it is &lt;em&gt;not&lt;/em&gt; a general repetition guard. Use the gs64 build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speed is your SSD.&lt;/strong&gt; On a slow drive, expect a fraction of a token per second. No amount of engine cleverness fixes a cold cache on a QLC disk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage is the new price.&lt;/strong&gt; 372 GB for GLM-5.2, 1.6 TB for Kimi K3. Cheaper than 8 GPUs, not free.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No SLA on speed&lt;/strong&gt; — the project says so explicitly. It's an engine you can run today &lt;em&gt;and&lt;/em&gt; a research platform. Aggressive systems ideas ship behind flags.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;97 open issues&lt;/strong&gt; and a fast-moving release cadence (five releases in twelve days). v1.10.0 shipped broken prebuilt archives that v1.10.1 repaired the next day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not every knob is a win.&lt;/strong&gt; &lt;code&gt;O_DIRECT&lt;/code&gt; is drive-dependent, learned pins can overfit a prompt, and CPU/GPU overlap gains vanish on fast CPUs at low residency. The docs say this out loud, which is unusual and good.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TTFT is its own problem.&lt;/strong&gt; 13 s to first token on a 6× 5090 rig is acceptable; on a cold streaming box it's a different conversation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who Should Actually Use This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Good fit:&lt;/strong&gt; you have a big NVMe drive and normal RAM; you want a frontier model for batch work where 1–2 tok/s is fine (overnight analysis, offline drafting, air-gapped research); you want to &lt;em&gt;study&lt;/em&gt; MoE routing — the Brain and Atlas pages visualize all 19,456 experts, 13,260 of them characterised, with 1,041 replicated specialists clustering by topic; or you want a C engine small enough to actually read.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad fit:&lt;/strong&gt; interactive chat as a daily driver, anything user-facing with latency requirements, or a machine without hundreds of gigabytes to spare. A 30B dense model on the GPU you already have beats this every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does Colibrì really run a 744B model on 25 GB of RAM?&lt;/strong&gt;&lt;br&gt;
Yes, with the qualifier that matters: the 744B model's &lt;em&gt;weights&lt;/em&gt; still occupy ~372 GB on disk. Only the dense portion (~9.9 GB at int4) plus an expert cache stays in RAM; the 19,456 routed experts stream from NVMe as the router calls them. On a 25 GB box that's 0.05–0.1 tok/s cold — correct, but slow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need a GPU?&lt;/strong&gt;&lt;br&gt;
No. None of the eight supported families requires one. A GPU only makes it faster — the DeepSeek V4 CUDA path makes prefill 5–10× and decode ~2.5× faster, and the Qwen3.6 VRAM expert tier measured 7.0× on two 8 GB cards. Backends exist for CUDA, Metal (experimental), and Vulkan, the last of which covers AMD cards via Mesa/RADV including ones ROCm dropped, like the RX 580.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is this different from llama.cpp with mmap offloading?&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;mmap&lt;/code&gt; lets the OS page weights in reactively and leaves placement to the page cache. Colibrì treats placement as the engine's job: measured routing heat drives a per-layer LRU and a learned pinned hot-store, a lookahead thread prefetches next-layer experts using 71.6%-predictable routing, batch-union collapses duplicate reads, and &lt;code&gt;O_DIRECT&lt;/code&gt; plus dual-SSD striping attack the I/O path directly. It's proactive scheduling versus reactive paging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Will streaming from disk degrade output quality?&lt;/strong&gt;&lt;br&gt;
No — that's an explicit guarantee rather than a hope: placement decides speed, never semantics. The forward pass is validated against a &lt;code&gt;transformers&lt;/code&gt; oracle (30–32/32 teacher-forcing), and the Qwen3.6 GPU tier produces bit-identical output to the CPU path. Quantization does cost quality, but that's the int4 container's doing, not the streaming. Use the gs64 container, not the older per-row mirrors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I split it across multiple machines?&lt;/strong&gt;&lt;br&gt;
Yes, there's a local cluster mode. The coordinator keeps token generation, routing, and KV state local while disk-backed workers execute routed FFNs elsewhere; a layer's batched expert union goes as one persistent TCP request, so a token doesn't cost one round trip per expert. The transport stays disabled unless workers are configured, so the single-machine path is unchanged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it production-ready?&lt;/strong&gt;&lt;br&gt;
No, and it doesn't claim to be. Treat it as a serious research engine with a usable front end — an OpenAI-compatible API, a web dashboard, persistent KV slots — but with 97 open issues, no speed SLA, and a release last week that shipped a broken archive. Pin a version, run &lt;code&gt;coli doctor --deep&lt;/code&gt;, and measure your own hardware before depending on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/JustVugg/colibri" rel="noopener noreferrer"&gt;JustVugg/colibri on GitHub&lt;/a&gt; — README, benchmark tables, per-model docs&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/JustVugg/colibri/releases" rel="noopener noreferrer"&gt;Colibrì release notes&lt;/a&gt; — v1.7.0 through v1.10.1, 2026-08-20 to 2026-08-31&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://news.ycombinator.com/item?id=48842459" rel="noopener noreferrer"&gt;Show HN: Getting GLM 5.2 running on my slow computer&lt;/a&gt; — 2026-07-10 launch thread&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/LocalLLaMA/comments/1us5m0g/glm52_744b_moe_on_a_25gbram_consumer_machine/" rel="noopener noreferrer"&gt;r/LocalLLaMA: GLM-5.2 (744B MoE) on a 25GB-RAM consumer machine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.reddit.com/r/LocalLLM/comments/1uwfq7h/is_colibri_right_approach/" rel="noopener noreferrer"&gt;r/LocalLLM: Is Colibri the right approach?&lt;/a&gt; — the skeptical arithmetic&lt;/li&gt;
&lt;li&gt;&lt;a href="https://huggingface.co/mastouri/GLM-5.2-colibri-int4-g64-with-int8-mtp" rel="noopener noreferrer"&gt;GLM-5.2 int4-gs64 container on Hugging Face&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>colibri</category>
      <category>localllm</category>
      <category>moe</category>
      <category>glm52</category>
    </item>
    <item>
      <title>QwenPaw Review: Self-Hosted AI Assistant, 34k Stars</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Tue, 01 Sep 2026 10:11:07 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/qwenpaw-review-self-hosted-ai-assistant-34k-stars-47a4</link>
      <guid>https://dev.to/andrew-ooo/qwenpaw-review-self-hosted-ai-assistant-34k-stars-47a4</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/qwenpaw-self-hosted-personal-ai-assistant-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;QwenPaw&lt;/strong&gt; (Qwen Personal Agent Workstation) is an open-source personal AI assistant from the &lt;a href="https://github.com/agentscope-ai" rel="noopener noreferrer"&gt;AgentScope&lt;/a&gt; team that you install on your own machine — not a hosted product with a self-hosted tier bolted on. It went from first commit to 34,000+ GitHub stars in roughly six months, which makes it one of the fastest-growing agent projects of 2026. Key facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;34,759 GitHub stars&lt;/strong&gt;, 3,052 forks, &lt;strong&gt;Apache-2.0&lt;/strong&gt; license — commercial use allowed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Created 2026-02-24&lt;/strong&gt;; v2.0.0 ground-up rewrite shipped &lt;strong&gt;2026-07-10&lt;/strong&gt;, v2.1.0 on &lt;strong&gt;2026-08-13&lt;/strong&gt;, v2.2.0 currently in beta&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.11 – &amp;lt;3.14&lt;/strong&gt;; installs via &lt;code&gt;pip&lt;/code&gt;, a shell installer, Docker, or a beta Tauri desktop app&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runs fully offline&lt;/strong&gt; with bundled llama.cpp runtime + purpose-trained &lt;strong&gt;QwenPaw-Flash 2B/4B/9B&lt;/strong&gt; models, or connects to Ollama, LM Studio, and 14+ cloud providers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Five security layers&lt;/strong&gt;: kernel sandbox, Tool Guard, File Guard, Skill Scanner, Access Policy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reachable from chat apps&lt;/strong&gt;: DingTalk, Lark, WeChat, QQ, Discord, Telegram, iMessage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Three-layer memory&lt;/strong&gt; via &lt;a href="https://github.com/agentscope-ai/ReMe" rel="noopener noreferrer"&gt;ReMe&lt;/a&gt; — plain Markdown on disk, editable by hand&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;597 open issues&lt;/strong&gt; and a heavily China-first ecosystem — the biggest practical caveats&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have wanted a &lt;em&gt;persistent&lt;/em&gt; assistant — one that remembers last month, runs scheduled jobs, and answers you in Telegram — without renting it from someone else, QwenPaw is the most complete attempt shipping right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Repo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/agentscope-ai/QwenPaw" rel="noopener noreferrer"&gt;agentscope-ai/QwenPaw&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Docs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://qwenpaw.agentscope.io/" rel="noopener noreferrer"&gt;qwenpaw.agentscope.io&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python (TypeScript console frontend)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;gt;= 3.11, &amp;lt; 3.14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pip install qwenpaw&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;agentscope/qwenpaw:latest&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Default port&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;127.0.0.1:8088&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stars / forks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;34,759 / 3,052&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Built by&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AgentScope team (AgentScope, AgentScope Runtime, ReMe)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What QwenPaw Actually Is
&lt;/h2&gt;

&lt;p&gt;The name decodes to &lt;strong&gt;Qwen Personal Agent Workstation&lt;/strong&gt;, and "workstation" is the more honest half. This is not a chatbot wrapper. It is a long-running local service that owns a working directory, a memory store, a set of skills and plugins, a scheduler, and a permissions model — then exposes that single agent through a web console, a terminal UI, a desktop app, and a pile of chat channels simultaneously.&lt;/p&gt;

&lt;p&gt;The mental model that helps most: think of it as &lt;strong&gt;a personal server for one agent&lt;/strong&gt;, the way Home Assistant is a personal server for your devices. Install it once, configure a model provider, and it stays up. Sessions, memory, and skills are shared across every surface — a conversation started in the browser console continues from Telegram with the same context.&lt;/p&gt;

&lt;p&gt;Version 2.0.0 (July 2026) rewrote the project on top of AgentScope 2.0 and introduced the architecture the project now leads with: &lt;strong&gt;Agent OS&lt;/strong&gt;. It has two halves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Workspace&lt;/strong&gt; — three pillars per agent: &lt;em&gt;Resources&lt;/em&gt; (stored transparently on disk, not in an opaque DB), &lt;em&gt;Governance&lt;/em&gt; (allow / deny / ask / sandbox rules), and &lt;em&gt;Sandbox&lt;/em&gt; (per-platform kernel isolation).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drivers&lt;/strong&gt; — a protocol-neutral connector layer speaking &lt;strong&gt;MCP, A2A, and ACP&lt;/strong&gt;, with encrypted credentials and a per-call policy gate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That second piece matters more than it sounds. Most agent frameworks pick one protocol and make you adapt. QwenPaw treats MCP servers, agent-to-agent calls, and ACP orchestration as three drivers behind one permission boundary, so a policy written once applies regardless of how the capability arrived.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It's Trending Now
&lt;/h2&gt;

&lt;p&gt;Three things converged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First, the self-hosting wave hit personal assistants.&lt;/strong&gt; Through 2025 and early 2026 the self-hosted AI conversation was about &lt;em&gt;inference&lt;/em&gt; — Ollama, LM Studio, llama.cpp. Those solved "run a model locally" but not "have an assistant." QwenPaw targets the layer above: memory, scheduling, channels, tools, and permissions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second, the v2.0 rewrite gave it a real story.&lt;/strong&gt; Agent OS, Loop Engineering, and Scroll Context reframed a conventional agent app as infrastructure, and the star curve reflects it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third, it ships genuinely small models.&lt;/strong&gt; The &lt;strong&gt;QwenPaw-Flash&lt;/strong&gt; series (2B / 4B / 9B, Q4 and Q8 quantizations) is trained for agent tasks — tool calling, loop adherence, structured output — rather than general chat. With the bundled llama.cpp runtime, you go from &lt;code&gt;pip install&lt;/code&gt; to a working agent with &lt;strong&gt;no API key at all&lt;/strong&gt;. Few competing projects can say that honestly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Features That Matter
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Scroll Context: nothing gets summarized away
&lt;/h3&gt;

&lt;p&gt;Most agent frameworks manage long conversations by summarizing old turns and discarding the originals. That is lossy in exactly the way that hurts — the detail you need three weeks later is the detail the summarizer dropped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scroll Context&lt;/strong&gt; persists every turn. When a turn is evicted from the live window it is indexed rather than compressed, and recalled on demand. The design goal, stated plainly in the v2.0 notes, is that nothing is summarized away. For an assistant you intend to keep for a year, this is the single most consequential architectural choice in the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  ReMe: memory you can open in a text editor
&lt;/h3&gt;

&lt;p&gt;Memory is powered by &lt;strong&gt;ReMe v0.4&lt;/strong&gt;, a sibling AgentScope project. It maintains three layers: live working context, full verbatim history, and a self-evolving personal knowledge base.&lt;/p&gt;

&lt;p&gt;The knowledge base is the interesting one, because it is &lt;strong&gt;Markdown on disk&lt;/strong&gt; — readable, editable, searchable, and linked. Conversations and resources continuously become notes. If the agent learns something wrong about you, open the file and fix it. Compare that to vector stores, where correcting a bad memory means deleting an embedding you cannot read.&lt;/p&gt;

&lt;h3&gt;
  
  
  Five security layers, and they are not decorative
&lt;/h3&gt;

&lt;p&gt;Running an agent with shell access on your own machine is the whole value proposition and the whole risk. QwenPaw's answer is unusually thorough:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sandbox&lt;/strong&gt; — real kernel-level isolation: Seatbelt on macOS, Bubblewrap / Landlock on Linux, AppContainer on Windows. Shell commands see a restricted filesystem view.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool Guard&lt;/strong&gt; — a YAML rule engine whose &lt;code&gt;ShellEvasionGuardian&lt;/code&gt; inspects every tool call before execution for command injection, path traversal, reverse shells, and obfuscation. Approval levels: &lt;code&gt;STRICT&lt;/code&gt; / &lt;code&gt;SMART&lt;/code&gt; / &lt;code&gt;AUTO&lt;/code&gt; / &lt;code&gt;OFF&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File Guard&lt;/strong&gt; — blocks access to sensitive paths independently of Tool Guard; &lt;code&gt;~/.ssh&lt;/code&gt; and the secrets directory are protected by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skill Scanner&lt;/strong&gt; — scans skills &lt;em&gt;before&lt;/em&gt; activation for prompt injection, hardcoded secrets, and exfiltration patterns. Block / warn / off, with a whitelist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access Policy&lt;/strong&gt; — declarative allow / deny / ask rules at tool-level granularity, with source-aware matching.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Skill Scanner deserves a call-out. Community skill marketplaces are an obvious supply-chain attack surface, and QwenPaw ships scanning as part of the default install flow rather than a plugin.&lt;/p&gt;

&lt;h3&gt;
  
  
  One agent, every channel
&lt;/h3&gt;

&lt;p&gt;Channel support is broad: DingTalk, Lark, WeChat, QQ, Discord, Telegram, and iMessage, plus the console, TUI, and desktop app — one instance, shared memory and sessions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Loop Engineering and multi-agent
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Loop Engineering&lt;/strong&gt; provides templated agent loops — Coding Mode, Mission Mode — with composable approval gates, so a coding task's control flow differs from a research task's without rewriting the agent. Multi-agent support spawns independent agents with their own memory and skills, plus runtime sub-agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;The fastest path, assuming Python 3.11–3.13:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;qwenpaw
qwenpaw init &lt;span class="nt"&gt;--defaults&lt;/span&gt;
qwenpaw app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open &lt;strong&gt;&lt;a href="http://127.0.0.1:8088/" rel="noopener noreferrer"&gt;http://127.0.0.1:8088/&lt;/a&gt;&lt;/strong&gt; and configure a model in &lt;strong&gt;Settings → Models&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you would rather not manage Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# macOS / Linux&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://qwenpaw.agentscope.io/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The installer pulls &lt;code&gt;uv&lt;/code&gt;, creates a virtualenv, and installs everything including Node.js and frontend assets. (Piping a remote script to bash is worth the usual caution — read it first if the machine matters.)&lt;/p&gt;

&lt;p&gt;Docker is the cleanest option for a homelab box:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull agentscope/qwenpaw:latest
docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 127.0.0.1:8088:8088 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; qwenpaw-data:/app/working &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; qwenpaw-secrets:/app/working.secret &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; qwenpaw-backups:/app/working.backups &lt;span class="se"&gt;\&lt;/span&gt;
  agentscope/qwenpaw:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note the deliberate three-volume split: config/memory/skills, provider credentials, and backups are separated, so you can back up state without dragging API keys along. If you run Ollama on the host and QwenPaw in Docker, add &lt;code&gt;--add-host=host.docker.internal:host-gateway&lt;/code&gt; and point the Base URL at &lt;code&gt;http://host.docker.internal:11434&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Terminal users get a first-class TUI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;qwenpaw                     &lt;span class="c"&gt;# chat with the active agent&lt;/span&gt;
qwenpaw tui &lt;span class="nt"&gt;--resume&lt;/span&gt; &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;   &lt;span class="c"&gt;# resume a session&lt;/span&gt;
qwenpaw &lt;span class="nb"&gt;.&lt;/span&gt;                   &lt;span class="c"&gt;# start in the current repo (Coding Mode)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It drives the &lt;em&gt;same&lt;/em&gt; agent as the console — same memory, skills, MCP tools, sessions — with streaming replies, slash commands, and inline tool-permission prompts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Should Use This — And Who Shouldn't
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Good fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Homelab and self-hosting people who want an assistant that outlives any vendor&lt;/li&gt;
&lt;li&gt;Privacy-driven users who need data to stay on their hardware — local models mean zero outbound calls&lt;/li&gt;
&lt;li&gt;Anyone wanting an assistant reachable from Telegram or Discord without building the bridge&lt;/li&gt;
&lt;li&gt;Teams evaluating agent security models; the five-layer design is worth studying regardless&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Poor fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anyone wanting a polished consumer app today. The desktop build is explicitly Beta, unnotarized on macOS (you will fight Gatekeeper), and first launch can take 10–60 seconds.&lt;/li&gt;
&lt;li&gt;English-only users who need English-language community support (see below)&lt;/li&gt;
&lt;li&gt;Low-spec hardware, if you plan to run local models — the 9B Flash model wants real RAM&lt;/li&gt;
&lt;li&gt;People wanting a &lt;em&gt;coding&lt;/em&gt; agent specifically — Coding Mode exists, but dedicated tools are further along on that axis.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The ecosystem is China-first.&lt;/strong&gt; This is the most important thing a Western reader should know, and the README does not hide it: the default cloud provider is DashScope, one-click deploy is Alibaba Cloud ECS, models are distributed via ModelScope alongside Hugging Face, and the community channels lead with DingTalk and RedNote. Scanning the open issues sorted by reactions, most of the top feature requests are written in Chinese. Nothing here is broken for international users — Discord and Telegram channels work, OpenAI/Anthropic/Gemini/DeepSeek/OpenRouter providers are supported, docs exist in English, Chinese, Japanese, and Russian — but if you file an issue, expect the surrounding conversation to be bilingual at best.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;597 open issues.&lt;/strong&gt; For a six-month-old project moving this fast that is not alarming, but it is a real backlog. The maintainers have posted an explicit contribution policy about AI-generated issues and PRs, which tells you what the triage load looks like.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Release velocity is extreme.&lt;/strong&gt; Five v2.2.0 betas landed between 2026-08-27 and 2026-08-31. Recent commits include fixes for hung MCP session RPCs, stale DingTalk stream connections, oversized tool results, and installer edge cases. Pin a stable tag for anything you depend on; &lt;code&gt;latest&lt;/code&gt; is a moving target.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Telemetry is on by default with &lt;code&gt;--defaults&lt;/code&gt;.&lt;/strong&gt; It is anonymous and narrow — version, install method, OS, Python version, CPU architecture, GPU yes/no, sent once per version — and no files, credentials, or IP addresses are collected. But &lt;code&gt;qwenpaw init --defaults&lt;/code&gt; accepts it automatically. Run &lt;code&gt;qwenpaw init&lt;/code&gt; interactively if you want the prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upgrades from source need care.&lt;/strong&gt; Major-version bumps require rebuilding the frontend, reinstalling the package, restarting, and hard-refreshing the browser cache. Use pip or Docker unless you contribute.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison With Alternatives
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;QwenPaw&lt;/th&gt;
&lt;th&gt;Open WebUI&lt;/th&gt;
&lt;th&gt;Ollama alone&lt;/th&gt;
&lt;th&gt;Hosted assistants&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Persistent memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Three-layer + Markdown KB&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Vendor-controlled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chat channels&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7+ (Telegram, Discord, …)&lt;/td&gt;
&lt;td&gt;Web only&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Vendor apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sandboxing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kernel-level, 3 OSes&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scheduled tasks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in cron + heartbeat&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Local models&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bundled runtime + Flash&lt;/td&gt;
&lt;td&gt;Via Ollama&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;td&gt;BSD-3&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The clearest way to place it: &lt;strong&gt;Open WebUI is a chat interface for your models; QwenPaw is an operating environment for your agent.&lt;/strong&gt; If all you want is a nice window onto Ollama, Open WebUI is simpler and lighter. If you want memory that persists for a year, jobs that run at 6am, and an agent that pings your phone, QwenPaw is doing something Open WebUI does not attempt.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is QwenPaw free, and can I use it commercially?&lt;/strong&gt;&lt;br&gt;
Yes. It is Apache-2.0, which permits commercial use, modification, and redistribution. Running it costs nothing beyond hardware; the only spend is optional cloud model API usage, which you can skip entirely by using local models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need an API key to use QwenPaw?&lt;/strong&gt;&lt;br&gt;
No, if you use local models. QwenPaw Local (bundled llama.cpp), Ollama, or LM Studio all work without keys. You only need a key for cloud providers like DashScope, OpenAI, Anthropic, Gemini, DeepSeek, or OpenRouter — and the app will not chat until a valid key is set if you pick one of those.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does QwenPaw send my data anywhere?&lt;/strong&gt;&lt;br&gt;
Not your content. Deploy locally and conversations, memory, and files stay on your machine. The only outbound telemetry is anonymous install metadata sent once per version, and it excludes files, credentials, and IP addresses. If you use a cloud model provider, prompts obviously go to that provider.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need to speak Chinese to use it?&lt;/strong&gt;&lt;br&gt;
No. Documentation is available in English, Chinese, Japanese, and Russian, and international channels (Discord, Telegram) are supported. But the issue tracker and much of the community discussion are predominantly Chinese, so support conversations may be harder for English-only users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What hardware do I need for local models?&lt;/strong&gt;&lt;br&gt;
The Flash series is deliberately small — 2B, 4B, and 9B, with Q4 and Q8 quantizations. The 2B Q4 will run on modest laptops; the 9B wants a machine with real RAM or a GPU. QwenPaw Local includes hardware-aware recommendations that pick a size for your machine. If you use Ollama, set the context length to at least 32k.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does QwenPaw compare to running Ollama plus a script?&lt;/strong&gt;&lt;br&gt;
Ollama gives you inference. QwenPaw gives you the assistant around it: persistent memory, scheduling, chat-app channels, a skills/plugin system, MCP integration, multi-agent orchestration, and a five-layer security model. If your script has grown its own memory store and cron jobs, you are rebuilding QwenPaw.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it production-ready?&lt;/strong&gt;&lt;br&gt;
For personal and homelab use, yes — with a pinned version. For anything business-critical, treat it as fast-moving software: pin a stable release rather than &lt;code&gt;latest&lt;/code&gt;, back up the data volumes, and read release notes before upgrading.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Verdict
&lt;/h2&gt;

&lt;p&gt;QwenPaw is the most architecturally serious open-source personal assistant available in September 2026. Scroll Context and the Markdown-based ReMe memory solve the long-horizon problem most agent projects hand-wave, and the five-layer security model is the only one in this category that looks designed by people who actually thought about a malicious skill.&lt;/p&gt;

&lt;p&gt;The caveats are real but bounded: a China-centric ecosystem that costs English-only users some community access, a large issue backlog, and a release cadence that demands pinned versions. None of those are architectural.&lt;/p&gt;

&lt;p&gt;If you want an assistant that is &lt;em&gt;yours&lt;/em&gt; — one that remembers, runs on your schedule, and cannot be deprecated by a pricing change — install it with Docker, pin a stable tag, and give it a week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/agentscope-ai/QwenPaw" rel="noopener noreferrer"&gt;agentscope-ai/QwenPaw on GitHub&lt;/a&gt; — README, license, star and fork counts (retrieved 2026-09-01)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://qwenpaw.agentscope.io/" rel="noopener noreferrer"&gt;QwenPaw official documentation&lt;/a&gt; — install, security, memory, and channel guides&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/agentscope-ai/QwenPaw/releases" rel="noopener noreferrer"&gt;QwenPaw release notes&lt;/a&gt; — v2.0.0 through v2.2.0-beta.5&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/agentscope-ai/ReMe" rel="noopener noreferrer"&gt;ReMe (agentscope-ai/ReMe)&lt;/a&gt; — the memory engine behind the personal knowledge base&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>qwenpaw</category>
      <category>agentscope</category>
      <category>personalaiassistant</category>
      <category>selfhosted</category>
    </item>
  </channel>
</rss>
