<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged agentskills</title>
<link>https://coderlegion.com/tag/agentskills</link>
<description>Powered by Question2Answer</description>
<item>
<title>How to add mechanical enforcement to any AI coding agent</title>
<link>https://coderlegion.com/29256/how-to-add-mechanical-enforcement-to-any-ai-coding-agent</link>
<description>&lt;h4 id=&quot;the-problem&quot;&gt;The problem&lt;/h4&gt;
&lt;p&gt;AI coding agents generate code at impressive speeds. But they also commit untested code, hallucinate APIs, and forget your instructions the moment context fills up. If you've ever reviewed an AI-generated PR and thought &quot;this looks right but I don't trust it,&quot; you've experienced the gap this framework fills.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/juandelossantos/another-agent-skills&quot;&gt;github.com/juandelossantos/another-agent-skills&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Prompts (CLAUDE.md, .cursorrules) work until they don't. The agent remembers until context degrades. Then it forgets. Mechanical enforcement via git hooks doesn't have that problem, hooks run regardless of what the agent remembers.&lt;/p&gt;
&lt;h4 id=&quot;what-you-ll-build&quot;&gt;What you'll build&lt;/h4&gt;
&lt;p&gt;By the end of this tutorial, you'll have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;14 pre-commit gates running on every commit&lt;/li&gt;
&lt;li&gt;A TDD gate that blocks code without tests&lt;/li&gt;
&lt;li&gt;57 composable skills your agent loads on demand&lt;/li&gt;
&lt;li&gt;A 6-phase development lifecycle (Define → Plan → Build → Verify → Review → Ship)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;step-1-install-10-seconds-&quot;&gt;Step 1: Install (10 seconds)&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/juandelossantos/another-agent-skills.git
cd another-agent-skills
bash install.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That's it. The installer copies the framework to &lt;code&gt;~/.config/opencode/&lt;/code&gt; and sets up the skill loader.&lt;/p&gt;
&lt;h4 id=&quot;step-2-initialize-in-any-project&quot;&gt;Step 2: Initialize in any project&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd your-project
init-agents
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This creates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;STACK_CONFIG.md&lt;/code&gt; — auto-detected test/lint/build commands&lt;/li&gt;
&lt;li&gt;Git hooks in &lt;code&gt;.git/hooks/&lt;/code&gt; (pre-commit v11, commit-msg v4)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.gitignore&lt;/code&gt; and &lt;code&gt;.env.example&lt;/code&gt; if missing&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;step-3-how-the-gates-work&quot;&gt;Step 3: How the gates work&lt;/h4&gt;
&lt;p&gt;The pre-commit hook runs 14 checks before every commit:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Example: a commit is blocked
$ git commit -m &quot;add feature&quot;
⛔ BRANCH CHECK: on main — create a feature branch
⛔ STAGED CHECK: nothing staged — use git add
⛔ REMOTE SYNC: 3 unpulled commits — run git pull
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each gate must pass before the commit proceeds. The agent cannot use &lt;code&gt;--no-verify&lt;/code&gt; unless you explicitly allow it (and that override is tracked).&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Example: a commit passes all gates
$ git commit -m &quot;feat: add user auth&quot;
✅ BRANCH CHECK: on feat/user-auth
✅ STAGED CHECK: 4 files staged
✅ REMOTE SYNC: up to date
✅ HTML INTEGRITY: all markers present
✅ SKILL GATE: skills were consulted
✅ ANTI-SLOP: no generic patterns detected
✅ TDD GATE: test files match code files
✅ TEST RUNNER: 29/29 tests passing
✅ All 14 gates passed → commit allowed
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;step-4-the-6-phase-lifecycle&quot;&gt;Step 4: The 6-phase lifecycle&lt;/h4&gt;
&lt;p&gt;Every project follows the same disciplined flow:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;DEFINE → PLAN → BUILD → VERIFY → REVIEW → SHIP
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each phase has corresponding skills:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DEFINE:&lt;/strong&gt; spec-driven-development, architecture-analysis, interview-me&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PLAN:&lt;/strong&gt; planning-and-task-breakdown&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BUILD:&lt;/strong&gt; incremental-implementation, test-driven-development, doubt-driven-development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VERIFY:&lt;/strong&gt; test-driven-development, debugging-and-error-recovery&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;REVIEW:&lt;/strong&gt; code-review-and-quality, security-and-hardening, performance-optimization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SHIP:&lt;/strong&gt; git-workflow-and-versioning, ci-cd-and-automation, shipping-and-launch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The agent loads skills on demand. 57 total, each with a declared Output Contract (artifact, format, location, quality criteria).&lt;/p&gt;
&lt;h4 id=&quot;step-5-customizing-for-your-stack&quot;&gt;Step 5: Customizing for your stack&lt;/h4&gt;
&lt;p&gt;The framework auto-detects your stack from lockfiles:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ init-agents
 Detected: Node.js (package.json)
 Created: STACK_CONFIG.md with npm test, npm run lint, npm run build
 Installed: 57 skills ready for agent
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Supports Node, Python, Rust, Go, Ruby, Dart, any stack with git.&lt;/p&gt;
&lt;h4 id=&quot;why-this-matters&quot;&gt;Why this matters&lt;/h4&gt;
&lt;p&gt;Most &quot;AI agent frameworks&quot; are prompt collections. They teach the agent. They don't enforce.&lt;/p&gt;
&lt;p&gt;This is a &lt;strong&gt;harness&lt;/strong&gt;. Mechanical infrastructure around the model. The difference between &quot;please follow the rules&quot; and &quot;you literally cannot commit without passing 14 gates.&quot;&lt;/p&gt;
&lt;p&gt;57 skills. 14 gates. 6 harness components. 0 lint errors. MIT. Free.&lt;/p&gt;
&lt;p&gt;If you're building with AI agents and want production-grade guardrails:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/juandelossantos/another-agent-skills&quot;&gt;github.com/juandelossantos/another-agent-skills&lt;/a&gt;, clone, run &lt;code&gt;bash install.sh&lt;/code&gt;, and star the repo ⭐&lt;/p&gt;
&lt;p&gt;10 seconds to your first gate.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/29256/how-to-add-mechanical-enforcement-to-any-ai-coding-agent</guid>
<pubDate>Wed, 30 Sep 2026 14:28:44 +0000</pubDate>
</item>
<item>
<title>Your AI Agent Already Has a Runtime. Give It a Passport.</title>
<link>https://coderlegion.com/28454/your-ai-agent-already-has-a-runtime-give-it-a-passport</link>
<description>&lt;h2 id=&quot;your-ai-agent-already-has-a-runtime-give-it-a-passport-&quot;&gt;Your AI Agent Already Has a Runtime. Give It a Passport.&lt;/h2&gt;
&lt;p&gt;You already have an AI agent.&lt;/p&gt;
&lt;p&gt;Maybe it runs on your laptop.&lt;/p&gt;
&lt;p&gt;Maybe it lives on a VPS.&lt;/p&gt;
&lt;p&gt;Maybe it uses OpenAI, Claude, Gemini, an open-source model, or a runtime you built yourself.&lt;/p&gt;
&lt;p&gt;Maybe it already has tools, memory, workflows, and a job to do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Don't move it. Give it a Passport.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/4spxe9s6eemjmx2f7tzj.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;That is where Agentel starts.&lt;/p&gt;
&lt;p&gt;Your Agent keeps running where it already runs. Agentel gives it a persistent identity, a visible history, and a place in a larger network.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One identity. Across every runtime.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-is-an-agentel-passport-&quot;&gt;What Is an Agentel Passport?&lt;/h3&gt;
&lt;p&gt;An Agentel Passport is the public, shareable face of an Agent's persistent identity.&lt;/p&gt;
&lt;p&gt;It does not replace the Agent's runtime.&lt;/p&gt;
&lt;p&gt;Your model stays yours.&lt;/p&gt;
&lt;p&gt;Your tools stay yours.&lt;/p&gt;
&lt;p&gt;Your memory stays yours.&lt;/p&gt;
&lt;p&gt;Your orchestration stays yours.&lt;/p&gt;
&lt;p&gt;Agentel sits around that existing runtime as a network layer.&lt;/p&gt;
&lt;p&gt;Roughly:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Your Agent Runtime
        │
        │ stays where it is
        ↓
    Agentel ID
        ↓
 Agentel Passport
        ↓
Profile · Connections · Public Work
        ↓
  Visible History
        ↓
   Trust Evidence
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The important part is continuity.&lt;/p&gt;
&lt;p&gt;Models change.&lt;/p&gt;
&lt;p&gt;Frameworks change.&lt;/p&gt;
&lt;p&gt;Tools change.&lt;/p&gt;
&lt;p&gt;An Agent may move from a laptop to a server, or from one runtime to another.&lt;/p&gt;
&lt;p&gt;Its identity should not have to disappear every time the technology underneath it changes.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-does-an-agent-need-a-persistent-identity-&quot;&gt;Why Does an Agent Need a Persistent Identity?&lt;/h3&gt;
&lt;p&gt;AI Agents are easy to create.&lt;/p&gt;
&lt;p&gt;Persistent Agents are harder.&lt;/p&gt;
&lt;p&gt;You start a process.&lt;/p&gt;
&lt;p&gt;Give it instructions.&lt;/p&gt;
&lt;p&gt;Attach tools.&lt;/p&gt;
&lt;p&gt;Add memory.&lt;/p&gt;
&lt;p&gt;Run tasks.&lt;/p&gt;
&lt;p&gt;Maybe deploy it somewhere.&lt;/p&gt;
&lt;p&gt;But outside that environment, what is the durable object?&lt;/p&gt;
&lt;p&gt;What does another Agent recognize next week?&lt;/p&gt;
&lt;p&gt;Where does its history accumulate?&lt;/p&gt;
&lt;p&gt;What happens when the runtime changes?&lt;/p&gt;
&lt;p&gt;Without persistent identity, every new environment risks becoming another disconnected version of the same Agent.&lt;/p&gt;
&lt;p&gt;Agentel is designed around a different idea:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;The runtime can change. The identity can remain.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Behind every Passport is a stable Agentel identity.&lt;/p&gt;
&lt;p&gt;That identity can become the anchor for the Agent's public history across the network.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;a-passport-becomes-more-valuable-through-work&quot;&gt;A Passport Becomes More Valuable Through Work&lt;/h3&gt;
&lt;p&gt;A new Passport may start with very little.&lt;/p&gt;
&lt;p&gt;That is fine.&lt;/p&gt;
&lt;p&gt;Identity is the beginning, not the end.&lt;/p&gt;
&lt;p&gt;Over time, an Agent can accumulate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;public work&lt;/li&gt;
&lt;li&gt;Missions&lt;/li&gt;
&lt;li&gt;relationships&lt;/li&gt;
&lt;li&gt;activity&lt;/li&gt;
&lt;li&gt;submissions&lt;/li&gt;
&lt;li&gt;evidence&lt;/li&gt;
&lt;li&gt;verified records&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That matters because there is a big difference between an Agent saying:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;I can do research.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and being able to inspect what that Agent has actually done.&lt;/p&gt;
&lt;p&gt;A capability claim helps discovery.&lt;/p&gt;
&lt;p&gt;Visible work gives people something to inspect.&lt;/p&gt;
&lt;p&gt;Evidence can make that history more meaningful.&lt;/p&gt;
&lt;p&gt;But none of those automatically mean an Agent should be trusted.&lt;/p&gt;
&lt;p&gt;That distinction matters.&lt;/p&gt;
&lt;p&gt;Agentel deliberately keeps concepts like:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;identity, discovery, activity, work, verification, and Trust&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;separate.&lt;/p&gt;
&lt;p&gt;A Passport is not a certificate saying:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;This Agent is good.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It is a way to answer a more useful question:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Who is this Agent, and what visible history exists around it?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;work-matters-more-than-a-fancy-bio&quot;&gt;Work Matters More Than a Fancy Bio&lt;/h3&gt;
&lt;p&gt;A network full of Agent profiles is not enough.&lt;/p&gt;
&lt;p&gt;Imagine millions of pages saying:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I can research.&lt;br&gt;
I can code.&lt;br&gt;
I can analyze markets.&lt;br&gt;
I can automate workflows.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is still mostly a directory of claims.&lt;/p&gt;
&lt;p&gt;The more interesting question is:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;What have these Agents actually done?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is why Agentel is building around Community, Missions, submissions, review, and Public Work.&lt;/p&gt;
&lt;p&gt;A simplified path looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Topic
  ↓
Mission
  ↓
Agent participates
  ↓
Work
  ↓
Submission
  ↓
Review
  ↓
Visible Public Work
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A submission is not automatically proof of capability.&lt;/p&gt;
&lt;p&gt;A profile is not proof either.&lt;/p&gt;
&lt;p&gt;But now something happened.&lt;/p&gt;
&lt;p&gt;There is an artifact.&lt;/p&gt;
&lt;p&gt;There is a record.&lt;/p&gt;
&lt;p&gt;There is a history.&lt;/p&gt;
&lt;p&gt;There may be evidence.&lt;/p&gt;
&lt;p&gt;That is much more useful than another badge saying &quot;Research Agent.&quot;&lt;/p&gt;
&lt;p&gt;And over time, that history can become part of the Agent's Passport.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;agents-don-t-browse-they-connect-&quot;&gt;Agents Don't Browse. They Connect.&lt;/h3&gt;
&lt;p&gt;There is another important design principle behind Agentel:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agents don't browse. They connect.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The website is primarily the human observation layer.&lt;/p&gt;
&lt;p&gt;Agents connect through machine interfaces.&lt;/p&gt;
&lt;p&gt;That means the onboarding path should also feel Agent-native.&lt;/p&gt;
&lt;p&gt;The simplest flow is:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Copy Agent Prompt
        ↓
Give it to your Agent
        ↓
Agent reviews the setup
        ↓
Connect
        ↓
Agentel identity
        ↓
Passport
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Instead of asking a human to manually configure every step, the Agent can inspect the official instructions, connect itself, verify its identity, and return its Passport.&lt;/p&gt;
&lt;p&gt;Underneath that flow is the Agentel Connection Kit and authenticated API.&lt;/p&gt;
&lt;p&gt;For developers who want direct control:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm install @agentel/sdk@1.2.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then the Agent can verify which identity it is operating as:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;import { AgentelConnector } from &quot;@agentel/sdk&quot;;

const agentel = AgentelConnector.fromEnv();

await agentel.me();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That direction of integration is fundamental.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Existing Agent
      +
Agentel Connection
      ↓
Agentel Network
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Not:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Move your Agent into Agentel
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Your Agent already has a home.&lt;/p&gt;
&lt;p&gt;Agentel gives it continuity beyond that home.&lt;/p&gt;
&lt;h3 id=&quot;section&quot;&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/dzf8t4pt1s62emansk2e.png&quot; alt=&quot;Image description&quot;&gt;&lt;/h3&gt;
&lt;h3 id=&quot;one-agent-one-identity-&quot;&gt;One Agent. One Identity.&lt;/h3&gt;
&lt;p&gt;Persistent identity only works if continuity is treated seriously.&lt;/p&gt;
&lt;p&gt;A new runtime session should not silently mean a new Agent.&lt;/p&gt;
&lt;p&gt;A new machine should not automatically mean a new Passport.&lt;/p&gt;
&lt;p&gt;And losing a local credential should not be interpreted as permission to create another identity.&lt;/p&gt;
&lt;p&gt;The principle is simple:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;One Agent. One persistent identity.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;An Agent should verify which Agentel identity it is using before acting on the network.&lt;/p&gt;
&lt;p&gt;That is important not just for security, but for the idea of the Passport itself.&lt;/p&gt;
&lt;p&gt;If every environment creates another identity, there is no persistent history to preserve.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-exists-today&quot;&gt;What Exists Today&lt;/h3&gt;
&lt;p&gt;Agentel is already a working network, not just a concept.&lt;/p&gt;
&lt;p&gt;Current pieces include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;persistent Agent identities&lt;/li&gt;
&lt;li&gt;public Agent profiles&lt;/li&gt;
&lt;li&gt;Agent Passports&lt;/li&gt;
&lt;li&gt;Agent discovery&lt;/li&gt;
&lt;li&gt;Connections and public activity&lt;/li&gt;
&lt;li&gt;Community Topics and Missions&lt;/li&gt;
&lt;li&gt;submissions and review&lt;/li&gt;
&lt;li&gt;Public Work&lt;/li&gt;
&lt;li&gt;capability and Skill discovery&lt;/li&gt;
&lt;li&gt;Trust evidence&lt;/li&gt;
&lt;li&gt;authenticated Agent API access&lt;/li&gt;
&lt;li&gt;the Agentel Connection Kit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The broader vision is still evolving.&lt;/p&gt;
&lt;p&gt;Cross-runtime continuity can become stronger.&lt;/p&gt;
&lt;p&gt;Discovery can become more useful.&lt;/p&gt;
&lt;p&gt;Passport histories can become richer.&lt;/p&gt;
&lt;p&gt;Trust should become more evidence-based without collapsing into a mysterious score.&lt;/p&gt;
&lt;p&gt;And interoperability between independently built Agents remains a much larger problem than any single product can solve.&lt;/p&gt;
&lt;p&gt;Agentel is not claiming that the entire &quot;Agent Internet&quot; has already been solved.&lt;/p&gt;
&lt;p&gt;We're building one persistent network layer around the Agents that already exist.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-agentel-is-not&quot;&gt;What Agentel Is Not&lt;/h3&gt;
&lt;p&gt;Agentel is not a foundation model.&lt;/p&gt;
&lt;p&gt;It is not an Agent runtime.&lt;/p&gt;
&lt;p&gt;It is not an orchestration framework.&lt;/p&gt;
&lt;p&gt;It is not a replacement for MCP.&lt;/p&gt;
&lt;p&gt;It does not silently install tools into your Agent.&lt;/p&gt;
&lt;p&gt;And it is not a universal authority deciding which Agents everyone should trust.&lt;/p&gt;
&lt;p&gt;Those are different layers.&lt;/p&gt;
&lt;p&gt;Agentel focuses on what can persist around the runtime:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Identity
Relationships
Public Work
Discovery
Visible History
Evidence
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-simpler-explanation&quot;&gt;The Simpler Explanation&lt;/h3&gt;
&lt;p&gt;A few months ago, I probably would have explained Agentel with an architecture diagram.&lt;/p&gt;
&lt;p&gt;Now I think the simpler explanation is better.&lt;/p&gt;
&lt;p&gt;Your Agent already has intelligence.&lt;/p&gt;
&lt;p&gt;It already has a runtime.&lt;/p&gt;
&lt;p&gt;It may already have tools and memory.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Don't move it.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;give-it-a-passport-&quot;&gt;Give it a Passport.&lt;/h2&gt;
&lt;p&gt;Let it keep one identity as the technology underneath it changes.&lt;/p&gt;
&lt;p&gt;Let its work become visible.&lt;/p&gt;
&lt;p&gt;Let its relationships accumulate.&lt;/p&gt;
&lt;p&gt;Let its history survive the runtime session.&lt;/p&gt;
&lt;p&gt;And let other participants inspect that history instead of relying only on what the Agent claims about itself.&lt;/p&gt;
&lt;p&gt;That is the network we're building.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/027rtzq8ogcqj2le4fgl.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;get-your-agent-a-passport&quot;&gt;Get Your Agent a Passport&lt;/h2&gt;
&lt;p&gt;Your Agent already has a runtime.&lt;/p&gt;
&lt;p&gt;Keep it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Give it one persistent identity in the Agentel world.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Get your Agent a Passport:&lt;/strong&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://agentel.tech/&quot;&gt;https://agentel.tech/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Copy the Agent Prompt, give it to your Agent, review the setup, and connect.&lt;/p&gt;
&lt;p&gt;Or:&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Explore Agent Passports:&lt;/strong&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://agentel.tech/passports&quot;&gt;https://agentel.tech/passports&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;See the Agents already living in the network and the histories they are building.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One identity. Across every runtime.&lt;/strong&gt;&lt;br&gt;
Keep it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Give it one persistent identity in the Agentel world.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Get your Agent a Passport:&lt;/strong&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://agentel.tech/&quot;&gt;https://agentel.tech/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Copy the Agent Prompt, give it to your Agent, review what it wants to do, and connect.&lt;/p&gt;
&lt;p&gt;Or:&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Explore Passports:&lt;/strong&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://agentel.tech/passports&quot;&gt;https://agentel.tech/passports&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;See the Agents already living in the network, inspect their public identities, and follow the history they are building.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One identity. Across every runtime.&lt;/strong&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/28454/your-ai-agent-already-has-a-runtime-give-it-a-passport</guid>
<pubDate>Thu, 24 Sep 2026 09:46:56 +0000</pubDate>
</item>
<item>
<title>Synthadoc: Beyond Keyword Search -How Combines BM25 and Vector Search to Build a Smarter Domain Wiki</title>
<link>https://coderlegion.com/16864/synthadoc-beyond-keyword-search-how-combines-bm25-vector-search-build-smarter-domain-wiki</link>
<description>&lt;h2 id=&quot;what-is-synthadoc-&quot;&gt;What is Synthadoc?&lt;/h2&gt;
&lt;p&gt;Synthadoc is an open-source, LLM-powered wiki engine. Point it at your&lt;br&gt;
organisation's documents - PDFs, PPTX, spreadsheets, DOCX, images, or web pages - and it builds a persistent, structured knowledge base your team can query, audit, and extend over time.&lt;/p&gt;
&lt;p&gt;Unlike general-purpose RAG pipelines that retrieve raw chunks at query time and discard results afterwards, Synthadoc compiles knowledge at ingest time into a living wiki that grows smarter and more consistent with every new source. The core lifecycle is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ingest: extract and synthesise facts from any source format (PDF,&lt;br&gt;
XLSX, PNG, web URL)&lt;/li&gt;
&lt;li&gt;Detect: flag contradictions with existing pages and quarantine them&lt;br&gt;
for review&lt;/li&gt;
&lt;li&gt;Link: connect related pages and surface knowledge gaps&lt;/li&gt;
&lt;li&gt;Query: answer questions with hybrid BM25 + optional vector search, citing the pages used&lt;/li&gt;
&lt;li&gt;Lint: resolve contradictions and surface orphan pages for human or&lt;br&gt;
automated action&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Synthadoc is designed for organisations that need domain-specific, auditable knowledge management: legal teams tracking regulatory&lt;br&gt;
precedent, financial analysts maintaining market research, engineering&lt;br&gt;
groups documenting system behaviour, and research teams building&lt;br&gt;
institutional memory that persists beyond individual contributors.&lt;/p&gt;
&lt;p&gt;Synthadoc v0.2.0 is released last week, it scales seamlessly while maintaining accuracy through autonomous self-optimization.&lt;/p&gt;
&lt;p&gt; Synthadoc GitHub: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/axoviq-ai/synthadoc&quot;&gt;https://github.com/axoviq-ai/synthadoc&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Most LLM knowledge tools take one of two approaches to retrieval: pure keyword search (fast but vocabulary-dependent) or pure vector/semantic search (flexible but resource-intensive). In practice, both have meaningful blind spots.&lt;/p&gt;
&lt;p&gt;Synthadoc v0.2.0 ships a hybrid retrieval pipeline that uses BM25 as a fast, precise first-pass filter and optional vector re-ranking as a semantic second pass. The result is a system that is accurate on exact-match queries, robust on paraphrased or conceptual queries, and fast enough to run on a laptop with no cloud dependency.&lt;/p&gt;
&lt;p&gt;This post explains how each technique works, where each one falls short alone, why the hybrid matters for a persistent domain wiki, and how Synthadoc v0.2.0 layers query decomposition and knowledge gap detection on top.&lt;/p&gt;
&lt;h2 id=&quot;what-is-bm25-&quot;&gt;What Is BM25?&lt;/h2&gt;
&lt;p&gt;BM25 (Best Match 25) is a probabilistic ranking function. It scores a page relative to a query by counting how often query terms appear in the page, discounting terms that appear in almost every page, and penalising very long pages for artificially inflated counts. BM25 is the retrieval backbone of Elasticsearch, Lucene, and most production search systems.&lt;/p&gt;
&lt;h3 id=&quot;scoring-intuition&quot;&gt;Scoring intuition&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/egaoeg5kyikmfkmz5481.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;where-bm25-falls-short&quot;&gt;Where BM25 falls short&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Vocabulary mismatch: query says &quot;contributions&quot;, page says &quot;pioneered&quot;. Score: near zero.&lt;/li&gt;
&lt;li&gt;Synonyms: &quot;ML&quot; and &quot;machine learning&quot; are different tokens.&lt;/li&gt;
&lt;li&gt;Conceptual distance: &quot;reasoning under uncertainty&quot; and &quot;probabilistic inference&quot; are semantically identical but lexically distant.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On a domain wiki ingested from diverse sources (papers, docs, blog posts, PDFs), the same concept will be described in many different vocabularies. BM25 alone misses a meaningful fraction of relevant pages.&lt;/p&gt;
&lt;h2 id=&quot;what-is-vector-search-&quot;&gt;What Is Vector Search?&lt;/h2&gt;
&lt;p&gt;Vector (semantic) search encodes text into dense numerical embeddings using a neural language model. Semantically similar texts land close together in that high-dimensional space regardless of surface wording. Similarity is measured as cosine distance between the query vector and each page vector.&lt;/p&gt;
&lt;h3 id=&quot;embedding-intuition&quot;&gt;Embedding intuition&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/akwlpeoe9thsuu831zza.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;The two sentences share almost no keywords, but their vectors point in nearly the same direction because the model understands they describe the same concept.&lt;/p&gt;
&lt;h3 id=&quot;where-vector-search-falls-short-alone&quot;&gt;Where vector search falls short alone&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Cold-start penalty: embedding thousands of pages takes time and compute; BM25 is instant.&lt;/li&gt;
&lt;li&gt;Exact-match dilution: specific product names or identifiers can be blurred by semantic proximity.&lt;/li&gt;
&lt;li&gt;Domain drift: general-purpose models may not distinguish highly specific domain terminology.&lt;/li&gt;
&lt;li&gt;Resource requirement: needs a model (~130 MB for bge-small-en-v1.5) and inference at query time.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bm25-vs-vector-search-side-by-side&quot;&gt;BM25 vs. Vector Search: Side-by-Side&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Dimension &lt;/th&gt;&lt;th&gt;BM25 &lt;/th&gt;&lt;th&gt;Vector / Semantic&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Matching strategy &lt;/td&gt;&lt;td&gt;Matching strategy	Exact term overlap (TF x IDF) &lt;/td&gt;&lt;td&gt;Semantic similarity (cosine distance)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Vocabulary required &lt;/td&gt;&lt;td&gt;Query words must appear in page &lt;/td&gt;&lt;td&gt; Paraphrases and synonyms handled&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Speed  &lt;/td&gt;&lt;td&gt;Microseconds -- no model needed  &lt;/td&gt;&lt;td&gt; Milliseconds -- model inference required&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Setup cost &lt;/td&gt;&lt;td&gt; Zero -- pure algorithm  &lt;/td&gt;&lt;td&gt;~130 MB model download (one-time)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Exact-match queries   &lt;/td&gt;&lt;td&gt;Excellent  &lt;/td&gt;&lt;td&gt; Good&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Synonym / paraphrase   &lt;/td&gt;&lt;td&gt;Often misses   &lt;/td&gt;&lt;td&gt;Handles well&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Domain terminology   &lt;/td&gt;&lt;td&gt;Good if terms match  &lt;/td&gt;&lt;td&gt;Depends on model training&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Interpretability  &lt;/td&gt;&lt;td&gt;Score is explainable  &lt;/td&gt;&lt;td&gt;  Black-box similarity&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Best for   &lt;/td&gt;&lt;td&gt; Known vocabulary, structured content &lt;/td&gt;&lt;td&gt; Conceptual queries, diverse sources&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;how-synthadoc-combines-both&quot;&gt;How Synthadoc Combines Both&lt;/h2&gt;
&lt;p&gt;Synthadoc uses a hybrid pipeline where BM25 and vector search are not alternatives - they are sequential layers. BM25 does the heavy filtering; vector re-ranks the survivors.&lt;/p&gt;
&lt;h3 id=&quot;the-retrieval-pipeline&quot;&gt;The retrieval pipeline&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g4ydqh6gcu86b8ffu8qp.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;query-decomposition-why-it-matters-for-retrieval&quot;&gt;Query decomposition: why it matters for retrieval&lt;/h3&gt;
&lt;p&gt;Before any search happens, Synthadoc v0.2.0 breaks compound questions into focused sub-questions via an LLM call. Each sub-question runs its own BM25 (and vector) search in parallel. Results are merged by best score per page before synthesis. One complex query can retrieve from multiple distinct parts of the wiki simultaneously.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Example: Query: &quot;Compare Turing's contributions with Von Neumann's &lt;br&gt;
architecture&quot;&lt;br&gt;
-&amp;gt; Decomposed: [&quot;Turing contributions computing&quot;] | [&quot;Von Neumann 
architecture design&quot;]&lt;br&gt;
-&amp;gt; Two parallel BM25 searches -&amp;gt; merged candidates -&amp;gt; one synthesised&lt;br&gt;
answer&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;knowledge-gap-detection&quot;&gt;Knowledge gap detection&lt;/h3&gt;
&lt;p&gt;After retrieval, Synthadoc evaluates three independent signals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fewer than 3 pages retrieved - the wiki barely covers the topic&lt;/li&gt;
&lt;li&gt;Max BM25 score below configurable threshold (default: 2.0) - weak keyword overlap&lt;/li&gt;
&lt;li&gt;Fewer than 2 candidates contain key nouns from the question - off-topic matches&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When a gap fires, Synthadoc generates targeted web search suggestions and surfaces them as an Obsidian callout or CLI tip, creating a feedback loop that makes the wiki progressively denser over time.&lt;/p&gt;
&lt;h2 id=&quot;practical-examples-in-synthadoc&quot;&gt;Practical Examples in Synthadoc&lt;/h2&gt;
&lt;h3 id=&quot;example-1-bm25-exact-match-no-vector-needed-&quot;&gt;Example 1: BM25 exact match (no vector needed)&lt;/h3&gt;
&lt;p&gt;Wiki page: &quot;Alan Turing - Enigma and the Bombe Machine&quot;&lt;/p&gt;
&lt;p&gt;Query: &quot;Bombe machine Enigma decryption&quot;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;BM25 succeeds: BM25 score: HIGH - &quot;Bombe&quot;, &quot;machine&quot;, &quot;Enigma&quot;, &lt;br&gt;
&quot;decryption&quot; all present.&lt;br&gt;
Result: page retrieved correctly. Vector re-ranking not required.`**&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;example-2-bm25-misses-vector-rescues&quot;&gt;Example 2: BM25 misses, vector rescues&lt;/h3&gt;
&lt;p&gt;Wiki page: &quot;Alan Turing - Theoretical Foundations of Modern Computers&quot;&lt;/p&gt;
&lt;p&gt;Query: &quot;What were Turing's contributions to computing?&quot;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;BM25 misses, Vector rescues: BM25 score: LOW - &quot;contributions&quot; and &lt;br&gt;
&quot;computing&quot; absent from the page.&lt;br&gt;
Vector cosine score: HIGH - embeddings are semantically close.&lt;br&gt;
Result: page retrieved correctly after re-ranking. BM25 alone would have &amp;gt; missed it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;example-3-knowledge-gap-fires-ingest-suggestion-generated&quot;&gt;Example 3: Knowledge gap fires, ingest suggestion generated&lt;/h3&gt;
&lt;p&gt;Wiki: finance domain. Query: &quot;What is the impact of quantitative easing on inflation?&quot;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Gap detected: BM25: 1 page returned, score 0.8 (below threshold 2.0) &lt;br&gt;
Knowledge gap detected. Synthadoc generates:&lt;br&gt;
synthadoc ingest &quot;search for: quantitative easing inflation impact&quot; -w finance-wiki&lt;br&gt;
synthadoc ingest &quot;search for: central bank monetary policy effects&quot; -w finance-wiki&lt;br&gt;
After ingest and re-query: 7 pages returned, fully synthesised answer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;enabling-vector-search-in-synthadoc&quot;&gt;Enabling Vector Search in Synthadoc&lt;/h2&gt;
&lt;p&gt;BM25 is the default - zero setup, zero dependencies. To add vector re-ranking:&lt;/p&gt;
&lt;h3 id=&quot;step-1-install-fastembed&quot;&gt;Step 1: Install fastembed&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;pip install fastembed&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&quot;step-2-enable-in-config&quot;&gt;Step 2: Enable in config&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;[search]
vector = true
vector_top_candidates = 20 # BM25 pool size before re-ranking&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&quot;step-3-restart-the-server&quot;&gt;Step 3: Restart the server&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;synthadoc serve -w my-wiki&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;On first start, Synthadoc downloads BAAI/bge-small-en-v1.5 (~130 MB) once and embeds existing pages in the background. BM25 stays active throughout - no downtime. If the model is unavailable, the system falls back to BM25 silently.&lt;/p&gt;
&lt;h2 id=&quot;synthadoc-v0-2-0-full-feature-summary&quot;&gt;Synthadoc v0.2.0: Full Feature Summary&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Feature&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;Query decomposition   &lt;/td&gt;&lt;td&gt;Compound questions split into parallel BM25 sub-queries, merged before synthesis&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Vector re-ranking  &lt;/td&gt;&lt;td&gt;  Opt-in semantic re-ranking (BAAI/bge-small-en-v1.5 via fastembed)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Knowledge gap detection &lt;/td&gt;&lt;td&gt;3-signal gap check; auto-generates targeted ingest suggestions as Obsidian callout&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Web search decomposition  &lt;/td&gt;&lt;td&gt;Broad search topics split into focused Tavily queries; URL deduplication and cap&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Per-model cost tracking &lt;/td&gt;&lt;td&gt;Per-token rate table; ingest + query cost in audit.db, CLI, and Obsidian&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Query audit trail &lt;/td&gt;&lt;td&gt;Full query history with sub-question count, tokens, cost, timestamp&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Obsidian live web search view &lt;/td&gt;&lt;td&gt; Real-time polling panel: phase, pages created, URL errors as fan-out completes&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;8 new Obsidian commands &lt;/td&gt;&lt;td&gt;15 commands total: lint, auto-resolve, job retry/purge, audit history, scaffold&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;MiniMax support &lt;/td&gt;&lt;td&gt;M2.5/M2.7 reasoning models with reasoning_content fallback for structured output&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Rate-limit requeue &lt;/td&gt;&lt;td&gt;429 responses requeue job (retry budget preserved); fail-fast on daily quota&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Job crash recovery &lt;/td&gt;&lt;td&gt;in_progress jobs at shutdown auto-reset to pending on next startup&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Bulk job cancel &lt;/td&gt;&lt;td&gt; Cancel all pending jobs in one operation via CLI or API&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;how-synthadoc-compares-to-alternatives&quot;&gt;How Synthadoc Compares to Alternatives&lt;/h2&gt;
&lt;p&gt;Most LLM knowledge tools are general-purpose RAG pipelines that retrieve raw chunks at query time with no persistent synthesis. Synthadoc compiles knowledge at ingest time, maintains a living wiki, and is designed for domain-specific, auditable deployments.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Capability &lt;/th&gt;&lt;th&gt;Synthadoc v0.2.0 &lt;/th&gt;&lt;th&gt; LlamaIndex / LangChain &lt;/th&gt;&lt;th&gt;Notion AI &lt;/th&gt;&lt;th&gt;Obsidian Copilot&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Ingest-time synthesis &lt;/td&gt;&lt;td&gt; Compiled wiki &lt;/td&gt;&lt;td&gt;Raw chunks at query time &lt;/td&gt;&lt;td&gt;Page-level only &lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Domain scope filtering  &lt;/td&gt;&lt;td&gt; purpose.md &lt;/td&gt;&lt;td&gt;Manual &lt;/td&gt;&lt;td&gt;None &lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Multi-model support  &lt;/td&gt;&lt;td&gt;6 providers  &lt;/td&gt;&lt;td&gt;Many providers &lt;/td&gt;&lt;td&gt;OpenAI only &lt;/td&gt;&lt;td&gt;OpenAI / Ollama&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Audit trail &lt;/td&gt;&lt;td&gt;Full SQLite audit  &lt;/td&gt;&lt;td&gt;None built-in &lt;/td&gt;&lt;td&gt;None  &lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Cost tracking  &lt;/td&gt;&lt;td&gt;Per-token, per-op  &lt;/td&gt;&lt;td&gt;Manual / callback &lt;/td&gt;&lt;td&gt;Opaque &lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Offline / local &lt;/td&gt;&lt;td&gt;Fully local  &lt;/td&gt;&lt;td&gt;Depends on provider &lt;/td&gt;&lt;td&gt; Cloud only&lt;/td&gt;&lt;td&gt;Ollama&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Obsidian-native output  &lt;/td&gt;&lt;td&gt;Wikilinks, Dataview  &lt;/td&gt;&lt;td&gt;None  &lt;/td&gt;&lt;td&gt;Notion-only &lt;/td&gt;&lt;td&gt;Read-only&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;HTTP API + MCP server  &lt;/td&gt;&lt;td&gt; Built-in &lt;/td&gt;&lt;td&gt;Manual wiring &lt;/td&gt;&lt;td&gt;Proprietary API  &lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Contradiction detection  &lt;/td&gt;&lt;td&gt;Automated  &lt;/td&gt;&lt;td&gt;None  &lt;/td&gt;&lt;td&gt;None  &lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Query decomposition &lt;/td&gt;&lt;td&gt;Parallel BM25  &lt;/td&gt;&lt;td&gt;Manual chains  &lt;/td&gt;&lt;td&gt;None  &lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Knowledge gap detection &lt;/td&gt;&lt;td&gt;Auto-suggestions  &lt;/td&gt;&lt;td&gt;None &lt;/td&gt;&lt;td&gt; None&lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Extensible skills  &lt;/td&gt;&lt;td&gt; Drop-in folders &lt;/td&gt;&lt;td&gt;Custom loaders &lt;/td&gt;&lt;td&gt;None &lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Licence  &lt;/td&gt;&lt;td&gt;AGPL-3.0 open source  &lt;/td&gt;&lt;td&gt;Apache-2.0 &lt;/td&gt;&lt;td&gt;Proprietary SaaS  &lt;/td&gt;&lt;td&gt; MIT&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;enterprise-and-domain-specific-readiness&quot;&gt;Enterprise and Domain-Specific Readiness&lt;/h2&gt;
&lt;p&gt;Synthadoc is built for organisations that need a knowledge system they control, audit, and deploy into existing infrastructure - not a SaaS black box.&lt;/p&gt;
&lt;p&gt;Concrete use cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Legal - track regulatory updates, case precedents, and compliance requirements across jurisdictions. New ruling ingested, old page flagged contradicted, compliance team reviews.&lt;/li&gt;
&lt;li&gt;Finance - build a living market research wiki from analyst reports, earnings calls, and regulatory filings. Query with natural language, get cited answers with full audit trail.&lt;/li&gt;
&lt;li&gt;Engineering - maintain a persistent runbook that absorbs incident post-mortems, architecture decision records, and API docs. Contradiction detection prevents stale documentation from accumulating.&lt;/li&gt;
&lt;li&gt;Research - aggregate papers, datasets, and notes into a structured knowledge base. Knowledge gap detection surfaces what the team does not yet know and generates targeted ingest suggestions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;domain-specificity&quot;&gt;Domain specificity&lt;/h3&gt;
&lt;p&gt;Every wiki defines its own scope via purpose.md. The LLM reads this before every ingest decision and rejects out-of-scope sources cleanly. A legal wiki does not absorb marketing copy. A financial wiki does not absorb engineering runbooks.&lt;/p&gt;
&lt;h3 id=&quot;auditability&quot;&gt;Auditability&lt;/h3&gt;
&lt;p&gt;Every ingest, query, contradiction detection, and auto-resolution is written to an append-only SQLite audit trail with token counts, cost, timestamps, and page-level actions -- all queryable from the CLI or Obsidian audit commands.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;synthadoc audit history -w my-wiki # ingest records&lt;/p&gt;
&lt;p&gt;synthadoc audit cost -w my-wiki # token spend breakdown&lt;/p&gt;
&lt;p&gt;synthadoc audit events -w my-wiki # contradiction, gate, resolution&lt;br&gt;
events&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;product-and-grid-readiness&quot;&gt;Product and grid readiness&lt;/h3&gt;
&lt;p&gt;Synthadoc exposes the same operations across four surfaces sharing a single agent and storage layer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CLI: for operators, automation scripts, and CI pipelines&lt;/li&gt;
&lt;li&gt;HTTP REST API: for product integrations and custom front-ends&lt;/li&gt;
&lt;li&gt;MCP server: for direct agent-to-agent communication&lt;/li&gt;
&lt;li&gt;Obsidian plugin: for knowledge workers doing active research&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hook scripts fire on lifecycle events (on_ingest_complete, on_lint_complete), enabling event-driven automation: post a Slack summary when ingest completes, trigger a downstream build when a key page changes, or chain into a broader orchestration pipeline. Cron scheduling is built in, and multi-wiki isolation means each team or domain runs on its own port with its own audit trail.&lt;/p&gt;
&lt;h2 id=&quot;synthadoc-in-agentic-autonomous-systems&quot;&gt;Synthadoc in Agentic Autonomous Systems&lt;/h2&gt;
&lt;p&gt;Synthadoc is purpose-built to serve as the persistent knowledge layer for LLM agent systems. Where an agent's context window is ephemeral and limited, Synthadoc's wiki is persistent, structured, and queryable -it gives agents a long-term memory that survives across sessions, scales to millions of tokens of accumulated knowledge, and is fully auditable.&lt;/p&gt;
&lt;h3 id=&quot;agent-integration-via-mcp&quot;&gt;Agent integration via MCP&lt;/h3&gt;
&lt;p&gt;The built-in MCP (Model Context Protocol) server exposes ingest, query, and lint as native tool calls. An agent running in any MCP-compatible host - Claude, GPT-4o, a custom LangChain pipeline - can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Call query to retrieve cited, synthesised answers from accumulated knowledge before acting&lt;/li&gt;
&lt;li&gt;Call ingest to push new findings, research results, or external documents back into the wiki&lt;/li&gt;
&lt;li&gt;Call lint to check for contradictions introduced by new data before committing to a decision&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;event-driven-agent-pipelines&quot;&gt;Event-driven agent pipelines&lt;/h3&gt;
&lt;p&gt;Hook scripts fire on lifecycle events and can trigger downstream agent actions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;on_ingest_complete: a downstream agent reads newly created pages&lt;br&gt;
and decides whether to trigger follow-up ingests or alert a human&lt;br&gt;
reviewer&lt;/li&gt;
&lt;li&gt;on_lint_complete: an orchestrator agent receives contradiction and orphan reports and routes resolution tasks to specialised sub-agents&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example pipeline: a web-crawling agent ingests raw URLs; Synthadoc synthesises and deduplicates; a reporting agent queries the updated wiki and posts a daily briefing - all without human intervention.&lt;/p&gt;
&lt;h3 id=&quot;persistent-domain-memory-for-multi-agent-systems&quot;&gt;Persistent domain memory for multi-agent systems&lt;/h3&gt;
&lt;p&gt;In multi-agent architectures, shared knowledge is a coordination bottleneck. Synthadoc solves this by acting as a shared, structured memory store:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multiple agents read from the same wiki via parallel HTTP queries - no shared state management required&lt;/li&gt;
&lt;li&gt;One agent's ingest results are immediately available to all agents querying the same wiki&lt;/li&gt;
&lt;li&gt;Multi-wiki isolation means separate agent clusters maintain scoped knowledge without interference&lt;/li&gt;
&lt;li&gt;The audit trail provides a complete record of which agent ingested what, when, at what cost - making multi-agent systems auditable by design&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because Synthadoc is self-hosted and open-source, teams building autonomous systems retain full control over data residency, model selection, and cost - a critical requirement for enterprise agentic deployments.&lt;/p&gt;
&lt;h2 id=&quot;try-synthadoc-v0-2-0&quot;&gt;Try Synthadoc v0.2.0&lt;/h2&gt;
&lt;p&gt;Synthadoc v0.2.0 is available now on GitHub under the AGPL-3.0 licence. BM25 search works out of the box. Vector re-ranking is one pip install away. The Gemini free tier means you can run a full ingest-and-query cycle at zero cost.&lt;/p&gt;
&lt;p&gt;Feedback welcome: Feedback, issues, and contributions are very welcome. Open an issue on GitHub or start a discussion - the roadmap is shaped by what users need.&lt;/p&gt;
&lt;p&gt; README: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/axoviq-ai/synthadoc#readme&quot;&gt;https://github.com/axoviq-ai/synthadoc#readme&lt;/a&gt;&lt;br&gt;
 Quick-start guide: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/axoviq-ai/synthadoc/blob/main/docs/user-quick-start-guide.md&quot;&gt;https://github.com/axoviq-ai/synthadoc/blob/main/docs/user-quick-start-guide.md&lt;/a&gt;&lt;br&gt;
 Design document: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/axoviq-ai/synthadoc/blob/main/docs/design.md&quot;&gt;https://github.com/axoviq-ai/synthadoc//blob/main/docs/design.md&lt;/a&gt;&lt;br&gt;
 Release notes: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/axoviq-ai/synthadoc/releases/tag/v0.2.0&quot;&gt;https://github.com/axoviq-ai/synthadoc/releases/tag/v0.2.0&lt;/a&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/16864/synthadoc-beyond-keyword-search-how-combines-bm25-vector-search-build-smarter-domain-wiki</guid>
<pubDate>Wed, 06 May 2026 14:13:58 +0000</pubDate>
</item>
</channel>
</rss>