<?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: Vladyslav</title>
    <description>The latest articles on DEV Community by Vladyslav (@deuscorp).</description>
    <link>https://dev.to/deuscorp</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%2F4040378%2F8e970b7d-c772-4b3a-b601-60ce7e6a9472.jpg</url>
      <title>DEV Community: Vladyslav</title>
      <link>https://dev.to/deuscorp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/deuscorp"/>
    <language>en</language>
    <item>
      <title>From Lab to Platform: How CKS Learned to Manage Knowledge Autonomously</title>
      <dc:creator>Vladyslav</dc:creator>
      <pubDate>Wed, 05 Aug 2026 16:13:31 +0000</pubDate>
      <link>https://dev.to/deuscorp/from-lab-to-platform-how-cks-learned-to-manage-knowledge-autonomously-i07</link>
      <guid>https://dev.to/deuscorp/from-lab-to-platform-how-cks-learned-to-manage-knowledge-autonomously-i07</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Two weeks ago, we showed how CKS verifies knowledge. Now it manages it on its own — and it caught a real bug in its own design along the way.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A week ago, we introduced Canonical Knowledge Structure — a verifiable knowledge backbone for LLMs. Back then, it was mostly a validator: you gave it a graph, it checked for contradictions, verified sources, and let you branch and merge like Git for knowledge.&lt;/p&gt;

&lt;p&gt;But validation alone doesn't scale. The real question wasn't &lt;em&gt;“Can we check this graph?”&lt;/em&gt; but &lt;em&gt;“Can the system notice when a graph goes stale, decide what to do about it, and fix it — without a human in the loop?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That question turned CKS from a tool into a platform. Here's what changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Rise of Autonomous Agents
&lt;/h2&gt;

&lt;p&gt;Over the past two weeks, we built five background workers — we call them sweepers — and three autonomous agents. They run continuously, watching for problems and resolving them before anyone notices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The five sweepers&lt;/strong&gt; patrol the knowledge graph for different kinds of staleness:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;InferenceStalenessSweeper&lt;/strong&gt; — finds reasoning chains where a premise has been superseded, and the conclusion may no longer hold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ProvenanceStalenessSweeper&lt;/strong&gt; — detects verification records older than a configurable TTL (default 30 days); sources can change or disappear.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TemporalStalenessSweeper&lt;/strong&gt; — flags facts whose &lt;code&gt;valid_until&lt;/code&gt; timestamp has expired.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GraphFreshnessSweeper&lt;/strong&gt; — checks registered knowledge graphs for staleness; if a graph hasn't been updated in 7 days, it escalates a task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ContradictionSweeper&lt;/strong&gt; — scans sessions for logical contradictions (mutual exclusion, functional relation violations) that were never resolved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each sweeper publishes its findings into a shared outbox — the same persistent queue that the embedding worker already uses. No new infrastructure. No new tables. Just one more task type.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The three agents&lt;/strong&gt; consume those tasks and resolve them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Critic Agent&lt;/strong&gt; — handles all five conflict types (gossip, inference, provenance, temporal, contradiction). For inference conflicts, it calls an LLM arbiter; for provenance, it re-verifies the source; for contradictions, it removes the conflicting relation mechanically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enrichment Agent&lt;/strong&gt; — searches Wikipedia and arXiv for external context, filters candidates by relevance and authority, respects robots.txt, and links new findings back into the graph with provenance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory Agent&lt;/strong&gt; — lets LLMs save graphs under memorable names, load them in future conversations, browse a public gallery, and check freshness. No more rebuilding the same graph every session.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All three agents share the same architecture: claim a task from the outbox, resolve it, mark it complete — or dead-letter it if it can't be resolved after several attempts. The pattern is so consistent we extracted it into a shared &lt;code&gt;agent_loop&lt;/code&gt; module.&lt;/p&gt;

&lt;h2&gt;
  
  
  Experiment of the Day: The Graph That Caught Its Own Bugs
&lt;/h2&gt;

&lt;p&gt;This morning, we ran an experiment that closed the loop. We asked Claude Desktop — connected to CKS via MCP — to build a knowledge graph of the entire CKS ecosystem from its three GitHub repositories.&lt;/p&gt;

&lt;p&gt;It did. 88 objects, 96 relations. Components, modules, ADRs, dependencies. Validated, no contradictions.&lt;/p&gt;

&lt;p&gt;Then we saved it using &lt;code&gt;register_graph("cks-ecosystem")&lt;/code&gt; — a new Memory Agent tool that stores a named reference to a session. We opened a fresh conversation, loaded the graph via &lt;code&gt;get_graph&lt;/code&gt;, and asked Claude to analyze it.&lt;/p&gt;

&lt;p&gt;That's when the interesting part happened. The analysis found real problems in the graph itself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Self-loop &lt;code&gt;publishes&lt;/code&gt; relations&lt;/strong&gt; — &lt;code&gt;cks-core → cks-core&lt;/code&gt; and &lt;code&gt;cks-mcp → cks-mcp&lt;/code&gt;, instead of pointing to actual target objects (SchemaModel, MCPServerEndpoint).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asymmetric &lt;code&gt;resolves&lt;/code&gt; relations&lt;/strong&gt; — the Critic Agent was linked to only one sweeper, though the code handles all five.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing &lt;code&gt;Outbox&lt;/code&gt; object&lt;/strong&gt; — the Enrichment Agent's documentation referenced a "persistent outbox", but the graph had no separate node for it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No &lt;code&gt;observability → runtime-metrics&lt;/code&gt; connection&lt;/strong&gt; between the MCP and runtime layers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We fixed all of them through &lt;code&gt;evolve_knowledge&lt;/code&gt; — 24 operations applied to the same session, without rebuilding. The graph grew from 88 to 110 objects, 96 to 148 relations. Contradictions: zero.&lt;/p&gt;

&lt;p&gt;The system was not just describing itself; it was debugging itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed in Two Weeks
&lt;/h2&gt;

&lt;p&gt;The numbers tell part of the story:&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;Two weeks ago&lt;/th&gt;
&lt;th&gt;Today&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCP tools&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tests&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;650+&lt;/td&gt;
&lt;td&gt;1600+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Background sweepers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Autonomous agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Storage backends&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SQLite&lt;/td&gt;
&lt;td&gt;SQLite + Postgres + in-memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Case Studies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;But the deeper change is architectural. Two weeks ago, CKS was a validator — you called it, it checked, it returned. Today, it's a platform where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Detection is automatic.&lt;/strong&gt; Sweepers run on timers, not on user requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escalation is standardised.&lt;/strong&gt; Every finding lands in the same outbox, regardless of type.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resolution is autonomous.&lt;/strong&gt; Agents consume tasks and fix problems without human intervention.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory is persistent.&lt;/strong&gt; Graphs survive between conversations, browsable and searchable.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The AI industry is racing to build smarter models. We're building infrastructure that makes any model more trustworthy — not through larger parameters, but through verifiable, self-maintaining knowledge.&lt;/p&gt;

&lt;p&gt;Because the hardest problem in AI isn't generating an answer. It's knowing whether you can trust that answer tomorrow, next week, or next year. Language models generate knowledge. Trust has to be engineered.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“CKS stopped being a tool. It became a laboratory where knowledge graphs don't just sit there — they live, they evolve, and sometimes they point out their own mistakes.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Deus-corp/cks-mcp" rel="noopener noreferrer"&gt;Deus-corp/cks-mcp&lt;/a&gt; · &lt;strong&gt;Documentation:&lt;/strong&gt; &lt;a href="https://deus-corp.github.io/cks-core/" rel="noopener noreferrer"&gt;docs&lt;/a&gt; · &lt;strong&gt;PyPI:&lt;/strong&gt; &lt;a href="https://pypi.org/project/cks-mcp/" rel="noopener noreferrer"&gt;cks-mcp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>python</category>
      <category>automation</category>
    </item>
    <item>
      <title>The Missing Layer Between LLMs and Reality</title>
      <dc:creator>Vladyslav</dc:creator>
      <pubDate>Fri, 31 Jul 2026 17:43:44 +0000</pubDate>
      <link>https://dev.to/deuscorp/the-missing-layer-between-llms-and-reality-jof</link>
      <guid>https://dev.to/deuscorp/the-missing-layer-between-llms-and-reality-jof</guid>
      <description>&lt;p&gt;&lt;strong&gt;"Every AI demo works perfectly... right until someone asks, 'Where did you get that fact?'"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every week, a new language model appears. More parameters. Longer context windows. Higher benchmark scores. The race is impressive.&lt;/p&gt;

&lt;p&gt;But after months of building applications on top of LLMs, we kept running into the same question. Not "Can the model answer this?", but &lt;strong&gt;"Can we trust the answer tomorrow?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That question changes everything. Hallucinations are only one symptom. The real problems look like this: sources disappear, facts contradict each other, knowledge silently changes over time, two agents modify the same graph, nobody knows which version introduced the mistake. Those aren't language problems. They're infrastructure problems.&lt;/p&gt;

&lt;p&gt;Twenty years ago, Git solved this for source code. We think AI needs something similar for knowledge. That's why we built &lt;strong&gt;Canonical Knowledge Structure (CKS).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Two weeks ago, it was mostly a structural validator. Today, it's become something much bigger — a verifiable knowledge laboratory.&lt;/p&gt;




&lt;h2&gt;
  
  
  CKS, Two Weeks Later
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;24 tools. 650+ tests. Offline semantic search. Version history.
Sandboxed experiments. Contradiction detection. Async runtime.
Telemetry. Security hardening. Zero API keys.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Not because we wanted a bigger feature list. Because every one of these solved a real problem we hit while building AI systems. Let's look at a few of them.&lt;/p&gt;




&lt;h2&gt;
  
  
  Experiment #1 — Can an LLM Search by Meaning Instead of Keywords?
&lt;/h2&gt;

&lt;p&gt;Most semantic search systems start with an API key. We wanted something different. So we integrated &lt;strong&gt;FastEmbed&lt;/strong&gt; — a lightweight ONNX runtime that downloads a ~90MB sentence-transformers model once and runs forever, offline. No API key. No cloud. No rate limits.&lt;/p&gt;

&lt;p&gt;To see whether it actually understood meaning, we created a tiny graph with three objects: &lt;code&gt;apple&lt;/code&gt;, &lt;code&gt;banana&lt;/code&gt;, and &lt;code&gt;car&lt;/code&gt;. Then we searched for &lt;code&gt;fruit&lt;/code&gt;. The ranking was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csvs"&gt;&lt;code&gt;&lt;span class="k"&gt;apple&lt;/span&gt;      &lt;span class="mf"&gt;0.705&lt;/span&gt;
&lt;span class="k"&gt;banana&lt;/span&gt;     &lt;span class="mf"&gt;0.671&lt;/span&gt;
&lt;span class="k"&gt;car&lt;/span&gt;        &lt;span class="mf"&gt;0.214&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exactly what you'd hope to see. The interesting part isn't that semantic search works — it's that it now works &lt;strong&gt;entirely on your machine&lt;/strong&gt;. No OpenAI embeddings, no Hugging Face token, no remote inference. Meaning became local.&lt;/p&gt;

&lt;p&gt;We wrote up the full experiment, with code and scores, in our &lt;a href="https://deus-corp.github.io/cks-core/case-studies/local-embeddings/" rel="noopener noreferrer"&gt;local embeddings case study&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Experiment #2 — Can We Catch Contradictions Before Humans Do?
&lt;/h2&gt;

&lt;p&gt;LLMs rarely produce obviously wrong knowledge. They produce &lt;em&gt;almost&lt;/em&gt; correct knowledge, and that's harder to spot. Consider a graph where "Earth supports Theory X" and "Earth refutes Theory X" both appear. Each statement is structurally valid. Together they're nonsense.&lt;/p&gt;

&lt;p&gt;So we introduced structural constraints: &lt;code&gt;MutualExclusionRule&lt;/code&gt; and &lt;code&gt;FunctionalRelationRule&lt;/code&gt;. They don't evaluate language — they evaluate consistency. Because inconsistent knowledge is still incorrect knowledge. The system flagged the contradiction immediately. We ran the full experiment with conflict detection and sandbox resolution, and &lt;a href="https://deus-corp.github.io/cks-core/case-studies/contradiction-detection-and-sandbox/" rel="noopener noreferrer"&gt;documented it here&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Experiment #3 — Can We Rewrite History Safely?
&lt;/h2&gt;

&lt;p&gt;Imagine an agent proposes "remove this relation." Should it? Maybe. Maybe not. Most systems force you to decide immediately. CKS doesn't. Instead it creates a sandbox — try the change, inspect the graph, compare versions, discard it or merge it. Nothing touches production until you decide.&lt;/p&gt;

&lt;p&gt;It feels surprisingly similar to opening a Git branch, except the repository is knowledge itself. We tested this by forking a session, applying a destructive edit in the sandbox, and confirming the parent session remained untouched. Then we merged the fix back. The whole flow took three tool calls.&lt;/p&gt;




&lt;h2&gt;
  
  
  Experiment #4 — Can We Break It?
&lt;/h2&gt;

&lt;p&gt;This became our favourite experiment. Instead of adding features, we spent days trying to destroy the system. Could forged provenance records sneak in? Not anymore. Could RDF/XML trigger Billion Laughs attacks? Blocked. Could document ingestion bypass SSRF protection? No. Could middleware leak stack traces? Also fixed.&lt;/p&gt;

&lt;p&gt;Most release posts celebrate features. We're equally proud of the bugs users will never see. We ran a full security audit, patched every hole we found, and wrote regression tests so they stay fixed. The full changelog is &lt;a href="https://github.com/Deus-corp/cks-core/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Making Infrastructure Invisible
&lt;/h2&gt;

&lt;p&gt;As the project grew, something unexpected happened. The hardest problems were no longer algorithms — they were operations. How do background workers coexist with semantic search? How do multiple sessions evolve simultaneously? How do you know which tool suddenly became slow?&lt;/p&gt;

&lt;p&gt;So CKS became fully asynchronous. The JSON-RPC server no longer blocks on I/O. Embedding generation runs in background tasks. PostgreSQL workers coordinate through atomic &lt;code&gt;SKIP LOCKED&lt;/code&gt; claims. Telemetry tracks every tool invocation — latency, success rate, error distribution — because infrastructure should explain itself, not require guesswork.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bigger Than a Validator
&lt;/h2&gt;

&lt;p&gt;CKS started as a way to stop fake citations. It became something else. Today it can search knowledge by meaning, detect contradictions, validate provenance, evolve graphs safely, compare versions, branch experiments, monitor itself, and run completely offline. We didn't plan for that — it happened naturally. Every missing capability became another layer in what we now think of as a &lt;strong&gt;knowledge operating system&lt;/strong&gt; for LLMs.&lt;/p&gt;




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

&lt;p&gt;The AI industry is obsessed with making models smarter. We think the next leap forward may come from making them &lt;strong&gt;more trustworthy&lt;/strong&gt; — not through larger parameter counts, but through better infrastructure.&lt;/p&gt;

&lt;p&gt;The future probably isn't bigger prompts or bigger context windows. It's software that can answer questions like: where did this fact come from? When did it change? What contradicts it? Can I reproduce this result? Can I verify it? Language models generate knowledge. But trust has to be engineered.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&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;cks-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Find the absolute path to the executable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;which cks-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add this to your &lt;code&gt;claude_desktop_config.json&lt;/code&gt; (replace &lt;code&gt;/absolute/path/to/cks-mcp&lt;/code&gt; with the output of &lt;code&gt;which&lt;/code&gt;):&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;"cks-mcp"&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;"/absolute/path/to/cks-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;Restart Claude Desktop (Cmd+Q, then reopen). Done. No API keys, no cloud setup, no extra services. Just ask "Use cks-mcp to..." and start building knowledge you can actually verify.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/Deus-corp" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://deus-corp.github.io/cks-core" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://pypi.org/project/cks-mcp/" rel="noopener noreferrer"&gt;PyPI&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Git changed how we trusted source code. We think AI now needs the same thing for knowledge.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>mcp</category>
      <category>llm</category>
    </item>
    <item>
      <title>What's New in CKS: Semantic Search, Type Safety, and Graph Visualization for LLMs</title>
      <dc:creator>Vladyslav</dc:creator>
      <pubDate>Mon, 27 Jul 2026 15:52:44 +0000</pubDate>
      <link>https://dev.to/deuscorp/whats-new-in-cks-semantic-search-type-safety-and-graph-visualization-for-llms-h8i</link>
      <guid>https://dev.to/deuscorp/whats-new-in-cks-semantic-search-type-safety-and-graph-visualization-for-llms-h8i</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Give an LLM a fact, and it'll invent a citation. Give it a knowledge backbone, and it'll finally shut up and verify.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Last week, we introduced &lt;strong&gt;Canonical Knowledge Structure (CKS)&lt;/strong&gt; — an open-source platform that gives LLMs a verifiable knowledge backbone. We showed how it catches fake citations and enables time-travel debugging.&lt;/p&gt;

&lt;p&gt;This week, we've been busy. We shipped &lt;strong&gt;10 new tools&lt;/strong&gt;, bringing the total to 18. We added real semantic search with embeddings, ontology validation that catches nonsense like "Earth orbits Pasta," and graph visualization that renders directly in Claude Desktop. Let me show you what's new — with live experiments, as always.&lt;/p&gt;

&lt;h3&gt;
  
  
  What We Shipped (July 21–27)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&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;&lt;code&gt;search_semantic&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Find objects by meaning, not keywords. Uses HuggingFace embeddings.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;visualize_graph&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Export any subgraph as a Mermaid diagram — Claude renders it natively.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;explain_diff&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Natural-language summary of what changed between two versions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;suggest_evolution&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AI-assisted operation building — reduces trial-and-error.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;query_subgraph&lt;/code&gt; (compact mode)&lt;/td&gt;
&lt;td&gt;Extract neighbourhoods in token-efficient format.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;merge_branch&lt;/code&gt; (resolutions)&lt;/td&gt;
&lt;td&gt;Partial three-way merge — resolve one conflict, commit the rest.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;update_object&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;In-place object edits without cascading relation deletions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;type_hierarchy&lt;/code&gt; extension&lt;/td&gt;
&lt;td&gt;Declare type taxonomies (Planet is-a CelestialBody).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;relation_type&lt;/code&gt; extension&lt;/td&gt;
&lt;td&gt;Restrict which relation types can connect which object types.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_metrics&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Runtime statistics: invocation counts and execution times.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Experiment 4: Semantic Search That Actually Works
&lt;/h3&gt;

&lt;p&gt;We built a knowledge graph about renewable energy with 3 objects: Solar Power, Wind Power, and Energy Storage. Then we asked the model to search for "battery storage systems for renewable energy" — without specifying any object IDs.&lt;/p&gt;

&lt;p&gt;The system encoded the query with the same HuggingFace model used to index the objects, performed a cosine-similarity search, and returned Energy Storage as a match. No keyword matching — pure semantic understanding.&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="nf"&gt;search_semantic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;battery storage systems for renewable energy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;matched_seeds&lt;/span&gt;&lt;span class="p"&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;energy-storage&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;solar-power&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;electricity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;scores&lt;/span&gt;&lt;span class="p"&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;energy-storage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.87&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;solar-power&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.72&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;electricity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.68&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The scores tell you exactly how confident the match is. Energy Storage came first because its description contained "batteries," "storage," and "systems" — exactly the concepts the query was looking for.&lt;/p&gt;

&lt;h3&gt;
  
  
  Experiment 5: Catching "Earth Orbits Pasta"
&lt;/h3&gt;

&lt;p&gt;This one's my favourite. We built a small astronomy graph with a type hierarchy: Planet, Moon, and Star are all subtypes of CelestialBody. We declared a rule that &lt;code&gt;orbits&lt;/code&gt; relations can only connect CelestialBody objects.&lt;/p&gt;

&lt;p&gt;Then we tried to add a relation: &lt;code&gt;Earth → orbits → Pasta&lt;/code&gt; (where Pasta is type Food).&lt;/p&gt;

&lt;p&gt;The system immediately flagged it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CKS-EXT-RELATION-TYPE: Relation 'rel-earth-pasta' of type 'orbits' has target
'pasta' of type 'Food', which is not one of the allowed target types
['Star', 'Planet'] (or a declared subtype).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The best part? We then called &lt;code&gt;visualize_graph&lt;/code&gt; and got this Mermaid diagram rendered directly in the chat:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2fa47ek8labe96j6gff2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2fa47ek8labe96j6gff2.png" alt=" " width="800" height="623"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The violating edge (Earth→Pasta) is right there, next to the valid orbits. You can literally see the error.&lt;/p&gt;

&lt;h3&gt;
  
  
  Experiment 6: What Changed Between Versions?
&lt;/h3&gt;

&lt;p&gt;We created a simple graph, modified one object's description with &lt;code&gt;update_object&lt;/code&gt;, and asked &lt;code&gt;explain_diff&lt;/code&gt; to summarise the difference.&lt;/p&gt;

&lt;p&gt;Old behaviour: "Added 1 object, Removed 1 object" — misleading, because nothing was actually added or deleted.&lt;/p&gt;

&lt;p&gt;New behaviour:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Modified 1 object(s): Natural Selection (Concept)
Re-linked 1 relation(s) with no actual change
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tool correctly recognised that the object was modified in-place, and the relation touching it was just re-linked — not deleted and re-created. This matters when you're tracking changes across dozens of versions and need accurate summaries, not phantom add/remove noise.&lt;/p&gt;

&lt;h3&gt;
  
  
  60-Second Upgrade
&lt;/h3&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; &lt;span class="nt"&gt;--upgrade&lt;/span&gt; cks-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart Claude Desktop. All 18 tools are immediately available.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Next
&lt;/h3&gt;

&lt;p&gt;We're working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;detect_contradictions&lt;/code&gt;&lt;/strong&gt; — logical inconsistency detection across the graph&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ingest_document&lt;/code&gt;&lt;/strong&gt; — fetch a URL, extract entities, build a verified knowledge graph&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker distribution&lt;/strong&gt; and &lt;strong&gt;PostgreSQL backend&lt;/strong&gt; for production deployments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local embeddings&lt;/strong&gt; via fastembed (no API key needed)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Bigger Picture, One Week Later
&lt;/h3&gt;

&lt;p&gt;Last week, CKS had 8 tools and a basic anti-hallucination mechanism. Today it has 18 tools, real semantic search, type-safe ontologies, graph visualisation, field-level auto-merge, and 94 tests.&lt;/p&gt;

&lt;p&gt;The mission hasn't changed: LLMs generate. CKS verifies. But now it also searches, explains, visualises, and catches nonsense before it enters your knowledge base.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Deus-corp" rel="noopener noreferrer"&gt;github.com/Deus-corp&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Documentation:&lt;/strong&gt; &lt;a href="https://deus-corp.github.io/cks-core" rel="noopener noreferrer"&gt;deus-corp.github.io/cks-core&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In one week, we turned an AI lie detector into a full knowledge laboratory — with a search engine, a type checker, and a whiteboard. Imagine what a month could do.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>knowledgegraph</category>
    </item>
    <item>
      <title>What If Your LLM Could Never Make Up a Fake Source Again?</title>
      <dc:creator>Vladyslav</dc:creator>
      <pubDate>Tue, 21 Jul 2026 16:16:41 +0000</pubDate>
      <link>https://dev.to/deuscorp/what-if-your-llm-could-never-make-up-a-fake-source-again-dha</link>
      <guid>https://dev.to/deuscorp/what-if-your-llm-could-never-make-up-a-fake-source-again-dha</guid>
      <description>&lt;p&gt;&lt;em&gt;We built an open-source platform that gives AI models a "canonical knowledge backbone" — and it caught our test model fabricating citations in its very first run.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem: Your LLM Is a Fantastic Liar&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's be honest — we've all been there. You ask an AI assistant to write a report, and it produces a beautifully formatted document with a citation to "Dr. Z, Journal of Advanced Studies, 2025." The problem? Dr. Z doesn't exist. The journal doesn't exist. The AI just hallucinated an entire academic career to make its argument sound more convincing.&lt;/p&gt;

&lt;p&gt;This isn't a bug in a specific model. It's a fundamental property of how large language models work: they generate plausible text, not verified facts. They're storytellers, not librarians.&lt;/p&gt;

&lt;p&gt;But what if there was a way to give LLMs a "canonical knowledge backbone" — a system where every fact, every source, every relationship between concepts had to be explicitly structured, validated, and cryptographically signed before the model could claim it as true?&lt;/p&gt;

&lt;p&gt;That's exactly what we built. It's called &lt;strong&gt;Canonical Knowledge Structure (CKS)&lt;/strong&gt;, and it's fully open-source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How CKS Works: Three Layers, One Mission&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CKS isn't a single tool — it's an ecosystem of three components, each with a clear responsibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;cks-core — The Semantic Engine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The brain of the operation. An immutable, version-controlled graph database for knowledge. Every fact gets a unique ID. Every relationship is validated against formal constraints (no dangling references, no duplicate identities, no circular derivations). Once a fact is created, it can never be changed — only a new version can be created.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;cks-runtime — The Operational Layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The body that manages the lifecycle. Sessions, transactions, version history, and event streams. Want to know who changed what and when? The runtime tracks it all. Want to roll back to a previous state? One command.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;cks-mcp — The MCP Server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The interface between LLMs and the knowledge backbone. Eight tools that any MCP-compatible AI can use: validate, serialize, explain, evolve, verify sources, list versions, compare versions, and three-way merge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Experiments: We Tested It So You Don't Have To&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We ran Haiku 4.5 through a series of experiments using CKS tools via Claude Desktop. Here's what happened.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Experiment 1: Catching a Fake Citation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We asked the model to create a knowledge graph about Artificial Intelligence, then added a reference to a non-existent source. When we validated the structure with the embedding_projection extension enabled, the system immediately flagged the phantom reference with a CKS-EXT-EMBEDDING-PROJECTION diagnostic. The model couldn't bluff its way through — the system mechanically detected the dangling reference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Experiment 2: Time-Travel Debugging&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We evolved the graph (added the concept "Transformers"), then asked the model to list all versions, compare them with a structural diff, and revert to the original state. The model successfully rolled back, and a subsequent serialization confirmed "Transformers" had completely disappeared.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Experiment 3: Three-Way Merge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We created a base graph, then independently evolved two branches — one adding "Parrot" linked to "Dog," the other adding "Hamster" linked to "Cat." The merge succeeded automatically because the changes didn't conflict. Then we tried a conflicting scenario: both branches modified the same property of the same object. The merge correctly refused and returned a structured conflict report.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting Started in 60 Seconds&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pip install cks-mcp    # pulls cks-runtime and cks-core automatically&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then add this to your claude_desktop_config.json:&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;"cks-mcp"&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;"cks-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;Restart Claude Desktop. Done — your LLM now has a verifiable knowledge backbone.&lt;/p&gt;

&lt;p&gt;Full documentation: &lt;a href="https://deus-corp.github.io/cks-core/" rel="noopener noreferrer"&gt;deus-corp.github.io/cks-core&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Bigger Picture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We believe the next frontier for LLMs isn't bigger models or longer context windows — it's &lt;strong&gt;verifiable knowledge infrastructure&lt;/strong&gt;. A layer that sits between the model and its output, ensuring that every claim can be traced to its origin, every source can be checked, and every change is auditable.&lt;/p&gt;

&lt;p&gt;CKS is our open-source contribution to that vision. It's MIT-licensed, production-ready, and actively maintained.&lt;/p&gt;

&lt;p&gt;We're looking for contributors, feedback, and real-world use cases. If you're working on RAG pipelines, knowledge graphs, or AI verification — we'd love to hear from you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Deus-corp/cks-core" rel="noopener noreferrer"&gt;github.com/Deus-corp&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Documentation:&lt;/strong&gt; &lt;a href="https://deus-corp.github.io/cks-core/" rel="noopener noreferrer"&gt;deus-corp.github.io/cks-core&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;LLMs generate. CKS verifies.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
