<?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: Moshe Avdiel</title>
    <description>The latest articles on DEV Community by Moshe Avdiel (@kiponos).</description>
    <link>https://dev.to/kiponos</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%2F2975663%2F7c703462-585e-4d82-9a48-de31931d0415.png</url>
      <title>DEV Community: Moshe Avdiel</title>
      <link>https://dev.to/kiponos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kiponos"/>
    <language>en</language>
    <item>
      <title>The Incident Clock Is the Turn Budget. MCP Schemas Should Not Be Allowed to Steal It</title>
      <dc:creator>Moshe Avdiel</dc:creator>
      <pubDate>Thu, 10 Sep 2026 12:33:20 +0000</pubDate>
      <link>https://dev.to/kiponos/the-incident-clock-is-the-turn-budget-mcp-schemas-should-not-be-allowed-to-steal-it-1ooi</link>
      <guid>https://dev.to/kiponos/the-incident-clock-is-the-turn-budget-mcp-schemas-should-not-be-allowed-to-steal-it-1ooi</guid>
      <description>&lt;p&gt;I have sat next to the shopping-admin wall at 02:14 while Claude Code was &lt;em&gt;this close&lt;/em&gt; to calling the wrong MCP tool.&lt;/p&gt;

&lt;p&gt;Not a model failure. A &lt;strong&gt;posture&lt;/strong&gt; failure.&lt;/p&gt;

&lt;p&gt;Ops people feel this; agent people feel MCP. Same leaf.&lt;/p&gt;

&lt;p&gt;Someone on the floor said, out loud, &lt;strong&gt;the model needs those tool defs&lt;/strong&gt;. Claude Code had started earlier. The tool list was frozen in &lt;code&gt;config.toml&lt;/code&gt; / &lt;code&gt;.mcp.json&lt;/code&gt; / a skill file. The only “safe” move anyone trusted was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kill Claude Code (or its MCP child)&lt;/li&gt;
&lt;li&gt;Edit the server list&lt;/li&gt;
&lt;li&gt;Restart the host&lt;/li&gt;
&lt;li&gt;Lose the plan the model already paid for&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the ceremony. &lt;strong&gt;On-call math: minutes of outage vs tokens of schema&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Aha:&lt;/strong&gt; The model needs the &lt;em&gt;incident&lt;/em&gt;. &lt;code&gt;schema-budget&lt;/code&gt; + &lt;code&gt;max-tokens&lt;/code&gt; protect the clock. Real-time nested state is now a &lt;strong&gt;primitive&lt;/strong&gt; — as native as a hashmap — via &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;Kiponos.io&lt;/a&gt;. The host stays up. The leaf moves. The next tool call already obeys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: Protect the turn clock with two live ints
&lt;/h2&gt;

&lt;p&gt;Agentic programming in 2026 has a public fight: MCP vs CLI vs Skills. The likes on MCP and Grok Build posts are the tell. The industry is stuck on &lt;em&gt;how to expose tools&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The missing primitive is &lt;strong&gt;live nested state&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;Where the roster hid&lt;/th&gt;
&lt;th&gt;What you restart&lt;/th&gt;
&lt;th&gt;What you lose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP schema dump at session start&lt;/td&gt;
&lt;td&gt;The host, sometimes the child &lt;code&gt;npx&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;16–72% of the window before the user speaks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;~/.grok/config.toml&lt;/code&gt; / Cursor &lt;code&gt;mcp.json&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;The open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SKILL.md / AGENTS.md&lt;/td&gt;
&lt;td&gt;The next turn, sometimes the host&lt;/td&gt;
&lt;td&gt;Context you already bought&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Just reconnect the server”&lt;/td&gt;
&lt;td&gt;The MCP session&lt;/td&gt;
&lt;td&gt;Tool-space you finally had right&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;On-call math: minutes of outage vs tokens of schema&lt;/p&gt;

&lt;p&gt;That is not a protocol bug you wait out. That is a process that cannot &lt;code&gt;get()&lt;/code&gt; a tree that moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams believe
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belief&lt;/th&gt;
&lt;th&gt;Production&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Skills will progressive-disclose it&lt;/td&gt;
&lt;td&gt;Skills are files. Files do not fan out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A bigger context window fixes tool overload&lt;/td&gt;
&lt;td&gt;1M tokens still rot; selection still drops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Put the SDK in the SPA so the tile matches&lt;/td&gt;
&lt;td&gt;Connect tokens do not belong in a browser&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature flags cover MCP write&lt;/td&gt;
&lt;td&gt;Flags are another product, another delay&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What is Kiponos here
&lt;/h2&gt;

&lt;p&gt;Kiponos is a &lt;strong&gt;live nested config hub&lt;/strong&gt;. Dashboard edit → WebSocket delta → in-memory tree on every connected process. Hot-path &lt;code&gt;get()&lt;/code&gt; is a local map lookup. One WebSocket per process lifetime.&lt;/p&gt;

&lt;p&gt;It is not an MCP server. It is not a Skill. It is the &lt;strong&gt;control plane those things do not ship&lt;/strong&gt;: which tools may run, how fat a result may be, whether execute is allowed, whether a child inherits posture — &lt;em&gt;this turn&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Profile shape: &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;. The leaf in this story is &lt;code&gt;max-tokens&lt;/code&gt; under &lt;code&gt;examples/agentic-mcp-1007-pm-turn-clock/max-tokens&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&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%2Fnd16agwiucmv941jo95l.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%2Fnd16agwiucmv941jo95l.png" alt="Architecture diagram" width="800" height="36"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model still calls tools. The wrapper reads &lt;code&gt;max-tokens&lt;/code&gt; &lt;strong&gt;before&lt;/strong&gt; the call. No schema dump policy in argv.&lt;/p&gt;

&lt;h2&gt;
  
  
  Config tree
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;examples/agentic-mcp-1007-pm-turn-clock&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;max-tokens&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8000&lt;/span&gt;
  &lt;span class="na"&gt;schema-budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4000"&lt;/span&gt;
  &lt;span class="na"&gt;result-cap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000"&lt;/span&gt;
  &lt;span class="na"&gt;tool-search&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
  &lt;span class="na"&gt;execute-gate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plan"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eight-plus keys when you pair &lt;code&gt;max-tokens&lt;/code&gt; with sister dials (budget, mute, pause). They move together on the shopping-admin wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;p&gt;Java tool wrapper (Claude Code just &lt;em&gt;calls&lt;/em&gt; it):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Kiponos&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Folder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Folder&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Kiponos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createForCurrentTeam&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFolder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"examples/agentic-mcp-1007-pm-turn-clock"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;roster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;valueOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"max-tokens"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Claude Code tool: refuse the dangerous MCP call when posture moved&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python peer:&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;kiponos&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;

&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quiet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;posture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;examples/agentic-mcp-1007-pm-turn-clock/max-tokens&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;live&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posture&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Protect the turn clock with two live ints gated live — host not restarted&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React/Angular: &lt;strong&gt;Node BFF&lt;/strong&gt; &lt;code&gt;@kiponos/react/server&lt;/code&gt; / &lt;code&gt;@kiponos/angular/server&lt;/code&gt;. SPA never holds Connect tokens.&lt;/p&gt;

&lt;p&gt;Runnable mesh: &lt;code&gt;https://github.com/kiponos-io/kiponos-io/tree/master/examples/java/agentic-mcp-1007-pm-turn-clock&lt;/code&gt; — &lt;code&gt;./gradlew test run&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Without Kiponos&lt;/th&gt;
&lt;th&gt;With Kiponos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Three MCP servers at boot&lt;/td&gt;
&lt;td&gt;72% of the window gone&lt;/td&gt;
&lt;td&gt;Live roster / schema-budget; dump shrinks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User says “no writes” mid-turn&lt;/td&gt;
&lt;td&gt;Restart Claude Code&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;max-tokens&lt;/code&gt;; next call already denies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second host started earlier&lt;/td&gt;
&lt;td&gt;Paste the json into chat&lt;/td&gt;
&lt;td&gt;Both &lt;code&gt;get()&lt;/code&gt; the same leaf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subagent spawned&lt;/td&gt;
&lt;td&gt;Frozen argv copy&lt;/td&gt;
&lt;td&gt;Child &lt;code&gt;get()&lt;/code&gt;s &lt;code&gt;inherit-posture&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool returns 500k tokens&lt;/td&gt;
&lt;td&gt;Context rot, doom loop&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;result-cap&lt;/code&gt; in the wrapper&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Performance (this path)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wrapper &lt;code&gt;get()&lt;/code&gt; is in-process after bootstrap.&lt;/li&gt;
&lt;li&gt;One WebSocket per Claude Code lifetime — not per MCP call.&lt;/li&gt;
&lt;li&gt;A dashboard edit is a &lt;strong&gt;delta&lt;/strong&gt; of &lt;code&gt;max-tokens&lt;/code&gt;, not a config.toml reload.&lt;/li&gt;
&lt;li&gt;You do not spend model tokens to “please restart Claude Code.”&lt;/li&gt;
&lt;li&gt;Schema tax is optional once the live set is small.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compare to 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;Honest fit&lt;/th&gt;
&lt;th&gt;Why it still restarts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;More MCP servers&lt;/td&gt;
&lt;td&gt;More integrations&lt;/td&gt;
&lt;td&gt;More schema, worse selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills progressive disclosure&lt;/td&gt;
&lt;td&gt;Good docs, lazy load&lt;/td&gt;
&lt;td&gt;Not a multi-host bus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code tool search&lt;/td&gt;
&lt;td&gt;Better client&lt;/td&gt;
&lt;td&gt;Other hosts still dump&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis poll in the tool&lt;/td&gt;
&lt;td&gt;Shared, extra RTT&lt;/td&gt;
&lt;td&gt;You invented a hub with worse UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature-flag SaaS&lt;/td&gt;
&lt;td&gt;Product experiments&lt;/td&gt;
&lt;td&gt;Rarely session-safe for MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kill -9 the npx child&lt;/td&gt;
&lt;td&gt;Janitor&lt;/td&gt;
&lt;td&gt;The turn still died&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When not to use Kiponos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool schema itself changed (new argument)&lt;/td&gt;
&lt;td&gt;That &lt;em&gt;is&lt;/em&gt; a code/Claude Code restart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret rotation of Connect / MCP OAuth tokens&lt;/td&gt;
&lt;td&gt;Credentials are not live knobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off local script, no peers&lt;/td&gt;
&lt;td&gt;A hub is overkill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser-only “SDK in the SPA”&lt;/td&gt;
&lt;td&gt;Forbidden — tokens leak or defaults lie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pair &lt;code&gt;max-tokens&lt;/code&gt; with a sister dial
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;max-tokens&lt;/code&gt; rarely moves alone on the shopping-admin wall. Pair it with &lt;code&gt;schema-budget&lt;/code&gt;, &lt;code&gt;result-cap&lt;/code&gt;, or &lt;code&gt;execute-gate&lt;/code&gt; so you do not fix Protect the turn clock with two live ints by inventing a second incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Claude Code is the wrong restart target
&lt;/h2&gt;

&lt;p&gt;Claude Code is good at calling tools. It is not a control plane. Killing it to flip &lt;code&gt;max-tokens&lt;/code&gt; teaches the on-call that judgment requires a process ID. The shopping-admin wall already disagrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started (15 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;TeamPro on &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;kiponos.io&lt;/a&gt; → Connect → &lt;code&gt;KIPONOS_ID&lt;/code&gt; / &lt;code&gt;KIPONOS_ACCESS&lt;/code&gt; / profile &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clone &lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd examples/java/agentic-mcp-1007-pm-turn-clock &amp;amp;&amp;amp; cp kiponos.local.env.example kiponos.local.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;./gradlew test run&lt;/code&gt; — prints &lt;code&gt;examples/agentic-mcp-1007-pm-turn-clock/max-tokens=...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In the dashboard, change &lt;code&gt;max-tokens&lt;/code&gt;. Keep Claude Code up. No MCP reconnect.&lt;/li&gt;
&lt;li&gt;Point the tool wrapper at the same leaf. Do not ship a new server binary to flip Protect the turn clock with two live ints.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/devto-getting-started-developer-guide.md" rel="noopener noreferrer"&gt;Developer Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiponos/getting-started-with-kiponosio-p5k"&gt;Product tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/GETTING-STARTED.md" rel="noopener noreferrer"&gt;GETTING-STARTED.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The moral
&lt;/h2&gt;

&lt;p&gt;If flipping &lt;strong&gt;Protect the turn clock with two live ints&lt;/strong&gt; requires restarting Claude Code or reconnecting MCP, you do not have agentic control. You have a hope with a process ID.&lt;/p&gt;

&lt;p&gt;MCP, Skills, and tools are how agents &lt;em&gt;act&lt;/em&gt;. &lt;strong&gt;Kiponos is the live primitive they do not ship&lt;/strong&gt; — so the shopping-admin wall can change its mind without killing the session.&lt;/p&gt;

&lt;p&gt;How to try: &lt;code&gt;examples/java/agentic-mcp-1007-pm-turn-clock&lt;/code&gt; and &lt;code&gt;./gradlew test&lt;/code&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Part the Dev Community Has Not Named Yet: Live Nested State as a Language Primitive</title>
      <dc:creator>Moshe Avdiel</dc:creator>
      <pubDate>Thu, 10 Sep 2026 11:38:25 +0000</pubDate>
      <link>https://dev.to/kiponos/the-part-the-dev-community-has-not-named-yet-live-nested-state-as-a-language-primitive-6bd</link>
      <guid>https://dev.to/kiponos/the-part-the-dev-community-has-not-named-yet-live-nested-state-as-a-language-primitive-6bd</guid>
      <description>&lt;p&gt;I have sat next to the admin-dashboard wall at 22:19 while Cursor was &lt;em&gt;this close&lt;/em&gt; to calling the wrong MCP tool.&lt;/p&gt;

&lt;p&gt;Not a model failure. A &lt;strong&gt;posture&lt;/strong&gt; failure.&lt;/p&gt;

&lt;p&gt;That is the penetration. Likes on MCP posts are the door. The room is real-time state as native.&lt;/p&gt;

&lt;p&gt;Someone on the floor said, out loud, &lt;strong&gt;we just need better MCP clients&lt;/strong&gt;. Cursor had started earlier. The tool list was frozen in &lt;code&gt;config.toml&lt;/code&gt; / &lt;code&gt;.mcp.json&lt;/code&gt; / a skill file. The only “safe” move anyone trusted was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kill Cursor (or its MCP child)&lt;/li&gt;
&lt;li&gt;Edit the server list&lt;/li&gt;
&lt;li&gt;Restart the host&lt;/li&gt;
&lt;li&gt;Lose the plan the model already paid for&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the ceremony. &lt;strong&gt;Everyone debates MCP vs Skills vs CLI. Almost nobody says 'the process needs a live tree'.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Aha:&lt;/strong&gt; Better clients still freeze. A primitive does not. Kiponos is that primitive: nested, live, in-process. Real-time nested state is now a &lt;strong&gt;primitive&lt;/strong&gt; — as native as a hashmap — via &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;Kiponos.io&lt;/a&gt;. The host stays up. The leaf moves. The next tool call already obeys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: Unaware topic: not another tool standard — a new primitive
&lt;/h2&gt;

&lt;p&gt;Agentic programming in 2026 has a public fight: MCP vs CLI vs Skills. The likes on MCP and Grok Build posts are the tell. The industry is stuck on &lt;em&gt;how to expose tools&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The missing primitive is &lt;strong&gt;live nested state&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;Where the roster hid&lt;/th&gt;
&lt;th&gt;What you restart&lt;/th&gt;
&lt;th&gt;What you lose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP schema dump at session start&lt;/td&gt;
&lt;td&gt;The host, sometimes the child &lt;code&gt;npx&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;16–72% of the window before the user speaks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;~/.grok/config.toml&lt;/code&gt; / Cursor &lt;code&gt;mcp.json&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;td&gt;The open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SKILL.md / AGENTS.md&lt;/td&gt;
&lt;td&gt;The next turn, sometimes the host&lt;/td&gt;
&lt;td&gt;Context you already bought&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Just reconnect the server”&lt;/td&gt;
&lt;td&gt;The MCP session&lt;/td&gt;
&lt;td&gt;Tool-space you finally had right&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Everyone debates MCP vs Skills vs CLI. Almost nobody says 'the process needs a live tree'.&lt;/p&gt;

&lt;p&gt;That is not a protocol bug you wait out. That is a process that cannot &lt;code&gt;get()&lt;/code&gt; a tree that moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams believe
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belief&lt;/th&gt;
&lt;th&gt;Production&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Restart the agent host — it is cheap&lt;/td&gt;
&lt;td&gt;Cheap until 22:19 ate the open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP is the standard so we are done&lt;/td&gt;
&lt;td&gt;MCP is how you call. It is not live posture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills will progressive-disclose it&lt;/td&gt;
&lt;td&gt;Skills are files. Files do not fan out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A bigger context window fixes tool overload&lt;/td&gt;
&lt;td&gt;1M tokens still rot; selection still drops&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What is Kiponos here
&lt;/h2&gt;

&lt;p&gt;Kiponos is a &lt;strong&gt;live nested config hub&lt;/strong&gt;. Dashboard edit → WebSocket delta → in-memory tree on every connected process. Hot-path &lt;code&gt;get()&lt;/code&gt; is a local map lookup. One WebSocket per process lifetime.&lt;/p&gt;

&lt;p&gt;It is not an MCP server. It is not a Skill. It is the &lt;strong&gt;control plane those things do not ship&lt;/strong&gt;: which tools may run, how fat a result may be, whether execute is allowed, whether a child inherits posture — &lt;em&gt;this turn&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Profile shape: &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;. The leaf in this story is &lt;code&gt;shared-truth&lt;/code&gt; under &lt;code&gt;examples/agentic-mcp-1007-am-unaware-primitive/shared-truth&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&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%2Fj3ihsf9m5t2pdb5zalqi.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%2Fj3ihsf9m5t2pdb5zalqi.png" alt="Architecture diagram" width="800" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model still calls tools. The wrapper reads &lt;code&gt;shared-truth&lt;/code&gt; &lt;strong&gt;before&lt;/strong&gt; the call. No schema dump policy in argv.&lt;/p&gt;

&lt;h2&gt;
  
  
  Config tree
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;examples/agentic-mcp-1007-am-unaware-primitive&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;shared-truth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;live&lt;/span&gt;
  &lt;span class="na"&gt;schema-budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4000"&lt;/span&gt;
  &lt;span class="na"&gt;result-cap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000"&lt;/span&gt;
  &lt;span class="na"&gt;tool-search&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
  &lt;span class="na"&gt;execute-gate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plan"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eight-plus keys when you pair &lt;code&gt;shared-truth&lt;/code&gt; with sister dials (budget, mute, pause). They move together on the admin-dashboard wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;p&gt;Java tool wrapper (Cursor just &lt;em&gt;calls&lt;/em&gt; it):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Kiponos&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Folder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Folder&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Kiponos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createForCurrentTeam&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFolder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"examples/agentic-mcp-1007-am-unaware-primitive"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;roster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;valueOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"shared-truth"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Cursor tool: refuse the dangerous MCP call when posture moved&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python peer:&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;kiponos&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;

&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quiet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;posture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;examples/agentic-mcp-1007-am-unaware-primitive/shared-truth&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;live&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posture&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Unaware topic: not another tool standard — a new primitive gated live — host not restarted&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React/Angular: &lt;strong&gt;Node BFF&lt;/strong&gt; &lt;code&gt;@kiponos/react/server&lt;/code&gt; / &lt;code&gt;@kiponos/angular/server&lt;/code&gt;. SPA never holds Connect tokens.&lt;/p&gt;

&lt;p&gt;Runnable mesh: &lt;code&gt;https://github.com/kiponos-io/kiponos-io/tree/master/examples/java/agentic-mcp-1007-am-unaware-primitive&lt;/code&gt; — &lt;code&gt;./gradlew test run&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Without Kiponos&lt;/th&gt;
&lt;th&gt;With Kiponos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Three MCP servers at boot&lt;/td&gt;
&lt;td&gt;72% of the window gone&lt;/td&gt;
&lt;td&gt;Live roster / schema-budget; dump shrinks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User says “no writes” mid-turn&lt;/td&gt;
&lt;td&gt;Restart Cursor&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;shared-truth&lt;/code&gt;; next call already denies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second host started earlier&lt;/td&gt;
&lt;td&gt;Paste the json into chat&lt;/td&gt;
&lt;td&gt;Both &lt;code&gt;get()&lt;/code&gt; the same leaf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subagent spawned&lt;/td&gt;
&lt;td&gt;Frozen argv copy&lt;/td&gt;
&lt;td&gt;Child &lt;code&gt;get()&lt;/code&gt;s &lt;code&gt;inherit-posture&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool returns 500k tokens&lt;/td&gt;
&lt;td&gt;Context rot, doom loop&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;result-cap&lt;/code&gt; in the wrapper&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Performance (this path)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wrapper &lt;code&gt;get()&lt;/code&gt; is in-process after bootstrap.&lt;/li&gt;
&lt;li&gt;One WebSocket per Cursor lifetime — not per MCP call.&lt;/li&gt;
&lt;li&gt;A dashboard edit is a &lt;strong&gt;delta&lt;/strong&gt; of &lt;code&gt;shared-truth&lt;/code&gt;, not a config.toml reload.&lt;/li&gt;
&lt;li&gt;You do not spend model tokens to “please restart Cursor.”&lt;/li&gt;
&lt;li&gt;Schema tax is optional once the live set is small.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compare to 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;Honest fit&lt;/th&gt;
&lt;th&gt;Why it still restarts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;More MCP servers&lt;/td&gt;
&lt;td&gt;More integrations&lt;/td&gt;
&lt;td&gt;More schema, worse selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills progressive disclosure&lt;/td&gt;
&lt;td&gt;Good docs, lazy load&lt;/td&gt;
&lt;td&gt;Not a multi-host bus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code tool search&lt;/td&gt;
&lt;td&gt;Better client&lt;/td&gt;
&lt;td&gt;Other hosts still dump&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis poll in the tool&lt;/td&gt;
&lt;td&gt;Shared, extra RTT&lt;/td&gt;
&lt;td&gt;You invented a hub with worse UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature-flag SaaS&lt;/td&gt;
&lt;td&gt;Product experiments&lt;/td&gt;
&lt;td&gt;Rarely session-safe for MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kill -9 the npx child&lt;/td&gt;
&lt;td&gt;Janitor&lt;/td&gt;
&lt;td&gt;The turn still died&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When not to use Kiponos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool schema itself changed (new argument)&lt;/td&gt;
&lt;td&gt;That &lt;em&gt;is&lt;/em&gt; a code/Cursor restart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret rotation of Connect / MCP OAuth tokens&lt;/td&gt;
&lt;td&gt;Credentials are not live knobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off local script, no peers&lt;/td&gt;
&lt;td&gt;A hub is overkill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser-only “SDK in the SPA”&lt;/td&gt;
&lt;td&gt;Forbidden — tokens leak or defaults lie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pair &lt;code&gt;shared-truth&lt;/code&gt; with a sister dial
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;shared-truth&lt;/code&gt; rarely moves alone on the admin-dashboard wall. Pair it with &lt;code&gt;schema-budget&lt;/code&gt;, &lt;code&gt;result-cap&lt;/code&gt;, or &lt;code&gt;execute-gate&lt;/code&gt; so you do not fix Unaware topic: not another tool standard — a new primitive by inventing a second incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Cursor is the wrong restart target
&lt;/h2&gt;

&lt;p&gt;Cursor is good at calling tools. It is not a control plane. Killing it to flip &lt;code&gt;shared-truth&lt;/code&gt; teaches the on-call that judgment requires a process ID. The admin-dashboard wall already disagrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started (15 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;TeamPro on &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;kiponos.io&lt;/a&gt; → Connect → &lt;code&gt;KIPONOS_ID&lt;/code&gt; / &lt;code&gt;KIPONOS_ACCESS&lt;/code&gt; / profile &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clone &lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd examples/java/agentic-mcp-1007-am-unaware-primitive &amp;amp;&amp;amp; cp kiponos.local.env.example kiponos.local.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;./gradlew test run&lt;/code&gt; — prints &lt;code&gt;examples/agentic-mcp-1007-am-unaware-primitive/shared-truth=...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In the dashboard, change &lt;code&gt;shared-truth&lt;/code&gt;. Keep Cursor up. No MCP reconnect.&lt;/li&gt;
&lt;li&gt;Point the tool wrapper at the same leaf. Do not ship a new server binary to flip Unaware topic: not another tool standard — a new primitive.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/devto-getting-started-developer-guide.md" rel="noopener noreferrer"&gt;Developer Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiponos/getting-started-with-kiponosio-p5k"&gt;Product tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/GETTING-STARTED.md" rel="noopener noreferrer"&gt;GETTING-STARTED.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The moral
&lt;/h2&gt;

&lt;p&gt;If flipping &lt;strong&gt;Unaware topic: not another tool standard — a new primitive&lt;/strong&gt; requires restarting Cursor or reconnecting MCP, you do not have agentic control. You have a hope with a process ID.&lt;/p&gt;

&lt;p&gt;MCP, Skills, and tools are how agents &lt;em&gt;act&lt;/em&gt;. &lt;strong&gt;Kiponos is the live primitive they do not ship&lt;/strong&gt; — so the admin-dashboard wall can change its mind without killing the session.&lt;/p&gt;

&lt;p&gt;How to try: &lt;code&gt;examples/java/agentic-mcp-1007-am-unaware-primitive&lt;/code&gt; and &lt;code&gt;./gradlew test&lt;/code&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MCP Wants Stateless Transport at Hyperscale. Your Agent Still Has Sticky Process Memory</title>
      <dc:creator>Moshe Avdiel</dc:creator>
      <pubDate>Thu, 10 Sep 2026 10:43:11 +0000</pubDate>
      <link>https://dev.to/kiponos/mcp-wants-stateless-transport-at-hyperscale-your-agent-still-has-sticky-process-memory-57ag</link>
      <guid>https://dev.to/kiponos/mcp-wants-stateless-transport-at-hyperscale-your-agent-still-has-sticky-process-memory-57ag</guid>
      <description>&lt;p&gt;I have sat next to the travel-coordinator wall at 02:14 while Cursor was &lt;em&gt;this close&lt;/em&gt; to calling the wrong MCP tool.&lt;/p&gt;

&lt;p&gt;Not a model failure. A &lt;strong&gt;posture&lt;/strong&gt; failure.&lt;/p&gt;

&lt;p&gt;Spec evolution does not empty argv. Live hub is orthogonal to transport.&lt;/p&gt;

&lt;p&gt;Someone on the floor said, out loud, &lt;strong&gt;wait for streamable HTTP to fix state&lt;/strong&gt;. Cursor had started earlier. The tool list was frozen in &lt;code&gt;config.toml&lt;/code&gt; / &lt;code&gt;.mcp.json&lt;/code&gt; / a skill file. The only “safe” move anyone trusted was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kill Cursor (or its MCP child)&lt;/li&gt;
&lt;li&gt;Edit the server list&lt;/li&gt;
&lt;li&gt;Restart the host&lt;/li&gt;
&lt;li&gt;Lose the plan the model already paid for&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the ceremony. &lt;strong&gt;Roadmap: stateless HTTP for scale. Local Grok Build still caches the tool list in RAM from boot.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Aha:&lt;/strong&gt; Transport is plumbing. Posture is &lt;code&gt;get()&lt;/code&gt;. Do not confuse them. Real-time nested state is now a &lt;strong&gt;primitive&lt;/strong&gt; — as native as a hashmap — via &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;Kiponos.io&lt;/a&gt;. The host stays up. The leaf moves. The next tool call already obeys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: Transport statelessness ≠ session posture
&lt;/h2&gt;

&lt;p&gt;Agentic programming in 2026 has a public fight: MCP vs CLI vs Skills. The likes on MCP and Grok Build posts are the tell. The industry is stuck on &lt;em&gt;how to expose tools&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The missing primitive is &lt;strong&gt;live nested state&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;Where the roster hid&lt;/th&gt;
&lt;th&gt;What you restart&lt;/th&gt;
&lt;th&gt;What you lose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP schema dump at session start&lt;/td&gt;
&lt;td&gt;The host, sometimes the child &lt;code&gt;npx&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;16–72% of the window before the user speaks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;~/.grok/config.toml&lt;/code&gt; / Cursor &lt;code&gt;mcp.json&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;td&gt;The open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SKILL.md / AGENTS.md&lt;/td&gt;
&lt;td&gt;The next turn, sometimes the host&lt;/td&gt;
&lt;td&gt;Context you already bought&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Just reconnect the server”&lt;/td&gt;
&lt;td&gt;The MCP session&lt;/td&gt;
&lt;td&gt;Tool-space you finally had right&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Roadmap: stateless HTTP for scale. Local Grok Build still caches the tool list in RAM from boot.&lt;/p&gt;

&lt;p&gt;That is not a protocol bug you wait out. That is a process that cannot &lt;code&gt;get()&lt;/code&gt; a tree that moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams believe
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belief&lt;/th&gt;
&lt;th&gt;Production&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP is the standard so we are done&lt;/td&gt;
&lt;td&gt;MCP is how you call. It is not live posture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills will progressive-disclose it&lt;/td&gt;
&lt;td&gt;Skills are files. Files do not fan out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A bigger context window fixes tool overload&lt;/td&gt;
&lt;td&gt;1M tokens still rot; selection still drops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Put the SDK in the SPA so the tile matches&lt;/td&gt;
&lt;td&gt;Connect tokens do not belong in a browser&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What is Kiponos here
&lt;/h2&gt;

&lt;p&gt;Kiponos is a &lt;strong&gt;live nested config hub&lt;/strong&gt;. Dashboard edit → WebSocket delta → in-memory tree on every connected process. Hot-path &lt;code&gt;get()&lt;/code&gt; is a local map lookup. One WebSocket per process lifetime.&lt;/p&gt;

&lt;p&gt;It is not an MCP server. It is not a Skill. It is the &lt;strong&gt;control plane those things do not ship&lt;/strong&gt;: which tools may run, how fat a result may be, whether execute is allowed, whether a child inherits posture — &lt;em&gt;this turn&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Profile shape: &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;. The leaf in this story is &lt;code&gt;shared-truth&lt;/code&gt; under &lt;code&gt;examples/agentic-mcp-1006-pm-hyposcale-stateless/shared-truth&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&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%2F4tqkhxpfvb16hhbqri8w.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%2F4tqkhxpfvb16hhbqri8w.png" alt="Architecture diagram" width="800" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model still calls tools. The wrapper reads &lt;code&gt;shared-truth&lt;/code&gt; &lt;strong&gt;before&lt;/strong&gt; the call. No schema dump policy in argv.&lt;/p&gt;

&lt;h2&gt;
  
  
  Config tree
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;examples/agentic-mcp-1006-pm-hyposcale-stateless&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;shared-truth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;live&lt;/span&gt;
  &lt;span class="na"&gt;schema-budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4000"&lt;/span&gt;
  &lt;span class="na"&gt;result-cap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000"&lt;/span&gt;
  &lt;span class="na"&gt;tool-search&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
  &lt;span class="na"&gt;execute-gate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plan"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eight-plus keys when you pair &lt;code&gt;shared-truth&lt;/code&gt; with sister dials (budget, mute, pause). They move together on the travel-coordinator wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;p&gt;Java tool wrapper (Cursor just &lt;em&gt;calls&lt;/em&gt; it):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Kiponos&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Folder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Folder&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Kiponos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createForCurrentTeam&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFolder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"examples/agentic-mcp-1006-pm-hyposcale-stateless"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;roster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;valueOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"shared-truth"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Cursor tool: refuse the dangerous MCP call when posture moved&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python peer:&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;kiponos&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;

&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quiet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;posture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;examples/agentic-mcp-1006-pm-hyposcale-stateless/shared-truth&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;live&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posture&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Transport statelessness ≠ session posture gated live — host not restarted&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React/Angular: &lt;strong&gt;Node BFF&lt;/strong&gt; &lt;code&gt;@kiponos/react/server&lt;/code&gt; / &lt;code&gt;@kiponos/angular/server&lt;/code&gt;. SPA never holds Connect tokens.&lt;/p&gt;

&lt;p&gt;Runnable mesh: &lt;code&gt;https://github.com/kiponos-io/kiponos-io/tree/master/examples/java/agentic-mcp-1006-pm-hyposcale-stateless&lt;/code&gt; — &lt;code&gt;./gradlew test run&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Without Kiponos&lt;/th&gt;
&lt;th&gt;With Kiponos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Three MCP servers at boot&lt;/td&gt;
&lt;td&gt;72% of the window gone&lt;/td&gt;
&lt;td&gt;Live roster / schema-budget; dump shrinks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User says “no writes” mid-turn&lt;/td&gt;
&lt;td&gt;Restart Cursor&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;shared-truth&lt;/code&gt;; next call already denies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second host started earlier&lt;/td&gt;
&lt;td&gt;Paste the json into chat&lt;/td&gt;
&lt;td&gt;Both &lt;code&gt;get()&lt;/code&gt; the same leaf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subagent spawned&lt;/td&gt;
&lt;td&gt;Frozen argv copy&lt;/td&gt;
&lt;td&gt;Child &lt;code&gt;get()&lt;/code&gt;s &lt;code&gt;inherit-posture&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool returns 500k tokens&lt;/td&gt;
&lt;td&gt;Context rot, doom loop&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;result-cap&lt;/code&gt; in the wrapper&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Performance (this path)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wrapper &lt;code&gt;get()&lt;/code&gt; is in-process after bootstrap.&lt;/li&gt;
&lt;li&gt;One WebSocket per Cursor lifetime — not per MCP call.&lt;/li&gt;
&lt;li&gt;A dashboard edit is a &lt;strong&gt;delta&lt;/strong&gt; of &lt;code&gt;shared-truth&lt;/code&gt;, not a config.toml reload.&lt;/li&gt;
&lt;li&gt;You do not spend model tokens to “please restart Cursor.”&lt;/li&gt;
&lt;li&gt;Schema tax is optional once the live set is small.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compare to 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;Honest fit&lt;/th&gt;
&lt;th&gt;Why it still restarts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;More MCP servers&lt;/td&gt;
&lt;td&gt;More integrations&lt;/td&gt;
&lt;td&gt;More schema, worse selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills progressive disclosure&lt;/td&gt;
&lt;td&gt;Good docs, lazy load&lt;/td&gt;
&lt;td&gt;Not a multi-host bus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code tool search&lt;/td&gt;
&lt;td&gt;Better client&lt;/td&gt;
&lt;td&gt;Other hosts still dump&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis poll in the tool&lt;/td&gt;
&lt;td&gt;Shared, extra RTT&lt;/td&gt;
&lt;td&gt;You invented a hub with worse UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature-flag SaaS&lt;/td&gt;
&lt;td&gt;Product experiments&lt;/td&gt;
&lt;td&gt;Rarely session-safe for MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kill -9 the npx child&lt;/td&gt;
&lt;td&gt;Janitor&lt;/td&gt;
&lt;td&gt;The turn still died&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When not to use Kiponos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool schema itself changed (new argument)&lt;/td&gt;
&lt;td&gt;That &lt;em&gt;is&lt;/em&gt; a code/Cursor restart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret rotation of Connect / MCP OAuth tokens&lt;/td&gt;
&lt;td&gt;Credentials are not live knobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off local script, no peers&lt;/td&gt;
&lt;td&gt;A hub is overkill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser-only “SDK in the SPA”&lt;/td&gt;
&lt;td&gt;Forbidden — tokens leak or defaults lie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pair &lt;code&gt;shared-truth&lt;/code&gt; with a sister dial
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;shared-truth&lt;/code&gt; rarely moves alone on the travel-coordinator wall. Pair it with &lt;code&gt;schema-budget&lt;/code&gt;, &lt;code&gt;result-cap&lt;/code&gt;, or &lt;code&gt;execute-gate&lt;/code&gt; so you do not fix Transport statelessness ≠ session posture by inventing a second incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Cursor is the wrong restart target
&lt;/h2&gt;

&lt;p&gt;Cursor is good at calling tools. It is not a control plane. Killing it to flip &lt;code&gt;shared-truth&lt;/code&gt; teaches the on-call that judgment requires a process ID. The travel-coordinator wall already disagrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started (15 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;TeamPro on &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;kiponos.io&lt;/a&gt; → Connect → &lt;code&gt;KIPONOS_ID&lt;/code&gt; / &lt;code&gt;KIPONOS_ACCESS&lt;/code&gt; / profile &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clone &lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd examples/java/agentic-mcp-1006-pm-hyposcale-stateless &amp;amp;&amp;amp; cp kiponos.local.env.example kiponos.local.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;./gradlew test run&lt;/code&gt; — prints &lt;code&gt;examples/agentic-mcp-1006-pm-hyposcale-stateless/shared-truth=...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In the dashboard, change &lt;code&gt;shared-truth&lt;/code&gt;. Keep Cursor up. No MCP reconnect.&lt;/li&gt;
&lt;li&gt;Point the tool wrapper at the same leaf. Do not ship a new server binary to flip Transport statelessness ≠ session posture.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/devto-getting-started-developer-guide.md" rel="noopener noreferrer"&gt;Developer Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiponos/getting-started-with-kiponosio-p5k"&gt;Product tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/GETTING-STARTED.md" rel="noopener noreferrer"&gt;GETTING-STARTED.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The moral
&lt;/h2&gt;

&lt;p&gt;If flipping &lt;strong&gt;Transport statelessness ≠ session posture&lt;/strong&gt; requires restarting Cursor or reconnecting MCP, you do not have agentic control. You have a hope with a process ID.&lt;/p&gt;

&lt;p&gt;MCP, Skills, and tools are how agents &lt;em&gt;act&lt;/em&gt;. &lt;strong&gt;Kiponos is the live primitive they do not ship&lt;/strong&gt; — so the travel-coordinator wall can change its mind without killing the session.&lt;/p&gt;

&lt;p&gt;How to try: &lt;code&gt;examples/java/agentic-mcp-1006-pm-hyposcale-stateless&lt;/code&gt; and &lt;code&gt;./gradlew test&lt;/code&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The TUI Said Press r to Refresh MCP. That Is Not Multi-Tab Live State</title>
      <dc:creator>Moshe Avdiel</dc:creator>
      <pubDate>Thu, 10 Sep 2026 09:40:11 +0000</pubDate>
      <link>https://dev.to/kiponos/the-tui-said-press-r-to-refresh-mcp-that-is-not-multi-tab-live-state-1186</link>
      <guid>https://dev.to/kiponos/the-tui-said-press-r-to-refresh-mcp-that-is-not-multi-tab-live-state-1186</guid>
      <description>&lt;p&gt;I have sat next to the senses wall at 14:12 while Grok Build was &lt;em&gt;this close&lt;/em&gt; to calling the wrong MCP tool.&lt;/p&gt;

&lt;p&gt;Not a model failure. A &lt;strong&gt;posture&lt;/strong&gt; failure.&lt;/p&gt;

&lt;p&gt;Kiponos rule: no Refresh buttons as the design. Same moral for agent hosts.&lt;/p&gt;

&lt;p&gt;Someone on the floor said, out loud, &lt;strong&gt;hit r in the MCP tab&lt;/strong&gt;. Grok Build had started earlier. The tool list was frozen in &lt;code&gt;config.toml&lt;/code&gt; / &lt;code&gt;.mcp.json&lt;/code&gt; / a skill file. The only “safe” move anyone trusted was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kill Grok Build (or its MCP child)&lt;/li&gt;
&lt;li&gt;Edit the server list&lt;/li&gt;
&lt;li&gt;Restart the host&lt;/li&gt;
&lt;li&gt;Lose the plan the model already paid for&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the ceremony. &lt;strong&gt;Grok &lt;code&gt;/mcps&lt;/code&gt; refresh after config edits. Other sessions do not hear it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Aha:&lt;/strong&gt; If you needed Refresh, the leaf did not move. Move the leaf. Every host already &lt;code&gt;get()&lt;/code&gt;s. Real-time nested state is now a &lt;strong&gt;primitive&lt;/strong&gt; — as native as a hashmap — via &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;Kiponos.io&lt;/a&gt;. The host stays up. The leaf moves. The next tool call already obeys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: Refresh is a smell. Hub notify is the product.
&lt;/h2&gt;

&lt;p&gt;Agentic programming in 2026 has a public fight: MCP vs CLI vs Skills. The likes on MCP and Grok Build posts are the tell. The industry is stuck on &lt;em&gt;how to expose tools&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The missing primitive is &lt;strong&gt;live nested state&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;Where the roster hid&lt;/th&gt;
&lt;th&gt;What you restart&lt;/th&gt;
&lt;th&gt;What you lose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP schema dump at session start&lt;/td&gt;
&lt;td&gt;The host, sometimes the child &lt;code&gt;npx&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;16–72% of the window before the user speaks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;~/.grok/config.toml&lt;/code&gt; / Cursor &lt;code&gt;mcp.json&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Grok Build&lt;/td&gt;
&lt;td&gt;The open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SKILL.md / AGENTS.md&lt;/td&gt;
&lt;td&gt;The next turn, sometimes the host&lt;/td&gt;
&lt;td&gt;Context you already bought&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Just reconnect the server”&lt;/td&gt;
&lt;td&gt;The MCP session&lt;/td&gt;
&lt;td&gt;Tool-space you finally had right&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Grok &lt;code&gt;/mcps&lt;/code&gt; refresh after config edits. Other sessions do not hear it.&lt;/p&gt;

&lt;p&gt;That is not a protocol bug you wait out. That is a process that cannot &lt;code&gt;get()&lt;/code&gt; a tree that moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams believe
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belief&lt;/th&gt;
&lt;th&gt;Production&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Feature flags cover MCP write&lt;/td&gt;
&lt;td&gt;Flags are another product, another delay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Restart the agent host — it is cheap&lt;/td&gt;
&lt;td&gt;Cheap until 14:12 ate the open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP is the standard so we are done&lt;/td&gt;
&lt;td&gt;MCP is how you call. It is not live posture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills will progressive-disclose it&lt;/td&gt;
&lt;td&gt;Skills are files. Files do not fan out&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What is Kiponos here
&lt;/h2&gt;

&lt;p&gt;Kiponos is a &lt;strong&gt;live nested config hub&lt;/strong&gt;. Dashboard edit → WebSocket delta → in-memory tree on every connected process. Hot-path &lt;code&gt;get()&lt;/code&gt; is a local map lookup. One WebSocket per process lifetime.&lt;/p&gt;

&lt;p&gt;It is not an MCP server. It is not a Skill. It is the &lt;strong&gt;control plane those things do not ship&lt;/strong&gt;: which tools may run, how fat a result may be, whether execute is allowed, whether a child inherits posture — &lt;em&gt;this turn&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Profile shape: &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;. The leaf in this story is &lt;code&gt;tools-allow&lt;/code&gt; under &lt;code&gt;examples/agentic-mcp-1006-am-reload-r/tools-allow&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&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%2Fp94pps8ej9jjm2gskawn.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%2Fp94pps8ej9jjm2gskawn.png" alt="Architecture diagram" width="796" height="38"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model still calls tools. The wrapper reads &lt;code&gt;tools-allow&lt;/code&gt; &lt;strong&gt;before&lt;/strong&gt; the call. No schema dump policy in argv.&lt;/p&gt;

&lt;h2&gt;
  
  
  Config tree
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;examples/agentic-mcp-1006-am-reload-r&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;tools-allow&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;search,read&lt;/span&gt;
  &lt;span class="na"&gt;schema-budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4000"&lt;/span&gt;
  &lt;span class="na"&gt;result-cap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000"&lt;/span&gt;
  &lt;span class="na"&gt;tool-search&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
  &lt;span class="na"&gt;execute-gate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plan"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eight-plus keys when you pair &lt;code&gt;tools-allow&lt;/code&gt; with sister dials (budget, mute, pause). They move together on the senses wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;p&gt;Java tool wrapper (Grok Build just &lt;em&gt;calls&lt;/em&gt; it):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Kiponos&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Folder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Folder&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Kiponos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createForCurrentTeam&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFolder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"examples/agentic-mcp-1006-am-reload-r"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;roster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;valueOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"tools-allow"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Grok Build tool: refuse the dangerous MCP call when posture moved&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python peer:&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;kiponos&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;

&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quiet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;posture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;examples/agentic-mcp-1006-am-reload-r/tools-allow&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;live&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posture&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Refresh is a smell. Hub notify is the product. gated live — host not restarted&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React/Angular: &lt;strong&gt;Node BFF&lt;/strong&gt; &lt;code&gt;@kiponos/react/server&lt;/code&gt; / &lt;code&gt;@kiponos/angular/server&lt;/code&gt;. SPA never holds Connect tokens.&lt;/p&gt;

&lt;p&gt;Runnable mesh: &lt;code&gt;https://github.com/kiponos-io/kiponos-io/tree/master/examples/java/agentic-mcp-1006-am-reload-r&lt;/code&gt; — &lt;code&gt;./gradlew test run&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Without Kiponos&lt;/th&gt;
&lt;th&gt;With Kiponos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Three MCP servers at boot&lt;/td&gt;
&lt;td&gt;72% of the window gone&lt;/td&gt;
&lt;td&gt;Live roster / schema-budget; dump shrinks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User says “no writes” mid-turn&lt;/td&gt;
&lt;td&gt;Restart Grok Build&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;tools-allow&lt;/code&gt;; next call already denies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second host started earlier&lt;/td&gt;
&lt;td&gt;Paste the json into chat&lt;/td&gt;
&lt;td&gt;Both &lt;code&gt;get()&lt;/code&gt; the same leaf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subagent spawned&lt;/td&gt;
&lt;td&gt;Frozen argv copy&lt;/td&gt;
&lt;td&gt;Child &lt;code&gt;get()&lt;/code&gt;s &lt;code&gt;inherit-posture&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool returns 500k tokens&lt;/td&gt;
&lt;td&gt;Context rot, doom loop&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;result-cap&lt;/code&gt; in the wrapper&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Performance (this path)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wrapper &lt;code&gt;get()&lt;/code&gt; is in-process after bootstrap.&lt;/li&gt;
&lt;li&gt;One WebSocket per Grok Build lifetime — not per MCP call.&lt;/li&gt;
&lt;li&gt;A dashboard edit is a &lt;strong&gt;delta&lt;/strong&gt; of &lt;code&gt;tools-allow&lt;/code&gt;, not a config.toml reload.&lt;/li&gt;
&lt;li&gt;You do not spend model tokens to “please restart Grok Build.”&lt;/li&gt;
&lt;li&gt;Schema tax is optional once the live set is small.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compare to 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;Honest fit&lt;/th&gt;
&lt;th&gt;Why it still restarts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;More MCP servers&lt;/td&gt;
&lt;td&gt;More integrations&lt;/td&gt;
&lt;td&gt;More schema, worse selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills progressive disclosure&lt;/td&gt;
&lt;td&gt;Good docs, lazy load&lt;/td&gt;
&lt;td&gt;Not a multi-host bus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code tool search&lt;/td&gt;
&lt;td&gt;Better client&lt;/td&gt;
&lt;td&gt;Other hosts still dump&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis poll in the tool&lt;/td&gt;
&lt;td&gt;Shared, extra RTT&lt;/td&gt;
&lt;td&gt;You invented a hub with worse UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature-flag SaaS&lt;/td&gt;
&lt;td&gt;Product experiments&lt;/td&gt;
&lt;td&gt;Rarely session-safe for MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kill -9 the npx child&lt;/td&gt;
&lt;td&gt;Janitor&lt;/td&gt;
&lt;td&gt;The turn still died&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When not to use Kiponos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool schema itself changed (new argument)&lt;/td&gt;
&lt;td&gt;That &lt;em&gt;is&lt;/em&gt; a code/Grok Build restart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret rotation of Connect / MCP OAuth tokens&lt;/td&gt;
&lt;td&gt;Credentials are not live knobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off local script, no peers&lt;/td&gt;
&lt;td&gt;A hub is overkill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser-only “SDK in the SPA”&lt;/td&gt;
&lt;td&gt;Forbidden — tokens leak or defaults lie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pair &lt;code&gt;tools-allow&lt;/code&gt; with a sister dial
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;tools-allow&lt;/code&gt; rarely moves alone on the senses wall. Pair it with &lt;code&gt;schema-budget&lt;/code&gt;, &lt;code&gt;result-cap&lt;/code&gt;, or &lt;code&gt;execute-gate&lt;/code&gt; so you do not fix Refresh is a smell. Hub notify is the product. by inventing a second incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Grok Build is the wrong restart target
&lt;/h2&gt;

&lt;p&gt;Grok Build is good at calling tools. It is not a control plane. Killing it to flip &lt;code&gt;tools-allow&lt;/code&gt; teaches the on-call that judgment requires a process ID. The senses wall already disagrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started (15 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;TeamPro on &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;kiponos.io&lt;/a&gt; → Connect → &lt;code&gt;KIPONOS_ID&lt;/code&gt; / &lt;code&gt;KIPONOS_ACCESS&lt;/code&gt; / profile &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clone &lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd examples/java/agentic-mcp-1006-am-reload-r &amp;amp;&amp;amp; cp kiponos.local.env.example kiponos.local.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;./gradlew test run&lt;/code&gt; — prints &lt;code&gt;examples/agentic-mcp-1006-am-reload-r/tools-allow=...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In the dashboard, change &lt;code&gt;tools-allow&lt;/code&gt;. Keep Grok Build up. No MCP reconnect.&lt;/li&gt;
&lt;li&gt;Point the tool wrapper at the same leaf. Do not ship a new server binary to flip Refresh is a smell. Hub notify is the product..&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/devto-getting-started-developer-guide.md" rel="noopener noreferrer"&gt;Developer Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiponos/getting-started-with-kiponosio-p5k"&gt;Product tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/GETTING-STARTED.md" rel="noopener noreferrer"&gt;GETTING-STARTED.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The moral
&lt;/h2&gt;

&lt;p&gt;If flipping &lt;strong&gt;Refresh is a smell. Hub notify is the product.&lt;/strong&gt; requires restarting Grok Build or reconnecting MCP, you do not have agentic control. You have a hope with a process ID.&lt;/p&gt;

&lt;p&gt;MCP, Skills, and tools are how agents &lt;em&gt;act&lt;/em&gt;. &lt;strong&gt;Kiponos is the live primitive they do not ship&lt;/strong&gt; — so the senses wall can change its mind without killing the session.&lt;/p&gt;

&lt;p&gt;How to try: &lt;code&gt;examples/java/agentic-mcp-1006-am-reload-r&lt;/code&gt; and &lt;code&gt;./gradlew test&lt;/code&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>E2B Sandbox Executed the Code. The Policy to Run It Lived in a Sticky Note</title>
      <dc:creator>Moshe Avdiel</dc:creator>
      <pubDate>Thu, 10 Sep 2026 07:06:37 +0000</pubDate>
      <link>https://dev.to/kiponos/e2b-sandbox-executed-the-code-the-policy-to-run-it-lived-in-a-sticky-note-1j0n</link>
      <guid>https://dev.to/kiponos/e2b-sandbox-executed-the-code-the-policy-to-run-it-lived-in-a-sticky-note-1j0n</guid>
      <description>&lt;p&gt;I have sat next to the admin-dashboard wall at 22:19 while Grok Build was &lt;em&gt;this close&lt;/em&gt; to calling the wrong MCP tool.&lt;/p&gt;

&lt;p&gt;Not a model failure. A &lt;strong&gt;posture&lt;/strong&gt; failure.&lt;/p&gt;

&lt;p&gt;Toolradar: E2B MCP for data agents. Cardinal rule still: only what this week needs — live.&lt;/p&gt;

&lt;p&gt;Someone on the floor said, out loud, &lt;strong&gt;it is sandboxed so it is safe&lt;/strong&gt;. Grok Build had started earlier. The tool list was frozen in &lt;code&gt;config.toml&lt;/code&gt; / &lt;code&gt;.mcp.json&lt;/code&gt; / a skill file. The only “safe” move anyone trusted was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kill Grok Build (or its MCP child)&lt;/li&gt;
&lt;li&gt;Edit the server list&lt;/li&gt;
&lt;li&gt;Restart the host&lt;/li&gt;
&lt;li&gt;Lose the plan the model already paid for&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the ceremony. &lt;strong&gt;E2B/MCP code-exec is essential. Whether &lt;em&gt;this&lt;/em&gt; turn may exec is a live gate.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Aha:&lt;/strong&gt; Sandbox is where. &lt;code&gt;execute-gate&lt;/code&gt; is whether. Two different bugs. Real-time nested state is now a &lt;strong&gt;primitive&lt;/strong&gt; — as native as a hashmap — via &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;Kiponos.io&lt;/a&gt;. The host stays up. The leaf moves. The next tool call already obeys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: Sandboxes isolate CPU. They do not isolate policy.
&lt;/h2&gt;

&lt;p&gt;Agentic programming in 2026 has a public fight: MCP vs CLI vs Skills. The likes on MCP and Grok Build posts are the tell. The industry is stuck on &lt;em&gt;how to expose tools&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The missing primitive is &lt;strong&gt;live nested state&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;Where the roster hid&lt;/th&gt;
&lt;th&gt;What you restart&lt;/th&gt;
&lt;th&gt;What you lose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP schema dump at session start&lt;/td&gt;
&lt;td&gt;The host, sometimes the child &lt;code&gt;npx&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;16–72% of the window before the user speaks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;~/.grok/config.toml&lt;/code&gt; / Cursor &lt;code&gt;mcp.json&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Grok Build&lt;/td&gt;
&lt;td&gt;The open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SKILL.md / AGENTS.md&lt;/td&gt;
&lt;td&gt;The next turn, sometimes the host&lt;/td&gt;
&lt;td&gt;Context you already bought&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Just reconnect the server”&lt;/td&gt;
&lt;td&gt;The MCP session&lt;/td&gt;
&lt;td&gt;Tool-space you finally had right&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;E2B/MCP code-exec is essential. Whether &lt;em&gt;this&lt;/em&gt; turn may exec is a live gate.&lt;/p&gt;

&lt;p&gt;That is not a protocol bug you wait out. That is a process that cannot &lt;code&gt;get()&lt;/code&gt; a tree that moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams believe
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belief&lt;/th&gt;
&lt;th&gt;Production&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP is the standard so we are done&lt;/td&gt;
&lt;td&gt;MCP is how you call. It is not live posture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills will progressive-disclose it&lt;/td&gt;
&lt;td&gt;Skills are files. Files do not fan out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A bigger context window fixes tool overload&lt;/td&gt;
&lt;td&gt;1M tokens still rot; selection still drops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Put the SDK in the SPA so the tile matches&lt;/td&gt;
&lt;td&gt;Connect tokens do not belong in a browser&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What is Kiponos here
&lt;/h2&gt;

&lt;p&gt;Kiponos is a &lt;strong&gt;live nested config hub&lt;/strong&gt;. Dashboard edit → WebSocket delta → in-memory tree on every connected process. Hot-path &lt;code&gt;get()&lt;/code&gt; is a local map lookup. One WebSocket per process lifetime.&lt;/p&gt;

&lt;p&gt;It is not an MCP server. It is not a Skill. It is the &lt;strong&gt;control plane those things do not ship&lt;/strong&gt;: which tools may run, how fat a result may be, whether execute is allowed, whether a child inherits posture — &lt;em&gt;this turn&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Profile shape: &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;. The leaf in this story is &lt;code&gt;execute-gate&lt;/code&gt; under &lt;code&gt;examples/agentic-mcp-1005-pm-sandbox-not-posture/execute-gate&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&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%2Fccnj954l7h65okqsgu7l.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%2Fccnj954l7h65okqsgu7l.png" alt="Architecture diagram" width="800" height="36"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model still calls tools. The wrapper reads &lt;code&gt;execute-gate&lt;/code&gt; &lt;strong&gt;before&lt;/strong&gt; the call. No schema dump policy in argv.&lt;/p&gt;

&lt;h2&gt;
  
  
  Config tree
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;examples/agentic-mcp-1005-pm-sandbox-not-posture&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;execute-gate&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;schema-budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4000"&lt;/span&gt;
  &lt;span class="na"&gt;result-cap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000"&lt;/span&gt;
  &lt;span class="na"&gt;tool-search&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
  &lt;span class="na"&gt;execute-gate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plan"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eight-plus keys when you pair &lt;code&gt;execute-gate&lt;/code&gt; with sister dials (budget, mute, pause). They move together on the admin-dashboard wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;p&gt;Java tool wrapper (Grok Build just &lt;em&gt;calls&lt;/em&gt; it):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Kiponos&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Folder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Folder&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Kiponos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createForCurrentTeam&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFolder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"examples/agentic-mcp-1005-pm-sandbox-not-posture"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;roster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;valueOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"execute-gate"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Grok Build tool: refuse the dangerous MCP call when posture moved&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python peer:&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;kiponos&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;

&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quiet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;posture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;examples/agentic-mcp-1005-pm-sandbox-not-posture/execute-gate&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;live&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posture&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sandboxes isolate CPU. They do not isolate policy. gated live — host not restarted&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React/Angular: &lt;strong&gt;Node BFF&lt;/strong&gt; &lt;code&gt;@kiponos/react/server&lt;/code&gt; / &lt;code&gt;@kiponos/angular/server&lt;/code&gt;. SPA never holds Connect tokens.&lt;/p&gt;

&lt;p&gt;Runnable mesh: &lt;code&gt;https://github.com/kiponos-io/kiponos-io/tree/master/examples/java/agentic-mcp-1005-pm-sandbox-not-posture&lt;/code&gt; — &lt;code&gt;./gradlew test run&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Without Kiponos&lt;/th&gt;
&lt;th&gt;With Kiponos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Three MCP servers at boot&lt;/td&gt;
&lt;td&gt;72% of the window gone&lt;/td&gt;
&lt;td&gt;Live roster / schema-budget; dump shrinks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User says “no writes” mid-turn&lt;/td&gt;
&lt;td&gt;Restart Grok Build&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;execute-gate&lt;/code&gt;; next call already denies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second host started earlier&lt;/td&gt;
&lt;td&gt;Paste the json into chat&lt;/td&gt;
&lt;td&gt;Both &lt;code&gt;get()&lt;/code&gt; the same leaf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subagent spawned&lt;/td&gt;
&lt;td&gt;Frozen argv copy&lt;/td&gt;
&lt;td&gt;Child &lt;code&gt;get()&lt;/code&gt;s &lt;code&gt;inherit-posture&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool returns 500k tokens&lt;/td&gt;
&lt;td&gt;Context rot, doom loop&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;result-cap&lt;/code&gt; in the wrapper&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Performance (this path)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wrapper &lt;code&gt;get()&lt;/code&gt; is in-process after bootstrap.&lt;/li&gt;
&lt;li&gt;One WebSocket per Grok Build lifetime — not per MCP call.&lt;/li&gt;
&lt;li&gt;A dashboard edit is a &lt;strong&gt;delta&lt;/strong&gt; of &lt;code&gt;execute-gate&lt;/code&gt;, not a config.toml reload.&lt;/li&gt;
&lt;li&gt;You do not spend model tokens to “please restart Grok Build.”&lt;/li&gt;
&lt;li&gt;Schema tax is optional once the live set is small.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compare to 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;Honest fit&lt;/th&gt;
&lt;th&gt;Why it still restarts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;More MCP servers&lt;/td&gt;
&lt;td&gt;More integrations&lt;/td&gt;
&lt;td&gt;More schema, worse selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills progressive disclosure&lt;/td&gt;
&lt;td&gt;Good docs, lazy load&lt;/td&gt;
&lt;td&gt;Not a multi-host bus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code tool search&lt;/td&gt;
&lt;td&gt;Better client&lt;/td&gt;
&lt;td&gt;Other hosts still dump&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis poll in the tool&lt;/td&gt;
&lt;td&gt;Shared, extra RTT&lt;/td&gt;
&lt;td&gt;You invented a hub with worse UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature-flag SaaS&lt;/td&gt;
&lt;td&gt;Product experiments&lt;/td&gt;
&lt;td&gt;Rarely session-safe for MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kill -9 the npx child&lt;/td&gt;
&lt;td&gt;Janitor&lt;/td&gt;
&lt;td&gt;The turn still died&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When not to use Kiponos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool schema itself changed (new argument)&lt;/td&gt;
&lt;td&gt;That &lt;em&gt;is&lt;/em&gt; a code/Grok Build restart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret rotation of Connect / MCP OAuth tokens&lt;/td&gt;
&lt;td&gt;Credentials are not live knobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off local script, no peers&lt;/td&gt;
&lt;td&gt;A hub is overkill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser-only “SDK in the SPA”&lt;/td&gt;
&lt;td&gt;Forbidden — tokens leak or defaults lie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pair &lt;code&gt;execute-gate&lt;/code&gt; with a sister dial
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;execute-gate&lt;/code&gt; rarely moves alone on the admin-dashboard wall. Pair it with &lt;code&gt;schema-budget&lt;/code&gt;, &lt;code&gt;result-cap&lt;/code&gt;, or &lt;code&gt;execute-gate&lt;/code&gt; so you do not fix Sandboxes isolate CPU. They do not isolate policy. by inventing a second incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Grok Build is the wrong restart target
&lt;/h2&gt;

&lt;p&gt;Grok Build is good at calling tools. It is not a control plane. Killing it to flip &lt;code&gt;execute-gate&lt;/code&gt; teaches the on-call that judgment requires a process ID. The admin-dashboard wall already disagrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started (15 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;TeamPro on &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;kiponos.io&lt;/a&gt; → Connect → &lt;code&gt;KIPONOS_ID&lt;/code&gt; / &lt;code&gt;KIPONOS_ACCESS&lt;/code&gt; / profile &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clone &lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd examples/java/agentic-mcp-1005-pm-sandbox-not-posture &amp;amp;&amp;amp; cp kiponos.local.env.example kiponos.local.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;./gradlew test run&lt;/code&gt; — prints &lt;code&gt;examples/agentic-mcp-1005-pm-sandbox-not-posture/execute-gate=...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In the dashboard, change &lt;code&gt;execute-gate&lt;/code&gt;. Keep Grok Build up. No MCP reconnect.&lt;/li&gt;
&lt;li&gt;Point the tool wrapper at the same leaf. Do not ship a new server binary to flip Sandboxes isolate CPU. They do not isolate policy..&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/devto-getting-started-developer-guide.md" rel="noopener noreferrer"&gt;Developer Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiponos/getting-started-with-kiponosio-p5k"&gt;Product tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/GETTING-STARTED.md" rel="noopener noreferrer"&gt;GETTING-STARTED.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The moral
&lt;/h2&gt;

&lt;p&gt;If flipping &lt;strong&gt;Sandboxes isolate CPU. They do not isolate policy.&lt;/strong&gt; requires restarting Grok Build or reconnecting MCP, you do not have agentic control. You have a hope with a process ID.&lt;/p&gt;

&lt;p&gt;MCP, Skills, and tools are how agents &lt;em&gt;act&lt;/em&gt;. &lt;strong&gt;Kiponos is the live primitive they do not ship&lt;/strong&gt; — so the admin-dashboard wall can change its mind without killing the session.&lt;/p&gt;

&lt;p&gt;How to try: &lt;code&gt;examples/java/agentic-mcp-1005-pm-sandbox-not-posture&lt;/code&gt; and &lt;code&gt;./gradlew test&lt;/code&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Two Agents, One Repo, Two MCP Writes. Nobody Owned the Folder</title>
      <dc:creator>Moshe Avdiel</dc:creator>
      <pubDate>Thu, 10 Sep 2026 06:14:42 +0000</pubDate>
      <link>https://dev.to/kiponos/two-agents-one-repo-two-mcp-writes-nobody-owned-the-folder-2e6n</link>
      <guid>https://dev.to/kiponos/two-agents-one-repo-two-mcp-writes-nobody-owned-the-folder-2e6n</guid>
      <description>&lt;p&gt;I have sat next to the travel-coordinator wall at 21:03 while MCP host was &lt;em&gt;this close&lt;/em&gt; to calling the wrong MCP tool.&lt;/p&gt;

&lt;p&gt;Not a model failure. A &lt;strong&gt;posture&lt;/strong&gt; failure.&lt;/p&gt;

&lt;p&gt;Hevruta/collab patterns exist. Agent folders without a hub become paste-ownership.&lt;/p&gt;

&lt;p&gt;Someone on the floor said, out loud, &lt;strong&gt;you take MCP write, I'll just read — wait, both wrote&lt;/strong&gt;. MCP host had started earlier. The tool list was frozen in &lt;code&gt;config.toml&lt;/code&gt; / &lt;code&gt;.mcp.json&lt;/code&gt; / a skill file. The only “safe” move anyone trusted was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kill MCP host (or its MCP child)&lt;/li&gt;
&lt;li&gt;Edit the server list&lt;/li&gt;
&lt;li&gt;Restart the host&lt;/li&gt;
&lt;li&gt;Lose the plan the model already paid for&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the ceremony. &lt;strong&gt;Shared checkout. Both Grok Build and Cursor thought they were leader.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Aha:&lt;/strong&gt; &lt;code&gt;owner-agent=travel-coordinator&lt;/code&gt;. Unowned writes refuse. No honor system. Real-time nested state is now a &lt;strong&gt;primitive&lt;/strong&gt; — as native as a hashmap — via &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;Kiponos.io&lt;/a&gt;. The host stays up. The leaf moves. The next tool call already obeys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: Live owner for who may call mutating tools
&lt;/h2&gt;

&lt;p&gt;Agentic programming in 2026 has a public fight: MCP vs CLI vs Skills. The likes on MCP and Grok Build posts are the tell. The industry is stuck on &lt;em&gt;how to expose tools&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The missing primitive is &lt;strong&gt;live nested state&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;Where the roster hid&lt;/th&gt;
&lt;th&gt;What you restart&lt;/th&gt;
&lt;th&gt;What you lose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP schema dump at session start&lt;/td&gt;
&lt;td&gt;The host, sometimes the child &lt;code&gt;npx&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;16–72% of the window before the user speaks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;~/.grok/config.toml&lt;/code&gt; / Cursor &lt;code&gt;mcp.json&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;MCP host&lt;/td&gt;
&lt;td&gt;The open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SKILL.md / AGENTS.md&lt;/td&gt;
&lt;td&gt;The next turn, sometimes the host&lt;/td&gt;
&lt;td&gt;Context you already bought&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Just reconnect the server”&lt;/td&gt;
&lt;td&gt;The MCP session&lt;/td&gt;
&lt;td&gt;Tool-space you finally had right&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Shared checkout. Both Grok Build and Cursor thought they were leader.&lt;/p&gt;

&lt;p&gt;That is not a protocol bug you wait out. That is a process that cannot &lt;code&gt;get()&lt;/code&gt; a tree that moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams believe
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belief&lt;/th&gt;
&lt;th&gt;Production&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Put the SDK in the SPA so the tile matches&lt;/td&gt;
&lt;td&gt;Connect tokens do not belong in a browser&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature flags cover MCP write&lt;/td&gt;
&lt;td&gt;Flags are another product, another delay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Restart the agent host — it is cheap&lt;/td&gt;
&lt;td&gt;Cheap until 21:03 ate the open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP is the standard so we are done&lt;/td&gt;
&lt;td&gt;MCP is how you call. It is not live posture&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What is Kiponos here
&lt;/h2&gt;

&lt;p&gt;Kiponos is a &lt;strong&gt;live nested config hub&lt;/strong&gt;. Dashboard edit → WebSocket delta → in-memory tree on every connected process. Hot-path &lt;code&gt;get()&lt;/code&gt; is a local map lookup. One WebSocket per process lifetime.&lt;/p&gt;

&lt;p&gt;It is not an MCP server. It is not a Skill. It is the &lt;strong&gt;control plane those things do not ship&lt;/strong&gt;: which tools may run, how fat a result may be, whether execute is allowed, whether a child inherits posture — &lt;em&gt;this turn&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Profile shape: &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;. The leaf in this story is &lt;code&gt;owner-agent&lt;/code&gt; under &lt;code&gt;examples/agentic-mcp-1005-am-owner-folder/owner-agent&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&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%2Fru17zezqme4fzvj2ynwo.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%2Fru17zezqme4fzvj2ynwo.png" alt="Architecture diagram" width="800" height="36"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model still calls tools. The wrapper reads &lt;code&gt;owner-agent&lt;/code&gt; &lt;strong&gt;before&lt;/strong&gt; the call. No schema dump policy in argv.&lt;/p&gt;

&lt;h2&gt;
  
  
  Config tree
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;examples/agentic-mcp-1005-am-owner-folder&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;owner-agent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;travel-coordinator&lt;/span&gt;
  &lt;span class="na"&gt;schema-budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4000"&lt;/span&gt;
  &lt;span class="na"&gt;result-cap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000"&lt;/span&gt;
  &lt;span class="na"&gt;tool-search&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
  &lt;span class="na"&gt;execute-gate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plan"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eight-plus keys when you pair &lt;code&gt;owner-agent&lt;/code&gt; with sister dials (budget, mute, pause). They move together on the travel-coordinator wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;p&gt;Java tool wrapper (MCP host just &lt;em&gt;calls&lt;/em&gt; it):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Kiponos&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Folder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Folder&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Kiponos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createForCurrentTeam&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFolder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"examples/agentic-mcp-1005-am-owner-folder"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;roster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;valueOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"owner-agent"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// MCP host tool: refuse the dangerous MCP call when posture moved&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python peer:&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;kiponos&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;

&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quiet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;posture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;examples/agentic-mcp-1005-am-owner-folder/owner-agent&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;live&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posture&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Live owner for who may call mutating tools gated live — host not restarted&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React/Angular: &lt;strong&gt;Node BFF&lt;/strong&gt; &lt;code&gt;@kiponos/react/server&lt;/code&gt; / &lt;code&gt;@kiponos/angular/server&lt;/code&gt;. SPA never holds Connect tokens.&lt;/p&gt;

&lt;p&gt;Runnable mesh: &lt;code&gt;https://github.com/kiponos-io/kiponos-io/tree/master/examples/java/agentic-mcp-1005-am-owner-folder&lt;/code&gt; — &lt;code&gt;./gradlew test run&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Without Kiponos&lt;/th&gt;
&lt;th&gt;With Kiponos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Three MCP servers at boot&lt;/td&gt;
&lt;td&gt;72% of the window gone&lt;/td&gt;
&lt;td&gt;Live roster / schema-budget; dump shrinks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User says “no writes” mid-turn&lt;/td&gt;
&lt;td&gt;Restart MCP host&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;owner-agent&lt;/code&gt;; next call already denies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second host started earlier&lt;/td&gt;
&lt;td&gt;Paste the json into chat&lt;/td&gt;
&lt;td&gt;Both &lt;code&gt;get()&lt;/code&gt; the same leaf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subagent spawned&lt;/td&gt;
&lt;td&gt;Frozen argv copy&lt;/td&gt;
&lt;td&gt;Child &lt;code&gt;get()&lt;/code&gt;s &lt;code&gt;inherit-posture&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool returns 500k tokens&lt;/td&gt;
&lt;td&gt;Context rot, doom loop&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;result-cap&lt;/code&gt; in the wrapper&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Performance (this path)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wrapper &lt;code&gt;get()&lt;/code&gt; is in-process after bootstrap.&lt;/li&gt;
&lt;li&gt;One WebSocket per MCP host lifetime — not per MCP call.&lt;/li&gt;
&lt;li&gt;A dashboard edit is a &lt;strong&gt;delta&lt;/strong&gt; of &lt;code&gt;owner-agent&lt;/code&gt;, not a config.toml reload.&lt;/li&gt;
&lt;li&gt;You do not spend model tokens to “please restart MCP host.”&lt;/li&gt;
&lt;li&gt;Schema tax is optional once the live set is small.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compare to 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;Honest fit&lt;/th&gt;
&lt;th&gt;Why it still restarts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;More MCP servers&lt;/td&gt;
&lt;td&gt;More integrations&lt;/td&gt;
&lt;td&gt;More schema, worse selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills progressive disclosure&lt;/td&gt;
&lt;td&gt;Good docs, lazy load&lt;/td&gt;
&lt;td&gt;Not a multi-host bus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code tool search&lt;/td&gt;
&lt;td&gt;Better client&lt;/td&gt;
&lt;td&gt;Other hosts still dump&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis poll in the tool&lt;/td&gt;
&lt;td&gt;Shared, extra RTT&lt;/td&gt;
&lt;td&gt;You invented a hub with worse UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature-flag SaaS&lt;/td&gt;
&lt;td&gt;Product experiments&lt;/td&gt;
&lt;td&gt;Rarely session-safe for MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kill -9 the npx child&lt;/td&gt;
&lt;td&gt;Janitor&lt;/td&gt;
&lt;td&gt;The turn still died&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When not to use Kiponos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool schema itself changed (new argument)&lt;/td&gt;
&lt;td&gt;That &lt;em&gt;is&lt;/em&gt; a code/MCP host restart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret rotation of Connect / MCP OAuth tokens&lt;/td&gt;
&lt;td&gt;Credentials are not live knobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off local script, no peers&lt;/td&gt;
&lt;td&gt;A hub is overkill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser-only “SDK in the SPA”&lt;/td&gt;
&lt;td&gt;Forbidden — tokens leak or defaults lie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pair &lt;code&gt;owner-agent&lt;/code&gt; with a sister dial
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;owner-agent&lt;/code&gt; rarely moves alone on the travel-coordinator wall. Pair it with &lt;code&gt;schema-budget&lt;/code&gt;, &lt;code&gt;result-cap&lt;/code&gt;, or &lt;code&gt;execute-gate&lt;/code&gt; so you do not fix Live owner for who may call mutating tools by inventing a second incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why MCP host is the wrong restart target
&lt;/h2&gt;

&lt;p&gt;MCP host is good at calling tools. It is not a control plane. Killing it to flip &lt;code&gt;owner-agent&lt;/code&gt; teaches the on-call that judgment requires a process ID. The travel-coordinator wall already disagrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started (15 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;TeamPro on &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;kiponos.io&lt;/a&gt; → Connect → &lt;code&gt;KIPONOS_ID&lt;/code&gt; / &lt;code&gt;KIPONOS_ACCESS&lt;/code&gt; / profile &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clone &lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd examples/java/agentic-mcp-1005-am-owner-folder &amp;amp;&amp;amp; cp kiponos.local.env.example kiponos.local.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;./gradlew test run&lt;/code&gt; — prints &lt;code&gt;examples/agentic-mcp-1005-am-owner-folder/owner-agent=...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In the dashboard, change &lt;code&gt;owner-agent&lt;/code&gt;. Keep MCP host up. No MCP reconnect.&lt;/li&gt;
&lt;li&gt;Point the tool wrapper at the same leaf. Do not ship a new server binary to flip Live owner for who may call mutating tools.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/devto-getting-started-developer-guide.md" rel="noopener noreferrer"&gt;Developer Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiponos/getting-started-with-kiponosio-p5k"&gt;Product tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/GETTING-STARTED.md" rel="noopener noreferrer"&gt;GETTING-STARTED.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The moral
&lt;/h2&gt;

&lt;p&gt;If flipping &lt;strong&gt;Live owner for who may call mutating tools&lt;/strong&gt; requires restarting MCP host or reconnecting MCP, you do not have agentic control. You have a hope with a process ID.&lt;/p&gt;

&lt;p&gt;MCP, Skills, and tools are how agents &lt;em&gt;act&lt;/em&gt;. &lt;strong&gt;Kiponos is the live primitive they do not ship&lt;/strong&gt; — so the travel-coordinator wall can change its mind without killing the session.&lt;/p&gt;

&lt;p&gt;How to try: &lt;code&gt;examples/java/agentic-mcp-1005-am-owner-folder&lt;/code&gt; and &lt;code&gt;./gradlew test&lt;/code&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Streaming MCP Results Felt Fast and Still Drowned the Window</title>
      <dc:creator>Moshe Avdiel</dc:creator>
      <pubDate>Thu, 10 Sep 2026 05:02:04 +0000</pubDate>
      <link>https://dev.to/kiponos/streaming-mcp-results-felt-fast-and-still-drowned-the-window-28co</link>
      <guid>https://dev.to/kiponos/streaming-mcp-results-felt-fast-and-still-drowned-the-window-28co</guid>
      <description>&lt;p&gt;I have sat next to the shopping-admin wall at 11:41 while MCP host was &lt;em&gt;this close&lt;/em&gt; to calling the wrong MCP tool.&lt;/p&gt;

&lt;p&gt;Not a model failure. A &lt;strong&gt;posture&lt;/strong&gt; failure.&lt;/p&gt;

&lt;p&gt;MCP roadmap includes streaming. Streaming a 500k result is still a 500k result.&lt;/p&gt;

&lt;p&gt;Someone on the floor said, out loud, &lt;strong&gt;stream it, context will be fine&lt;/strong&gt;. MCP host had started earlier. The tool list was frozen in &lt;code&gt;config.toml&lt;/code&gt; / &lt;code&gt;.mcp.json&lt;/code&gt; / a skill file. The only “safe” move anyone trusted was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kill MCP host (or its MCP child)&lt;/li&gt;
&lt;li&gt;Edit the server list&lt;/li&gt;
&lt;li&gt;Restart the host&lt;/li&gt;
&lt;li&gt;Lose the plan the model already paid for&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the ceremony. &lt;strong&gt;Tokens still land in context; stream just hurts sooner&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Aha:&lt;/strong&gt; Cap first. Stream the cap. &lt;code&gt;result-cap&lt;/code&gt; is the product; streaming is transport. Real-time nested state is now a &lt;strong&gt;primitive&lt;/strong&gt; — as native as a hashmap — via &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;Kiponos.io&lt;/a&gt;. The host stays up. The leaf moves. The next tool call already obeys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: Streaming is not a cap
&lt;/h2&gt;

&lt;p&gt;Agentic programming in 2026 has a public fight: MCP vs CLI vs Skills. The likes on MCP and Grok Build posts are the tell. The industry is stuck on &lt;em&gt;how to expose tools&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The missing primitive is &lt;strong&gt;live nested state&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;Where the roster hid&lt;/th&gt;
&lt;th&gt;What you restart&lt;/th&gt;
&lt;th&gt;What you lose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP schema dump at session start&lt;/td&gt;
&lt;td&gt;The host, sometimes the child &lt;code&gt;npx&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;16–72% of the window before the user speaks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;~/.grok/config.toml&lt;/code&gt; / Cursor &lt;code&gt;mcp.json&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;MCP host&lt;/td&gt;
&lt;td&gt;The open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SKILL.md / AGENTS.md&lt;/td&gt;
&lt;td&gt;The next turn, sometimes the host&lt;/td&gt;
&lt;td&gt;Context you already bought&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Just reconnect the server”&lt;/td&gt;
&lt;td&gt;The MCP session&lt;/td&gt;
&lt;td&gt;Tool-space you finally had right&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Tokens still land in context; stream just hurts sooner&lt;/p&gt;

&lt;p&gt;That is not a protocol bug you wait out. That is a process that cannot &lt;code&gt;get()&lt;/code&gt; a tree that moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams believe
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belief&lt;/th&gt;
&lt;th&gt;Production&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Skills will progressive-disclose it&lt;/td&gt;
&lt;td&gt;Skills are files. Files do not fan out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A bigger context window fixes tool overload&lt;/td&gt;
&lt;td&gt;1M tokens still rot; selection still drops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Put the SDK in the SPA so the tile matches&lt;/td&gt;
&lt;td&gt;Connect tokens do not belong in a browser&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature flags cover MCP write&lt;/td&gt;
&lt;td&gt;Flags are another product, another delay&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What is Kiponos here
&lt;/h2&gt;

&lt;p&gt;Kiponos is a &lt;strong&gt;live nested config hub&lt;/strong&gt;. Dashboard edit → WebSocket delta → in-memory tree on every connected process. Hot-path &lt;code&gt;get()&lt;/code&gt; is a local map lookup. One WebSocket per process lifetime.&lt;/p&gt;

&lt;p&gt;It is not an MCP server. It is not a Skill. It is the &lt;strong&gt;control plane those things do not ship&lt;/strong&gt;: which tools may run, how fat a result may be, whether execute is allowed, whether a child inherits posture — &lt;em&gt;this turn&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Profile shape: &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;. The leaf in this story is &lt;code&gt;result-cap&lt;/code&gt; under &lt;code&gt;examples/agentic-mcp-1004-pm-streaming-noise/result-cap&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&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%2Fcak4v9e8nde87nxvopr2.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%2Fcak4v9e8nde87nxvopr2.png" alt="Architecture diagram" width="791" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model still calls tools. The wrapper reads &lt;code&gt;result-cap&lt;/code&gt; &lt;strong&gt;before&lt;/strong&gt; the call. No schema dump policy in argv.&lt;/p&gt;

&lt;h2&gt;
  
  
  Config tree
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;examples/agentic-mcp-1004-pm-streaming-noise&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;result-cap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2000&lt;/span&gt;
  &lt;span class="na"&gt;schema-budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4000"&lt;/span&gt;
  &lt;span class="na"&gt;result-cap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000"&lt;/span&gt;
  &lt;span class="na"&gt;tool-search&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
  &lt;span class="na"&gt;execute-gate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plan"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eight-plus keys when you pair &lt;code&gt;result-cap&lt;/code&gt; with sister dials (budget, mute, pause). They move together on the shopping-admin wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;p&gt;Java tool wrapper (MCP host just &lt;em&gt;calls&lt;/em&gt; it):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Kiponos&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Folder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Folder&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Kiponos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createForCurrentTeam&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFolder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"examples/agentic-mcp-1004-pm-streaming-noise"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;roster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;valueOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"result-cap"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// MCP host tool: refuse the dangerous MCP call when posture moved&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python peer:&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;kiponos&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;

&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quiet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;posture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;examples/agentic-mcp-1004-pm-streaming-noise/result-cap&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;live&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posture&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Streaming is not a cap gated live — host not restarted&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React/Angular: &lt;strong&gt;Node BFF&lt;/strong&gt; &lt;code&gt;@kiponos/react/server&lt;/code&gt; / &lt;code&gt;@kiponos/angular/server&lt;/code&gt;. SPA never holds Connect tokens.&lt;/p&gt;

&lt;p&gt;Runnable mesh: &lt;code&gt;https://github.com/kiponos-io/kiponos-io/tree/master/examples/java/agentic-mcp-1004-pm-streaming-noise&lt;/code&gt; — &lt;code&gt;./gradlew test run&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Without Kiponos&lt;/th&gt;
&lt;th&gt;With Kiponos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Three MCP servers at boot&lt;/td&gt;
&lt;td&gt;72% of the window gone&lt;/td&gt;
&lt;td&gt;Live roster / schema-budget; dump shrinks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User says “no writes” mid-turn&lt;/td&gt;
&lt;td&gt;Restart MCP host&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;result-cap&lt;/code&gt;; next call already denies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second host started earlier&lt;/td&gt;
&lt;td&gt;Paste the json into chat&lt;/td&gt;
&lt;td&gt;Both &lt;code&gt;get()&lt;/code&gt; the same leaf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subagent spawned&lt;/td&gt;
&lt;td&gt;Frozen argv copy&lt;/td&gt;
&lt;td&gt;Child &lt;code&gt;get()&lt;/code&gt;s &lt;code&gt;inherit-posture&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool returns 500k tokens&lt;/td&gt;
&lt;td&gt;Context rot, doom loop&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;result-cap&lt;/code&gt; in the wrapper&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Performance (this path)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wrapper &lt;code&gt;get()&lt;/code&gt; is in-process after bootstrap.&lt;/li&gt;
&lt;li&gt;One WebSocket per MCP host lifetime — not per MCP call.&lt;/li&gt;
&lt;li&gt;A dashboard edit is a &lt;strong&gt;delta&lt;/strong&gt; of &lt;code&gt;result-cap&lt;/code&gt;, not a config.toml reload.&lt;/li&gt;
&lt;li&gt;You do not spend model tokens to “please restart MCP host.”&lt;/li&gt;
&lt;li&gt;Schema tax is optional once the live set is small.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compare to 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;Honest fit&lt;/th&gt;
&lt;th&gt;Why it still restarts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;More MCP servers&lt;/td&gt;
&lt;td&gt;More integrations&lt;/td&gt;
&lt;td&gt;More schema, worse selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills progressive disclosure&lt;/td&gt;
&lt;td&gt;Good docs, lazy load&lt;/td&gt;
&lt;td&gt;Not a multi-host bus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code tool search&lt;/td&gt;
&lt;td&gt;Better client&lt;/td&gt;
&lt;td&gt;Other hosts still dump&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis poll in the tool&lt;/td&gt;
&lt;td&gt;Shared, extra RTT&lt;/td&gt;
&lt;td&gt;You invented a hub with worse UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature-flag SaaS&lt;/td&gt;
&lt;td&gt;Product experiments&lt;/td&gt;
&lt;td&gt;Rarely session-safe for MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kill -9 the npx child&lt;/td&gt;
&lt;td&gt;Janitor&lt;/td&gt;
&lt;td&gt;The turn still died&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When not to use Kiponos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool schema itself changed (new argument)&lt;/td&gt;
&lt;td&gt;That &lt;em&gt;is&lt;/em&gt; a code/MCP host restart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret rotation of Connect / MCP OAuth tokens&lt;/td&gt;
&lt;td&gt;Credentials are not live knobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off local script, no peers&lt;/td&gt;
&lt;td&gt;A hub is overkill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser-only “SDK in the SPA”&lt;/td&gt;
&lt;td&gt;Forbidden — tokens leak or defaults lie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pair &lt;code&gt;result-cap&lt;/code&gt; with a sister dial
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;result-cap&lt;/code&gt; rarely moves alone on the shopping-admin wall. Pair it with &lt;code&gt;schema-budget&lt;/code&gt;, &lt;code&gt;result-cap&lt;/code&gt;, or &lt;code&gt;execute-gate&lt;/code&gt; so you do not fix Streaming is not a cap by inventing a second incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why MCP host is the wrong restart target
&lt;/h2&gt;

&lt;p&gt;MCP host is good at calling tools. It is not a control plane. Killing it to flip &lt;code&gt;result-cap&lt;/code&gt; teaches the on-call that judgment requires a process ID. The shopping-admin wall already disagrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started (15 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;TeamPro on &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;kiponos.io&lt;/a&gt; → Connect → &lt;code&gt;KIPONOS_ID&lt;/code&gt; / &lt;code&gt;KIPONOS_ACCESS&lt;/code&gt; / profile &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clone &lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd examples/java/agentic-mcp-1004-pm-streaming-noise &amp;amp;&amp;amp; cp kiponos.local.env.example kiponos.local.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;./gradlew test run&lt;/code&gt; — prints &lt;code&gt;examples/agentic-mcp-1004-pm-streaming-noise/result-cap=...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In the dashboard, change &lt;code&gt;result-cap&lt;/code&gt;. Keep MCP host up. No MCP reconnect.&lt;/li&gt;
&lt;li&gt;Point the tool wrapper at the same leaf. Do not ship a new server binary to flip Streaming is not a cap.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/devto-getting-started-developer-guide.md" rel="noopener noreferrer"&gt;Developer Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiponos/getting-started-with-kiponosio-p5k"&gt;Product tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/GETTING-STARTED.md" rel="noopener noreferrer"&gt;GETTING-STARTED.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The moral
&lt;/h2&gt;

&lt;p&gt;If flipping &lt;strong&gt;Streaming is not a cap&lt;/strong&gt; requires restarting MCP host or reconnecting MCP, you do not have agentic control. You have a hope with a process ID.&lt;/p&gt;

&lt;p&gt;MCP, Skills, and tools are how agents &lt;em&gt;act&lt;/em&gt;. &lt;strong&gt;Kiponos is the live primitive they do not ship&lt;/strong&gt; — so the shopping-admin wall can change its mind without killing the session.&lt;/p&gt;

&lt;p&gt;How to try: &lt;code&gt;examples/java/agentic-mcp-1004-pm-streaming-noise&lt;/code&gt; and &lt;code&gt;./gradlew test&lt;/code&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Skills Context Pollution Is MCP Bloat With a Friendlier Name</title>
      <dc:creator>Moshe Avdiel</dc:creator>
      <pubDate>Thu, 10 Sep 2026 03:46:25 +0000</pubDate>
      <link>https://dev.to/kiponos/skills-context-pollution-is-mcp-bloat-with-a-friendlier-name-3le9</link>
      <guid>https://dev.to/kiponos/skills-context-pollution-is-mcp-bloat-with-a-friendlier-name-3le9</guid>
      <description>&lt;p&gt;I have sat next to the mirror-phone wall at 21:03 while Claude Code was &lt;em&gt;this close&lt;/em&gt; to calling the wrong MCP tool.&lt;/p&gt;

&lt;p&gt;Not a model failure. A &lt;strong&gt;posture&lt;/strong&gt; failure.&lt;/p&gt;

&lt;p&gt;Warned in 2026 skills-ecosystem writeups. Quality control cannot be 'hope the marketplace is nice'.&lt;/p&gt;

&lt;p&gt;Someone on the floor said, out loud, &lt;strong&gt;the skill is popular, leave it on&lt;/strong&gt;. Claude Code had started earlier. The tool list was frozen in &lt;code&gt;config.toml&lt;/code&gt; / &lt;code&gt;.mcp.json&lt;/code&gt; / a skill file. The only “safe” move anyone trusted was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kill Claude Code (or its MCP child)&lt;/li&gt;
&lt;li&gt;Edit the server list&lt;/li&gt;
&lt;li&gt;Restart the host&lt;/li&gt;
&lt;li&gt;Lose the plan the model already paid for&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the ceremony. &lt;strong&gt;Dozens of low-quality skills consume budget before the user message&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Aha:&lt;/strong&gt; Popular is not trusted. &lt;code&gt;skill-trust&lt;/code&gt; is the allow-list. Disk can keep the files. Real-time nested state is now a &lt;strong&gt;primitive&lt;/strong&gt; — as native as a hashmap — via &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;Kiponos.io&lt;/a&gt;. The host stays up. The leaf moves. The next tool call already obeys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: Macro-scale skill spam needs a live trust set
&lt;/h2&gt;

&lt;p&gt;Agentic programming in 2026 has a public fight: MCP vs CLI vs Skills. The likes on MCP and Grok Build posts are the tell. The industry is stuck on &lt;em&gt;how to expose tools&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The missing primitive is &lt;strong&gt;live nested state&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;Where the roster hid&lt;/th&gt;
&lt;th&gt;What you restart&lt;/th&gt;
&lt;th&gt;What you lose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP schema dump at session start&lt;/td&gt;
&lt;td&gt;The host, sometimes the child &lt;code&gt;npx&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;16–72% of the window before the user speaks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;~/.grok/config.toml&lt;/code&gt; / Cursor &lt;code&gt;mcp.json&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;The open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SKILL.md / AGENTS.md&lt;/td&gt;
&lt;td&gt;The next turn, sometimes the host&lt;/td&gt;
&lt;td&gt;Context you already bought&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Just reconnect the server”&lt;/td&gt;
&lt;td&gt;The MCP session&lt;/td&gt;
&lt;td&gt;Tool-space you finally had right&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Dozens of low-quality skills consume budget before the user message&lt;/p&gt;

&lt;p&gt;That is not a protocol bug you wait out. That is a process that cannot &lt;code&gt;get()&lt;/code&gt; a tree that moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams believe
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belief&lt;/th&gt;
&lt;th&gt;Production&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A bigger context window fixes tool overload&lt;/td&gt;
&lt;td&gt;1M tokens still rot; selection still drops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Put the SDK in the SPA so the tile matches&lt;/td&gt;
&lt;td&gt;Connect tokens do not belong in a browser&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature flags cover MCP write&lt;/td&gt;
&lt;td&gt;Flags are another product, another delay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Restart the agent host — it is cheap&lt;/td&gt;
&lt;td&gt;Cheap until 21:03 ate the open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What is Kiponos here
&lt;/h2&gt;

&lt;p&gt;Kiponos is a &lt;strong&gt;live nested config hub&lt;/strong&gt;. Dashboard edit → WebSocket delta → in-memory tree on every connected process. Hot-path &lt;code&gt;get()&lt;/code&gt; is a local map lookup. One WebSocket per process lifetime.&lt;/p&gt;

&lt;p&gt;It is not an MCP server. It is not a Skill. It is the &lt;strong&gt;control plane those things do not ship&lt;/strong&gt;: which tools may run, how fat a result may be, whether execute is allowed, whether a child inherits posture — &lt;em&gt;this turn&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Profile shape: &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;. The leaf in this story is &lt;code&gt;skill-trust&lt;/code&gt; under &lt;code&gt;examples/agentic-mcp-1004-am-marketplace-pollute/skill-trust&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&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%2Fuwal89eyoo4m2w4gu841.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%2Fuwal89eyoo4m2w4gu841.png" alt="Architecture diagram" width="791" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model still calls tools. The wrapper reads &lt;code&gt;skill-trust&lt;/code&gt; &lt;strong&gt;before&lt;/strong&gt; the call. No schema dump policy in argv.&lt;/p&gt;

&lt;h2&gt;
  
  
  Config tree
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;examples/agentic-mcp-1004-am-marketplace-pollute&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;skill-trust&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;core,reviewed&lt;/span&gt;
  &lt;span class="na"&gt;schema-budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4000"&lt;/span&gt;
  &lt;span class="na"&gt;result-cap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000"&lt;/span&gt;
  &lt;span class="na"&gt;tool-search&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
  &lt;span class="na"&gt;execute-gate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plan"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eight-plus keys when you pair &lt;code&gt;skill-trust&lt;/code&gt; with sister dials (budget, mute, pause). They move together on the mirror-phone wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;p&gt;Java tool wrapper (Claude Code just &lt;em&gt;calls&lt;/em&gt; it):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Kiponos&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Folder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Folder&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Kiponos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createForCurrentTeam&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFolder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"examples/agentic-mcp-1004-am-marketplace-pollute"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;roster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;valueOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"skill-trust"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Claude Code tool: refuse the dangerous MCP call when posture moved&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python peer:&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;kiponos&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;

&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quiet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;posture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;examples/agentic-mcp-1004-am-marketplace-pollute/skill-trust&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;live&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posture&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Macro-scale skill spam needs a live trust set gated live — host not restarted&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React/Angular: &lt;strong&gt;Node BFF&lt;/strong&gt; &lt;code&gt;@kiponos/react/server&lt;/code&gt; / &lt;code&gt;@kiponos/angular/server&lt;/code&gt;. SPA never holds Connect tokens.&lt;/p&gt;

&lt;p&gt;Runnable mesh: &lt;code&gt;https://github.com/kiponos-io/kiponos-io/tree/master/examples/java/agentic-mcp-1004-am-marketplace-pollute&lt;/code&gt; — &lt;code&gt;./gradlew test run&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Without Kiponos&lt;/th&gt;
&lt;th&gt;With Kiponos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Three MCP servers at boot&lt;/td&gt;
&lt;td&gt;72% of the window gone&lt;/td&gt;
&lt;td&gt;Live roster / schema-budget; dump shrinks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User says “no writes” mid-turn&lt;/td&gt;
&lt;td&gt;Restart Claude Code&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;skill-trust&lt;/code&gt;; next call already denies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second host started earlier&lt;/td&gt;
&lt;td&gt;Paste the json into chat&lt;/td&gt;
&lt;td&gt;Both &lt;code&gt;get()&lt;/code&gt; the same leaf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subagent spawned&lt;/td&gt;
&lt;td&gt;Frozen argv copy&lt;/td&gt;
&lt;td&gt;Child &lt;code&gt;get()&lt;/code&gt;s &lt;code&gt;inherit-posture&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool returns 500k tokens&lt;/td&gt;
&lt;td&gt;Context rot, doom loop&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;result-cap&lt;/code&gt; in the wrapper&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Performance (this path)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wrapper &lt;code&gt;get()&lt;/code&gt; is in-process after bootstrap.&lt;/li&gt;
&lt;li&gt;One WebSocket per Claude Code lifetime — not per MCP call.&lt;/li&gt;
&lt;li&gt;A dashboard edit is a &lt;strong&gt;delta&lt;/strong&gt; of &lt;code&gt;skill-trust&lt;/code&gt;, not a config.toml reload.&lt;/li&gt;
&lt;li&gt;You do not spend model tokens to “please restart Claude Code.”&lt;/li&gt;
&lt;li&gt;Schema tax is optional once the live set is small.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compare to 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;Honest fit&lt;/th&gt;
&lt;th&gt;Why it still restarts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;More MCP servers&lt;/td&gt;
&lt;td&gt;More integrations&lt;/td&gt;
&lt;td&gt;More schema, worse selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills progressive disclosure&lt;/td&gt;
&lt;td&gt;Good docs, lazy load&lt;/td&gt;
&lt;td&gt;Not a multi-host bus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code tool search&lt;/td&gt;
&lt;td&gt;Better client&lt;/td&gt;
&lt;td&gt;Other hosts still dump&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis poll in the tool&lt;/td&gt;
&lt;td&gt;Shared, extra RTT&lt;/td&gt;
&lt;td&gt;You invented a hub with worse UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature-flag SaaS&lt;/td&gt;
&lt;td&gt;Product experiments&lt;/td&gt;
&lt;td&gt;Rarely session-safe for MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kill -9 the npx child&lt;/td&gt;
&lt;td&gt;Janitor&lt;/td&gt;
&lt;td&gt;The turn still died&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When not to use Kiponos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool schema itself changed (new argument)&lt;/td&gt;
&lt;td&gt;That &lt;em&gt;is&lt;/em&gt; a code/Claude Code restart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret rotation of Connect / MCP OAuth tokens&lt;/td&gt;
&lt;td&gt;Credentials are not live knobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off local script, no peers&lt;/td&gt;
&lt;td&gt;A hub is overkill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser-only “SDK in the SPA”&lt;/td&gt;
&lt;td&gt;Forbidden — tokens leak or defaults lie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pair &lt;code&gt;skill-trust&lt;/code&gt; with a sister dial
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;skill-trust&lt;/code&gt; rarely moves alone on the mirror-phone wall. Pair it with &lt;code&gt;schema-budget&lt;/code&gt;, &lt;code&gt;result-cap&lt;/code&gt;, or &lt;code&gt;execute-gate&lt;/code&gt; so you do not fix Macro-scale skill spam needs a live trust set by inventing a second incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Claude Code is the wrong restart target
&lt;/h2&gt;

&lt;p&gt;Claude Code is good at calling tools. It is not a control plane. Killing it to flip &lt;code&gt;skill-trust&lt;/code&gt; teaches the on-call that judgment requires a process ID. The mirror-phone wall already disagrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started (15 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;TeamPro on &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;kiponos.io&lt;/a&gt; → Connect → &lt;code&gt;KIPONOS_ID&lt;/code&gt; / &lt;code&gt;KIPONOS_ACCESS&lt;/code&gt; / profile &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clone &lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd examples/java/agentic-mcp-1004-am-marketplace-pollute &amp;amp;&amp;amp; cp kiponos.local.env.example kiponos.local.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;./gradlew test run&lt;/code&gt; — prints &lt;code&gt;examples/agentic-mcp-1004-am-marketplace-pollute/skill-trust=...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In the dashboard, change &lt;code&gt;skill-trust&lt;/code&gt;. Keep Claude Code up. No MCP reconnect.&lt;/li&gt;
&lt;li&gt;Point the tool wrapper at the same leaf. Do not ship a new server binary to flip Macro-scale skill spam needs a live trust set.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/devto-getting-started-developer-guide.md" rel="noopener noreferrer"&gt;Developer Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiponos/getting-started-with-kiponosio-p5k"&gt;Product tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/GETTING-STARTED.md" rel="noopener noreferrer"&gt;GETTING-STARTED.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The moral
&lt;/h2&gt;

&lt;p&gt;If flipping &lt;strong&gt;Macro-scale skill spam needs a live trust set&lt;/strong&gt; requires restarting Claude Code or reconnecting MCP, you do not have agentic control. You have a hope with a process ID.&lt;/p&gt;

&lt;p&gt;MCP, Skills, and tools are how agents &lt;em&gt;act&lt;/em&gt;. &lt;strong&gt;Kiponos is the live primitive they do not ship&lt;/strong&gt; — so the mirror-phone wall can change its mind without killing the session.&lt;/p&gt;

&lt;p&gt;How to try: &lt;code&gt;examples/java/agentic-mcp-1004-am-marketplace-pollute&lt;/code&gt; and &lt;code&gt;./gradlew test&lt;/code&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Claude Code Deferred MCP Tools. My Other Host Did Not. One Leaf, Both Behave</title>
      <dc:creator>Moshe Avdiel</dc:creator>
      <pubDate>Thu, 10 Sep 2026 02:41:31 +0000</pubDate>
      <link>https://dev.to/kiponos/claude-code-deferred-mcp-tools-my-other-host-did-not-one-leaf-both-behave-5gbi</link>
      <guid>https://dev.to/kiponos/claude-code-deferred-mcp-tools-my-other-host-did-not-one-leaf-both-behave-5gbi</guid>
      <description>&lt;p&gt;I have sat next to the travel-coordinator wall at 00:40 while Claude Code was &lt;em&gt;this close&lt;/em&gt; to calling the wrong MCP tool.&lt;/p&gt;

&lt;p&gt;Not a model failure. A &lt;strong&gt;posture&lt;/strong&gt; failure.&lt;/p&gt;

&lt;p&gt;Same user, two hosts, two context bills. That is why likes are on MCP posts — the pain is felt.&lt;/p&gt;

&lt;p&gt;Someone on the floor said, out loud, &lt;strong&gt;Claude is fine, restart Cursor&lt;/strong&gt;. Claude Code had started earlier. The tool list was frozen in &lt;code&gt;config.toml&lt;/code&gt; / &lt;code&gt;.mcp.json&lt;/code&gt; / a skill file. The only “safe” move anyone trusted was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kill Claude Code (or its MCP child)&lt;/li&gt;
&lt;li&gt;Edit the server list&lt;/li&gt;
&lt;li&gt;Restart the host&lt;/li&gt;
&lt;li&gt;Lose the plan the model already paid for&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the ceremony. &lt;strong&gt;Claude Code deferred load; Cursor/Grok Build session still dumped&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Aha:&lt;/strong&gt; &lt;code&gt;tool-search=on&lt;/code&gt; in the hub. Wrappers honor it even when the host binary is old. Real-time nested state is now a &lt;strong&gt;primitive&lt;/strong&gt; — as native as a hashmap — via &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;Kiponos.io&lt;/a&gt;. The host stays up. The leaf moves. The next tool call already obeys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: Do not depend on which binary implemented tool search
&lt;/h2&gt;

&lt;p&gt;Agentic programming in 2026 has a public fight: MCP vs CLI vs Skills. The likes on MCP and Grok Build posts are the tell. The industry is stuck on &lt;em&gt;how to expose tools&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The missing primitive is &lt;strong&gt;live nested state&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;Where the roster hid&lt;/th&gt;
&lt;th&gt;What you restart&lt;/th&gt;
&lt;th&gt;What you lose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP schema dump at session start&lt;/td&gt;
&lt;td&gt;The host, sometimes the child &lt;code&gt;npx&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;16–72% of the window before the user speaks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;~/.grok/config.toml&lt;/code&gt; / Cursor &lt;code&gt;mcp.json&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;The open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SKILL.md / AGENTS.md&lt;/td&gt;
&lt;td&gt;The next turn, sometimes the host&lt;/td&gt;
&lt;td&gt;Context you already bought&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Just reconnect the server”&lt;/td&gt;
&lt;td&gt;The MCP session&lt;/td&gt;
&lt;td&gt;Tool-space you finally had right&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Claude Code deferred load; Cursor/Grok Build session still dumped&lt;/p&gt;

&lt;p&gt;That is not a protocol bug you wait out. That is a process that cannot &lt;code&gt;get()&lt;/code&gt; a tree that moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams believe
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belief&lt;/th&gt;
&lt;th&gt;Production&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP is the standard so we are done&lt;/td&gt;
&lt;td&gt;MCP is how you call. It is not live posture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills will progressive-disclose it&lt;/td&gt;
&lt;td&gt;Skills are files. Files do not fan out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A bigger context window fixes tool overload&lt;/td&gt;
&lt;td&gt;1M tokens still rot; selection still drops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Put the SDK in the SPA so the tile matches&lt;/td&gt;
&lt;td&gt;Connect tokens do not belong in a browser&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What is Kiponos here
&lt;/h2&gt;

&lt;p&gt;Kiponos is a &lt;strong&gt;live nested config hub&lt;/strong&gt;. Dashboard edit → WebSocket delta → in-memory tree on every connected process. Hot-path &lt;code&gt;get()&lt;/code&gt; is a local map lookup. One WebSocket per process lifetime.&lt;/p&gt;

&lt;p&gt;It is not an MCP server. It is not a Skill. It is the &lt;strong&gt;control plane those things do not ship&lt;/strong&gt;: which tools may run, how fat a result may be, whether execute is allowed, whether a child inherits posture — &lt;em&gt;this turn&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Profile shape: &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;. The leaf in this story is &lt;code&gt;tool-search&lt;/code&gt; under &lt;code&gt;examples/agentic-mcp-1003-pm-claude-tool-search/tool-search&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&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%2Fi2ptvrkc4ftk6y14zkpq.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%2Fi2ptvrkc4ftk6y14zkpq.png" alt="Architecture diagram" width="800" height="36"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model still calls tools. The wrapper reads &lt;code&gt;tool-search&lt;/code&gt; &lt;strong&gt;before&lt;/strong&gt; the call. No schema dump policy in argv.&lt;/p&gt;

&lt;h2&gt;
  
  
  Config tree
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;examples/agentic-mcp-1003-pm-claude-tool-search&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;tool-search&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;on&lt;/span&gt;
  &lt;span class="na"&gt;schema-budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4000"&lt;/span&gt;
  &lt;span class="na"&gt;result-cap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000"&lt;/span&gt;
  &lt;span class="na"&gt;tool-search&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
  &lt;span class="na"&gt;execute-gate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plan"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eight-plus keys when you pair &lt;code&gt;tool-search&lt;/code&gt; with sister dials (budget, mute, pause). They move together on the travel-coordinator wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;p&gt;Java tool wrapper (Claude Code just &lt;em&gt;calls&lt;/em&gt; it):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Kiponos&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Folder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Folder&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Kiponos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createForCurrentTeam&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFolder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"examples/agentic-mcp-1003-pm-claude-tool-search"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;roster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;valueOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"tool-search"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Claude Code tool: refuse the dangerous MCP call when posture moved&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python peer:&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;kiponos&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;

&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quiet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;posture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;examples/agentic-mcp-1003-pm-claude-tool-search/tool-search&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;live&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posture&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Do not depend on which binary implemented tool search gated live — host not restarted&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React/Angular: &lt;strong&gt;Node BFF&lt;/strong&gt; &lt;code&gt;@kiponos/react/server&lt;/code&gt; / &lt;code&gt;@kiponos/angular/server&lt;/code&gt;. SPA never holds Connect tokens.&lt;/p&gt;

&lt;p&gt;Runnable mesh: &lt;code&gt;https://github.com/kiponos-io/kiponos-io/tree/master/examples/java/agentic-mcp-1003-pm-claude-tool-search&lt;/code&gt; — &lt;code&gt;./gradlew test run&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Without Kiponos&lt;/th&gt;
&lt;th&gt;With Kiponos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Three MCP servers at boot&lt;/td&gt;
&lt;td&gt;72% of the window gone&lt;/td&gt;
&lt;td&gt;Live roster / schema-budget; dump shrinks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User says “no writes” mid-turn&lt;/td&gt;
&lt;td&gt;Restart Claude Code&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;tool-search&lt;/code&gt;; next call already denies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second host started earlier&lt;/td&gt;
&lt;td&gt;Paste the json into chat&lt;/td&gt;
&lt;td&gt;Both &lt;code&gt;get()&lt;/code&gt; the same leaf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subagent spawned&lt;/td&gt;
&lt;td&gt;Frozen argv copy&lt;/td&gt;
&lt;td&gt;Child &lt;code&gt;get()&lt;/code&gt;s &lt;code&gt;inherit-posture&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool returns 500k tokens&lt;/td&gt;
&lt;td&gt;Context rot, doom loop&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;result-cap&lt;/code&gt; in the wrapper&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Performance (this path)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wrapper &lt;code&gt;get()&lt;/code&gt; is in-process after bootstrap.&lt;/li&gt;
&lt;li&gt;One WebSocket per Claude Code lifetime — not per MCP call.&lt;/li&gt;
&lt;li&gt;A dashboard edit is a &lt;strong&gt;delta&lt;/strong&gt; of &lt;code&gt;tool-search&lt;/code&gt;, not a config.toml reload.&lt;/li&gt;
&lt;li&gt;You do not spend model tokens to “please restart Claude Code.”&lt;/li&gt;
&lt;li&gt;Schema tax is optional once the live set is small.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compare to 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;Honest fit&lt;/th&gt;
&lt;th&gt;Why it still restarts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;More MCP servers&lt;/td&gt;
&lt;td&gt;More integrations&lt;/td&gt;
&lt;td&gt;More schema, worse selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills progressive disclosure&lt;/td&gt;
&lt;td&gt;Good docs, lazy load&lt;/td&gt;
&lt;td&gt;Not a multi-host bus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code tool search&lt;/td&gt;
&lt;td&gt;Better client&lt;/td&gt;
&lt;td&gt;Other hosts still dump&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis poll in the tool&lt;/td&gt;
&lt;td&gt;Shared, extra RTT&lt;/td&gt;
&lt;td&gt;You invented a hub with worse UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature-flag SaaS&lt;/td&gt;
&lt;td&gt;Product experiments&lt;/td&gt;
&lt;td&gt;Rarely session-safe for MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kill -9 the npx child&lt;/td&gt;
&lt;td&gt;Janitor&lt;/td&gt;
&lt;td&gt;The turn still died&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When not to use Kiponos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool schema itself changed (new argument)&lt;/td&gt;
&lt;td&gt;That &lt;em&gt;is&lt;/em&gt; a code/Claude Code restart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret rotation of Connect / MCP OAuth tokens&lt;/td&gt;
&lt;td&gt;Credentials are not live knobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off local script, no peers&lt;/td&gt;
&lt;td&gt;A hub is overkill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser-only “SDK in the SPA”&lt;/td&gt;
&lt;td&gt;Forbidden — tokens leak or defaults lie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pair &lt;code&gt;tool-search&lt;/code&gt; with a sister dial
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;tool-search&lt;/code&gt; rarely moves alone on the travel-coordinator wall. Pair it with &lt;code&gt;schema-budget&lt;/code&gt;, &lt;code&gt;result-cap&lt;/code&gt;, or &lt;code&gt;execute-gate&lt;/code&gt; so you do not fix Do not depend on which binary implemented tool search by inventing a second incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Claude Code is the wrong restart target
&lt;/h2&gt;

&lt;p&gt;Claude Code is good at calling tools. It is not a control plane. Killing it to flip &lt;code&gt;tool-search&lt;/code&gt; teaches the on-call that judgment requires a process ID. The travel-coordinator wall already disagrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started (15 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;TeamPro on &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;kiponos.io&lt;/a&gt; → Connect → &lt;code&gt;KIPONOS_ID&lt;/code&gt; / &lt;code&gt;KIPONOS_ACCESS&lt;/code&gt; / profile &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clone &lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd examples/java/agentic-mcp-1003-pm-claude-tool-search &amp;amp;&amp;amp; cp kiponos.local.env.example kiponos.local.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;./gradlew test run&lt;/code&gt; — prints &lt;code&gt;examples/agentic-mcp-1003-pm-claude-tool-search/tool-search=...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In the dashboard, change &lt;code&gt;tool-search&lt;/code&gt;. Keep Claude Code up. No MCP reconnect.&lt;/li&gt;
&lt;li&gt;Point the tool wrapper at the same leaf. Do not ship a new server binary to flip Do not depend on which binary implemented tool search.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/devto-getting-started-developer-guide.md" rel="noopener noreferrer"&gt;Developer Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiponos/getting-started-with-kiponosio-p5k"&gt;Product tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/GETTING-STARTED.md" rel="noopener noreferrer"&gt;GETTING-STARTED.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The moral
&lt;/h2&gt;

&lt;p&gt;If flipping &lt;strong&gt;Do not depend on which binary implemented tool search&lt;/strong&gt; requires restarting Claude Code or reconnecting MCP, you do not have agentic control. You have a hope with a process ID.&lt;/p&gt;

&lt;p&gt;MCP, Skills, and tools are how agents &lt;em&gt;act&lt;/em&gt;. &lt;strong&gt;Kiponos is the live primitive they do not ship&lt;/strong&gt; — so the travel-coordinator wall can change its mind without killing the session.&lt;/p&gt;

&lt;p&gt;How to try: &lt;code&gt;examples/java/agentic-mcp-1003-pm-claude-tool-search&lt;/code&gt; and &lt;code&gt;./gradlew test&lt;/code&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Grok Build Speaks MCP Natively. It Still Starts With a Frozen Server List</title>
      <dc:creator>Moshe Avdiel</dc:creator>
      <pubDate>Thu, 10 Sep 2026 01:29:10 +0000</pubDate>
      <link>https://dev.to/kiponos/grok-build-speaks-mcp-natively-it-still-starts-with-a-frozen-server-list-5fpi</link>
      <guid>https://dev.to/kiponos/grok-build-speaks-mcp-natively-it-still-starts-with-a-frozen-server-list-5fpi</guid>
      <description>&lt;p&gt;I have sat next to the senses wall at 21:03 while Cursor was &lt;em&gt;this close&lt;/em&gt; to calling the wrong MCP tool.&lt;/p&gt;

&lt;p&gt;Not a model failure. A &lt;strong&gt;posture&lt;/strong&gt; failure.&lt;/p&gt;

&lt;p&gt;xAI docs: MCP beside built-in tools, namespaced. The TUI can toggle servers — that is UI, not a multi-host hub.&lt;/p&gt;

&lt;p&gt;Someone on the floor said, out loud, &lt;strong&gt;toggle it in /mcps&lt;/strong&gt;. Cursor had started earlier. The tool list was frozen in &lt;code&gt;config.toml&lt;/code&gt; / &lt;code&gt;.mcp.json&lt;/code&gt; / a skill file. The only “safe” move anyone trusted was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kill Cursor (or its MCP child)&lt;/li&gt;
&lt;li&gt;Edit the server list&lt;/li&gt;
&lt;li&gt;Restart the host&lt;/li&gt;
&lt;li&gt;Lose the plan the model already paid for&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the ceremony. &lt;strong&gt;&lt;code&gt;grok mcp add&lt;/code&gt; is delightful. The list is still load-time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Aha:&lt;/strong&gt; Toggles that do not fan out to the other Grok Build on the other laptop are local myths. Hub leaf fans out. Real-time nested state is now a &lt;strong&gt;primitive&lt;/strong&gt; — as native as a hashmap — via &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;Kiponos.io&lt;/a&gt;. The host stays up. The leaf moves. The next tool call already obeys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: First-class MCP in Grok Build is necessary, not sufficient
&lt;/h2&gt;

&lt;p&gt;Agentic programming in 2026 has a public fight: MCP vs CLI vs Skills. The likes on MCP and Grok Build posts are the tell. The industry is stuck on &lt;em&gt;how to expose tools&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The missing primitive is &lt;strong&gt;live nested state&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;Where the roster hid&lt;/th&gt;
&lt;th&gt;What you restart&lt;/th&gt;
&lt;th&gt;What you lose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP schema dump at session start&lt;/td&gt;
&lt;td&gt;The host, sometimes the child &lt;code&gt;npx&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;16–72% of the window before the user speaks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;~/.grok/config.toml&lt;/code&gt; / Cursor &lt;code&gt;mcp.json&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;td&gt;The open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SKILL.md / AGENTS.md&lt;/td&gt;
&lt;td&gt;The next turn, sometimes the host&lt;/td&gt;
&lt;td&gt;Context you already bought&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Just reconnect the server”&lt;/td&gt;
&lt;td&gt;The MCP session&lt;/td&gt;
&lt;td&gt;Tool-space you finally had right&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;grok mcp add&lt;/code&gt; is delightful. The list is still load-time.&lt;/p&gt;

&lt;p&gt;That is not a protocol bug you wait out. That is a process that cannot &lt;code&gt;get()&lt;/code&gt; a tree that moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams believe
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belief&lt;/th&gt;
&lt;th&gt;Production&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Skills will progressive-disclose it&lt;/td&gt;
&lt;td&gt;Skills are files. Files do not fan out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A bigger context window fixes tool overload&lt;/td&gt;
&lt;td&gt;1M tokens still rot; selection still drops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Put the SDK in the SPA so the tile matches&lt;/td&gt;
&lt;td&gt;Connect tokens do not belong in a browser&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature flags cover MCP write&lt;/td&gt;
&lt;td&gt;Flags are another product, another delay&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What is Kiponos here
&lt;/h2&gt;

&lt;p&gt;Kiponos is a &lt;strong&gt;live nested config hub&lt;/strong&gt;. Dashboard edit → WebSocket delta → in-memory tree on every connected process. Hot-path &lt;code&gt;get()&lt;/code&gt; is a local map lookup. One WebSocket per process lifetime.&lt;/p&gt;

&lt;p&gt;It is not an MCP server. It is not a Skill. It is the &lt;strong&gt;control plane those things do not ship&lt;/strong&gt;: which tools may run, how fat a result may be, whether execute is allowed, whether a child inherits posture — &lt;em&gt;this turn&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Profile shape: &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;. The leaf in this story is &lt;code&gt;tools-allow&lt;/code&gt; under &lt;code&gt;examples/agentic-mcp-1003-am-grok-native-mcp/tools-allow&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&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%2F5upclmq7f22j6knfc50c.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%2F5upclmq7f22j6knfc50c.png" alt="Architecture diagram" width="800" height="39"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model still calls tools. The wrapper reads &lt;code&gt;tools-allow&lt;/code&gt; &lt;strong&gt;before&lt;/strong&gt; the call. No schema dump policy in argv.&lt;/p&gt;

&lt;h2&gt;
  
  
  Config tree
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;examples/agentic-mcp-1003-am-grok-native-mcp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;tools-allow&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;search,read&lt;/span&gt;
  &lt;span class="na"&gt;schema-budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4000"&lt;/span&gt;
  &lt;span class="na"&gt;result-cap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000"&lt;/span&gt;
  &lt;span class="na"&gt;tool-search&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
  &lt;span class="na"&gt;execute-gate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plan"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eight-plus keys when you pair &lt;code&gt;tools-allow&lt;/code&gt; with sister dials (budget, mute, pause). They move together on the senses wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;p&gt;Java tool wrapper (Cursor just &lt;em&gt;calls&lt;/em&gt; it):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Kiponos&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Folder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Folder&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Kiponos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createForCurrentTeam&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFolder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"examples/agentic-mcp-1003-am-grok-native-mcp"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;roster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;valueOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"tools-allow"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Cursor tool: refuse the dangerous MCP call when posture moved&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python peer:&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;kiponos&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;

&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quiet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;posture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;examples/agentic-mcp-1003-am-grok-native-mcp/tools-allow&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;live&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posture&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;First-class MCP in Grok Build is necessary, not sufficient gated live — host not restarted&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React/Angular: &lt;strong&gt;Node BFF&lt;/strong&gt; &lt;code&gt;@kiponos/react/server&lt;/code&gt; / &lt;code&gt;@kiponos/angular/server&lt;/code&gt;. SPA never holds Connect tokens.&lt;/p&gt;

&lt;p&gt;Runnable mesh: &lt;code&gt;https://github.com/kiponos-io/kiponos-io/tree/master/examples/java/agentic-mcp-1003-am-grok-native-mcp&lt;/code&gt; — &lt;code&gt;./gradlew test run&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Without Kiponos&lt;/th&gt;
&lt;th&gt;With Kiponos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Three MCP servers at boot&lt;/td&gt;
&lt;td&gt;72% of the window gone&lt;/td&gt;
&lt;td&gt;Live roster / schema-budget; dump shrinks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User says “no writes” mid-turn&lt;/td&gt;
&lt;td&gt;Restart Cursor&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;tools-allow&lt;/code&gt;; next call already denies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second host started earlier&lt;/td&gt;
&lt;td&gt;Paste the json into chat&lt;/td&gt;
&lt;td&gt;Both &lt;code&gt;get()&lt;/code&gt; the same leaf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subagent spawned&lt;/td&gt;
&lt;td&gt;Frozen argv copy&lt;/td&gt;
&lt;td&gt;Child &lt;code&gt;get()&lt;/code&gt;s &lt;code&gt;inherit-posture&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool returns 500k tokens&lt;/td&gt;
&lt;td&gt;Context rot, doom loop&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;result-cap&lt;/code&gt; in the wrapper&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Performance (this path)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wrapper &lt;code&gt;get()&lt;/code&gt; is in-process after bootstrap.&lt;/li&gt;
&lt;li&gt;One WebSocket per Cursor lifetime — not per MCP call.&lt;/li&gt;
&lt;li&gt;A dashboard edit is a &lt;strong&gt;delta&lt;/strong&gt; of &lt;code&gt;tools-allow&lt;/code&gt;, not a config.toml reload.&lt;/li&gt;
&lt;li&gt;You do not spend model tokens to “please restart Cursor.”&lt;/li&gt;
&lt;li&gt;Schema tax is optional once the live set is small.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compare to 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;Honest fit&lt;/th&gt;
&lt;th&gt;Why it still restarts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;More MCP servers&lt;/td&gt;
&lt;td&gt;More integrations&lt;/td&gt;
&lt;td&gt;More schema, worse selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills progressive disclosure&lt;/td&gt;
&lt;td&gt;Good docs, lazy load&lt;/td&gt;
&lt;td&gt;Not a multi-host bus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code tool search&lt;/td&gt;
&lt;td&gt;Better client&lt;/td&gt;
&lt;td&gt;Other hosts still dump&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis poll in the tool&lt;/td&gt;
&lt;td&gt;Shared, extra RTT&lt;/td&gt;
&lt;td&gt;You invented a hub with worse UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature-flag SaaS&lt;/td&gt;
&lt;td&gt;Product experiments&lt;/td&gt;
&lt;td&gt;Rarely session-safe for MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kill -9 the npx child&lt;/td&gt;
&lt;td&gt;Janitor&lt;/td&gt;
&lt;td&gt;The turn still died&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When not to use Kiponos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool schema itself changed (new argument)&lt;/td&gt;
&lt;td&gt;That &lt;em&gt;is&lt;/em&gt; a code/Cursor restart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret rotation of Connect / MCP OAuth tokens&lt;/td&gt;
&lt;td&gt;Credentials are not live knobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off local script, no peers&lt;/td&gt;
&lt;td&gt;A hub is overkill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser-only “SDK in the SPA”&lt;/td&gt;
&lt;td&gt;Forbidden — tokens leak or defaults lie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pair &lt;code&gt;tools-allow&lt;/code&gt; with a sister dial
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;tools-allow&lt;/code&gt; rarely moves alone on the senses wall. Pair it with &lt;code&gt;schema-budget&lt;/code&gt;, &lt;code&gt;result-cap&lt;/code&gt;, or &lt;code&gt;execute-gate&lt;/code&gt; so you do not fix First-class MCP in Grok Build is necessary, not sufficient by inventing a second incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Cursor is the wrong restart target
&lt;/h2&gt;

&lt;p&gt;Cursor is good at calling tools. It is not a control plane. Killing it to flip &lt;code&gt;tools-allow&lt;/code&gt; teaches the on-call that judgment requires a process ID. The senses wall already disagrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started (15 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;TeamPro on &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;kiponos.io&lt;/a&gt; → Connect → &lt;code&gt;KIPONOS_ID&lt;/code&gt; / &lt;code&gt;KIPONOS_ACCESS&lt;/code&gt; / profile &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clone &lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd examples/java/agentic-mcp-1003-am-grok-native-mcp &amp;amp;&amp;amp; cp kiponos.local.env.example kiponos.local.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;./gradlew test run&lt;/code&gt; — prints &lt;code&gt;examples/agentic-mcp-1003-am-grok-native-mcp/tools-allow=...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In the dashboard, change &lt;code&gt;tools-allow&lt;/code&gt;. Keep Cursor up. No MCP reconnect.&lt;/li&gt;
&lt;li&gt;Point the tool wrapper at the same leaf. Do not ship a new server binary to flip First-class MCP in Grok Build is necessary, not sufficient.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/devto-getting-started-developer-guide.md" rel="noopener noreferrer"&gt;Developer Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiponos/getting-started-with-kiponosio-p5k"&gt;Product tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/GETTING-STARTED.md" rel="noopener noreferrer"&gt;GETTING-STARTED.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The moral
&lt;/h2&gt;

&lt;p&gt;If flipping &lt;strong&gt;First-class MCP in Grok Build is necessary, not sufficient&lt;/strong&gt; requires restarting Cursor or reconnecting MCP, you do not have agentic control. You have a hope with a process ID.&lt;/p&gt;

&lt;p&gt;MCP, Skills, and tools are how agents &lt;em&gt;act&lt;/em&gt;. &lt;strong&gt;Kiponos is the live primitive they do not ship&lt;/strong&gt; — so the senses wall can change its mind without killing the session.&lt;/p&gt;

&lt;p&gt;How to try: &lt;code&gt;examples/java/agentic-mcp-1003-am-grok-native-mcp&lt;/code&gt; and &lt;code&gt;./gradlew test&lt;/code&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Stop Bolting State Onto Agents. Real-Time Nested Config Is Native Now</title>
      <dc:creator>Moshe Avdiel</dc:creator>
      <pubDate>Thu, 10 Sep 2026 00:28:29 +0000</pubDate>
      <link>https://dev.to/kiponos/stop-bolting-state-onto-agents-real-time-nested-config-is-native-now-19o7</link>
      <guid>https://dev.to/kiponos/stop-bolting-state-onto-agents-real-time-nested-config-is-native-now-19o7</guid>
      <description>&lt;p&gt;I have sat next to the admin-dashboard wall at 11:41 while Cursor was &lt;em&gt;this close&lt;/em&gt; to calling the wrong MCP tool.&lt;/p&gt;

&lt;p&gt;Not a model failure. A &lt;strong&gt;posture&lt;/strong&gt; failure.&lt;/p&gt;

&lt;p&gt;The revolution is not 'another MCP'. It is treating live nested state like a primitive type.&lt;/p&gt;

&lt;p&gt;Someone on the floor said, out loud, &lt;strong&gt;we will poll Redis inside the tool&lt;/strong&gt;. Cursor had started earlier. The tool list was frozen in &lt;code&gt;config.toml&lt;/code&gt; / &lt;code&gt;.mcp.json&lt;/code&gt; / a skill file. The only “safe” move anyone trusted was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kill Cursor (or its MCP child)&lt;/li&gt;
&lt;li&gt;Edit the server list&lt;/li&gt;
&lt;li&gt;Restart the host&lt;/li&gt;
&lt;li&gt;Lose the plan the model already paid for&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the ceremony. &lt;strong&gt;Every framework rediscovers env, files, flags, Redis, then restarts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Aha:&lt;/strong&gt; You invented a worse hub. &lt;code&gt;get()&lt;/code&gt; is in-process after one WS. That is native. Real-time nested state is now a &lt;strong&gt;primitive&lt;/strong&gt; — as native as a hashmap — via &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;Kiponos.io&lt;/a&gt;. The host stays up. The leaf moves. The next tool call already obeys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: Paradigm shift: embedded live tree, not a sidecar you remember to poll
&lt;/h2&gt;

&lt;p&gt;Agentic programming in 2026 has a public fight: MCP vs CLI vs Skills. The likes on MCP and Grok Build posts are the tell. The industry is stuck on &lt;em&gt;how to expose tools&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The missing primitive is &lt;strong&gt;live nested state&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;Where the roster hid&lt;/th&gt;
&lt;th&gt;What you restart&lt;/th&gt;
&lt;th&gt;What you lose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP schema dump at session start&lt;/td&gt;
&lt;td&gt;The host, sometimes the child &lt;code&gt;npx&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;16–72% of the window before the user speaks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;~/.grok/config.toml&lt;/code&gt; / Cursor &lt;code&gt;mcp.json&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;td&gt;The open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SKILL.md / AGENTS.md&lt;/td&gt;
&lt;td&gt;The next turn, sometimes the host&lt;/td&gt;
&lt;td&gt;Context you already bought&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Just reconnect the server”&lt;/td&gt;
&lt;td&gt;The MCP session&lt;/td&gt;
&lt;td&gt;Tool-space you finally had right&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every framework rediscovers env, files, flags, Redis, then restarts&lt;/p&gt;

&lt;p&gt;That is not a protocol bug you wait out. That is a process that cannot &lt;code&gt;get()&lt;/code&gt; a tree that moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams believe
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belief&lt;/th&gt;
&lt;th&gt;Production&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Put the SDK in the SPA so the tile matches&lt;/td&gt;
&lt;td&gt;Connect tokens do not belong in a browser&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature flags cover MCP write&lt;/td&gt;
&lt;td&gt;Flags are another product, another delay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Restart the agent host — it is cheap&lt;/td&gt;
&lt;td&gt;Cheap until 11:41 ate the open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP is the standard so we are done&lt;/td&gt;
&lt;td&gt;MCP is how you call. It is not live posture&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What is Kiponos here
&lt;/h2&gt;

&lt;p&gt;Kiponos is a &lt;strong&gt;live nested config hub&lt;/strong&gt;. Dashboard edit → WebSocket delta → in-memory tree on every connected process. Hot-path &lt;code&gt;get()&lt;/code&gt; is a local map lookup. One WebSocket per process lifetime.&lt;/p&gt;

&lt;p&gt;It is not an MCP server. It is not a Skill. It is the &lt;strong&gt;control plane those things do not ship&lt;/strong&gt;: which tools may run, how fat a result may be, whether execute is allowed, whether a child inherits posture — &lt;em&gt;this turn&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Profile shape: &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;. The leaf in this story is &lt;code&gt;shared-truth&lt;/code&gt; under &lt;code&gt;examples/agentic-mcp-1002-pm-embedded-native/shared-truth&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&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%2Fj3ihsf9m5t2pdb5zalqi.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%2Fj3ihsf9m5t2pdb5zalqi.png" alt="Architecture diagram" width="800" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model still calls tools. The wrapper reads &lt;code&gt;shared-truth&lt;/code&gt; &lt;strong&gt;before&lt;/strong&gt; the call. No schema dump policy in argv.&lt;/p&gt;

&lt;h2&gt;
  
  
  Config tree
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;examples/agentic-mcp-1002-pm-embedded-native&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;shared-truth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;live&lt;/span&gt;
  &lt;span class="na"&gt;schema-budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4000"&lt;/span&gt;
  &lt;span class="na"&gt;result-cap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000"&lt;/span&gt;
  &lt;span class="na"&gt;tool-search&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
  &lt;span class="na"&gt;execute-gate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plan"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eight-plus keys when you pair &lt;code&gt;shared-truth&lt;/code&gt; with sister dials (budget, mute, pause). They move together on the admin-dashboard wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;p&gt;Java tool wrapper (Cursor just &lt;em&gt;calls&lt;/em&gt; it):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Kiponos&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Folder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Folder&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Kiponos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createForCurrentTeam&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFolder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"examples/agentic-mcp-1002-pm-embedded-native"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;roster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;valueOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"shared-truth"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Cursor tool: refuse the dangerous MCP call when posture moved&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python peer:&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;kiponos&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;

&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quiet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;posture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;examples/agentic-mcp-1002-pm-embedded-native/shared-truth&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;live&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posture&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Paradigm shift: embedded live tree, not a sidecar you remember to poll gated live — host not restarted&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React/Angular: &lt;strong&gt;Node BFF&lt;/strong&gt; &lt;code&gt;@kiponos/react/server&lt;/code&gt; / &lt;code&gt;@kiponos/angular/server&lt;/code&gt;. SPA never holds Connect tokens.&lt;/p&gt;

&lt;p&gt;Runnable mesh: &lt;code&gt;https://github.com/kiponos-io/kiponos-io/tree/master/examples/java/agentic-mcp-1002-pm-embedded-native&lt;/code&gt; — &lt;code&gt;./gradlew test run&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Without Kiponos&lt;/th&gt;
&lt;th&gt;With Kiponos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Three MCP servers at boot&lt;/td&gt;
&lt;td&gt;72% of the window gone&lt;/td&gt;
&lt;td&gt;Live roster / schema-budget; dump shrinks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User says “no writes” mid-turn&lt;/td&gt;
&lt;td&gt;Restart Cursor&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;shared-truth&lt;/code&gt;; next call already denies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second host started earlier&lt;/td&gt;
&lt;td&gt;Paste the json into chat&lt;/td&gt;
&lt;td&gt;Both &lt;code&gt;get()&lt;/code&gt; the same leaf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subagent spawned&lt;/td&gt;
&lt;td&gt;Frozen argv copy&lt;/td&gt;
&lt;td&gt;Child &lt;code&gt;get()&lt;/code&gt;s &lt;code&gt;inherit-posture&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool returns 500k tokens&lt;/td&gt;
&lt;td&gt;Context rot, doom loop&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;result-cap&lt;/code&gt; in the wrapper&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Performance (this path)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wrapper &lt;code&gt;get()&lt;/code&gt; is in-process after bootstrap.&lt;/li&gt;
&lt;li&gt;One WebSocket per Cursor lifetime — not per MCP call.&lt;/li&gt;
&lt;li&gt;A dashboard edit is a &lt;strong&gt;delta&lt;/strong&gt; of &lt;code&gt;shared-truth&lt;/code&gt;, not a config.toml reload.&lt;/li&gt;
&lt;li&gt;You do not spend model tokens to “please restart Cursor.”&lt;/li&gt;
&lt;li&gt;Schema tax is optional once the live set is small.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compare to 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;Honest fit&lt;/th&gt;
&lt;th&gt;Why it still restarts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;More MCP servers&lt;/td&gt;
&lt;td&gt;More integrations&lt;/td&gt;
&lt;td&gt;More schema, worse selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills progressive disclosure&lt;/td&gt;
&lt;td&gt;Good docs, lazy load&lt;/td&gt;
&lt;td&gt;Not a multi-host bus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code tool search&lt;/td&gt;
&lt;td&gt;Better client&lt;/td&gt;
&lt;td&gt;Other hosts still dump&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis poll in the tool&lt;/td&gt;
&lt;td&gt;Shared, extra RTT&lt;/td&gt;
&lt;td&gt;You invented a hub with worse UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature-flag SaaS&lt;/td&gt;
&lt;td&gt;Product experiments&lt;/td&gt;
&lt;td&gt;Rarely session-safe for MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kill -9 the npx child&lt;/td&gt;
&lt;td&gt;Janitor&lt;/td&gt;
&lt;td&gt;The turn still died&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When not to use Kiponos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool schema itself changed (new argument)&lt;/td&gt;
&lt;td&gt;That &lt;em&gt;is&lt;/em&gt; a code/Cursor restart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret rotation of Connect / MCP OAuth tokens&lt;/td&gt;
&lt;td&gt;Credentials are not live knobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off local script, no peers&lt;/td&gt;
&lt;td&gt;A hub is overkill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser-only “SDK in the SPA”&lt;/td&gt;
&lt;td&gt;Forbidden — tokens leak or defaults lie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pair &lt;code&gt;shared-truth&lt;/code&gt; with a sister dial
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;shared-truth&lt;/code&gt; rarely moves alone on the admin-dashboard wall. Pair it with &lt;code&gt;schema-budget&lt;/code&gt;, &lt;code&gt;result-cap&lt;/code&gt;, or &lt;code&gt;execute-gate&lt;/code&gt; so you do not fix Paradigm shift: embedded live tree, not a sidecar you remember to poll by inventing a second incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Cursor is the wrong restart target
&lt;/h2&gt;

&lt;p&gt;Cursor is good at calling tools. It is not a control plane. Killing it to flip &lt;code&gt;shared-truth&lt;/code&gt; teaches the on-call that judgment requires a process ID. The admin-dashboard wall already disagrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started (15 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;TeamPro on &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;kiponos.io&lt;/a&gt; → Connect → &lt;code&gt;KIPONOS_ID&lt;/code&gt; / &lt;code&gt;KIPONOS_ACCESS&lt;/code&gt; / profile &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clone &lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd examples/java/agentic-mcp-1002-pm-embedded-native &amp;amp;&amp;amp; cp kiponos.local.env.example kiponos.local.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;./gradlew test run&lt;/code&gt; — prints &lt;code&gt;examples/agentic-mcp-1002-pm-embedded-native/shared-truth=...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In the dashboard, change &lt;code&gt;shared-truth&lt;/code&gt;. Keep Cursor up. No MCP reconnect.&lt;/li&gt;
&lt;li&gt;Point the tool wrapper at the same leaf. Do not ship a new server binary to flip Paradigm shift: embedded live tree, not a sidecar you remember to poll.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/devto-getting-started-developer-guide.md" rel="noopener noreferrer"&gt;Developer Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiponos/getting-started-with-kiponosio-p5k"&gt;Product tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/GETTING-STARTED.md" rel="noopener noreferrer"&gt;GETTING-STARTED.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The moral
&lt;/h2&gt;

&lt;p&gt;If flipping &lt;strong&gt;Paradigm shift: embedded live tree, not a sidecar you remember to poll&lt;/strong&gt; requires restarting Cursor or reconnecting MCP, you do not have agentic control. You have a hope with a process ID.&lt;/p&gt;

&lt;p&gt;MCP, Skills, and tools are how agents &lt;em&gt;act&lt;/em&gt;. &lt;strong&gt;Kiponos is the live primitive they do not ship&lt;/strong&gt; — so the admin-dashboard wall can change its mind without killing the session.&lt;/p&gt;

&lt;p&gt;How to try: &lt;code&gt;examples/java/agentic-mcp-1002-pm-embedded-native&lt;/code&gt; and &lt;code&gt;./gradlew test&lt;/code&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The User Said Mid-Turn: No More Writes. MCP Did Not Hear Until Restart</title>
      <dc:creator>Moshe Avdiel</dc:creator>
      <pubDate>Wed, 09 Sep 2026 23:13:32 +0000</pubDate>
      <link>https://dev.to/kiponos/the-user-said-mid-turn-no-more-writes-mcp-did-not-hear-until-restart-2i9l</link>
      <guid>https://dev.to/kiponos/the-user-said-mid-turn-no-more-writes-mcp-did-not-hear-until-restart-2i9l</guid>
      <description>&lt;p&gt;I have sat next to the shopping-admin wall at 02:14 while Grok Build was &lt;em&gt;this close&lt;/em&gt; to calling the wrong MCP tool.&lt;/p&gt;

&lt;p&gt;Not a model failure. A &lt;strong&gt;posture&lt;/strong&gt; failure.&lt;/p&gt;

&lt;p&gt;This is the penetration sentence: the human is the dashboard. The hub is how the tool hears.&lt;/p&gt;

&lt;p&gt;Someone on the floor said, out loud, &lt;strong&gt;I told you in chat to stop writing&lt;/strong&gt;. Grok Build had started earlier. The tool list was frozen in &lt;code&gt;config.toml&lt;/code&gt; / &lt;code&gt;.mcp.json&lt;/code&gt; / a skill file. The only “safe” move anyone trusted was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kill Grok Build (or its MCP child)&lt;/li&gt;
&lt;li&gt;Edit the server list&lt;/li&gt;
&lt;li&gt;Restart the host&lt;/li&gt;
&lt;li&gt;Lose the plan the model already paid for&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the ceremony. &lt;strong&gt;Chat said stop. The in-flight tool policy was argv.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Aha:&lt;/strong&gt; Chat is not a bus. Set the leaf. The next MCP call in &lt;em&gt;this&lt;/em&gt; turn already obeys. Real-time nested state is now a &lt;strong&gt;primitive&lt;/strong&gt; — as native as a hashmap — via &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;Kiponos.io&lt;/a&gt;. The host stays up. The leaf moves. The next tool call already obeys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: Human interrupt → live roster, same turn
&lt;/h2&gt;

&lt;p&gt;Agentic programming in 2026 has a public fight: MCP vs CLI vs Skills. The likes on MCP and Grok Build posts are the tell. The industry is stuck on &lt;em&gt;how to expose tools&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The missing primitive is &lt;strong&gt;live nested state&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;Where the roster hid&lt;/th&gt;
&lt;th&gt;What you restart&lt;/th&gt;
&lt;th&gt;What you lose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP schema dump at session start&lt;/td&gt;
&lt;td&gt;The host, sometimes the child &lt;code&gt;npx&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;16–72% of the window before the user speaks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;~/.grok/config.toml&lt;/code&gt; / Cursor &lt;code&gt;mcp.json&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Grok Build&lt;/td&gt;
&lt;td&gt;The open turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SKILL.md / AGENTS.md&lt;/td&gt;
&lt;td&gt;The next turn, sometimes the host&lt;/td&gt;
&lt;td&gt;Context you already bought&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Just reconnect the server”&lt;/td&gt;
&lt;td&gt;The MCP session&lt;/td&gt;
&lt;td&gt;Tool-space you finally had right&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Chat said stop. The in-flight tool policy was argv.&lt;/p&gt;

&lt;p&gt;That is not a protocol bug you wait out. That is a process that cannot &lt;code&gt;get()&lt;/code&gt; a tree that moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams believe
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belief&lt;/th&gt;
&lt;th&gt;Production&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP is the standard so we are done&lt;/td&gt;
&lt;td&gt;MCP is how you call. It is not live posture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills will progressive-disclose it&lt;/td&gt;
&lt;td&gt;Skills are files. Files do not fan out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A bigger context window fixes tool overload&lt;/td&gt;
&lt;td&gt;1M tokens still rot; selection still drops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Put the SDK in the SPA so the tile matches&lt;/td&gt;
&lt;td&gt;Connect tokens do not belong in a browser&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What is Kiponos here
&lt;/h2&gt;

&lt;p&gt;Kiponos is a &lt;strong&gt;live nested config hub&lt;/strong&gt;. Dashboard edit → WebSocket delta → in-memory tree on every connected process. Hot-path &lt;code&gt;get()&lt;/code&gt; is a local map lookup. One WebSocket per process lifetime.&lt;/p&gt;

&lt;p&gt;It is not an MCP server. It is not a Skill. It is the &lt;strong&gt;control plane those things do not ship&lt;/strong&gt;: which tools may run, how fat a result may be, whether execute is allowed, whether a child inherits posture — &lt;em&gt;this turn&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Profile shape: &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;. The leaf in this story is &lt;code&gt;tools-allow&lt;/code&gt; under &lt;code&gt;examples/agentic-mcp-1002-am-midturn-flip/tools-allow&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&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%2Fpcvo4ah4srhgvo4smtqa.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%2Fpcvo4ah4srhgvo4smtqa.png" alt="Architecture diagram" width="800" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model still calls tools. The wrapper reads &lt;code&gt;tools-allow&lt;/code&gt; &lt;strong&gt;before&lt;/strong&gt; the call. No schema dump policy in argv.&lt;/p&gt;

&lt;h2&gt;
  
  
  Config tree
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;examples/agentic-mcp-1002-am-midturn-flip&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;tools-allow&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;search,read&lt;/span&gt;
  &lt;span class="na"&gt;schema-budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4000"&lt;/span&gt;
  &lt;span class="na"&gt;result-cap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000"&lt;/span&gt;
  &lt;span class="na"&gt;tool-search&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
  &lt;span class="na"&gt;execute-gate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plan"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eight-plus keys when you pair &lt;code&gt;tools-allow&lt;/code&gt; with sister dials (budget, mute, pause). They move together on the shopping-admin wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;p&gt;Java tool wrapper (Grok Build just &lt;em&gt;calls&lt;/em&gt; it):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Kiponos&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.kiponos.Folder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Folder&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Kiponos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createForCurrentTeam&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFolder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"examples/agentic-mcp-1002-am-midturn-flip"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;roster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;valueOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"tools-allow"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Grok Build tool: refuse the dangerous MCP call when posture moved&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python peer:&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;kiponos&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;

&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Kiponos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quiet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;posture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;examples/agentic-mcp-1002-am-midturn-flip/tools-allow&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;live&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posture&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Human interrupt → live roster, same turn gated live — host not restarted&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React/Angular: &lt;strong&gt;Node BFF&lt;/strong&gt; &lt;code&gt;@kiponos/react/server&lt;/code&gt; / &lt;code&gt;@kiponos/angular/server&lt;/code&gt;. SPA never holds Connect tokens.&lt;/p&gt;

&lt;p&gt;Runnable mesh: &lt;code&gt;https://github.com/kiponos-io/kiponos-io/tree/master/examples/java/agentic-mcp-1002-am-midturn-flip&lt;/code&gt; — &lt;code&gt;./gradlew test run&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Without Kiponos&lt;/th&gt;
&lt;th&gt;With Kiponos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Three MCP servers at boot&lt;/td&gt;
&lt;td&gt;72% of the window gone&lt;/td&gt;
&lt;td&gt;Live roster / schema-budget; dump shrinks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User says “no writes” mid-turn&lt;/td&gt;
&lt;td&gt;Restart Grok Build&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;tools-allow&lt;/code&gt;; next call already denies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second host started earlier&lt;/td&gt;
&lt;td&gt;Paste the json into chat&lt;/td&gt;
&lt;td&gt;Both &lt;code&gt;get()&lt;/code&gt; the same leaf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subagent spawned&lt;/td&gt;
&lt;td&gt;Frozen argv copy&lt;/td&gt;
&lt;td&gt;Child &lt;code&gt;get()&lt;/code&gt;s &lt;code&gt;inherit-posture&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool returns 500k tokens&lt;/td&gt;
&lt;td&gt;Context rot, doom loop&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;result-cap&lt;/code&gt; in the wrapper&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Performance (this path)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wrapper &lt;code&gt;get()&lt;/code&gt; is in-process after bootstrap.&lt;/li&gt;
&lt;li&gt;One WebSocket per Grok Build lifetime — not per MCP call.&lt;/li&gt;
&lt;li&gt;A dashboard edit is a &lt;strong&gt;delta&lt;/strong&gt; of &lt;code&gt;tools-allow&lt;/code&gt;, not a config.toml reload.&lt;/li&gt;
&lt;li&gt;You do not spend model tokens to “please restart Grok Build.”&lt;/li&gt;
&lt;li&gt;Schema tax is optional once the live set is small.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compare to 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;Honest fit&lt;/th&gt;
&lt;th&gt;Why it still restarts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;More MCP servers&lt;/td&gt;
&lt;td&gt;More integrations&lt;/td&gt;
&lt;td&gt;More schema, worse selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills progressive disclosure&lt;/td&gt;
&lt;td&gt;Good docs, lazy load&lt;/td&gt;
&lt;td&gt;Not a multi-host bus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code tool search&lt;/td&gt;
&lt;td&gt;Better client&lt;/td&gt;
&lt;td&gt;Other hosts still dump&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis poll in the tool&lt;/td&gt;
&lt;td&gt;Shared, extra RTT&lt;/td&gt;
&lt;td&gt;You invented a hub with worse UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature-flag SaaS&lt;/td&gt;
&lt;td&gt;Product experiments&lt;/td&gt;
&lt;td&gt;Rarely session-safe for MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kill -9 the npx child&lt;/td&gt;
&lt;td&gt;Janitor&lt;/td&gt;
&lt;td&gt;The turn still died&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When not to use Kiponos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool schema itself changed (new argument)&lt;/td&gt;
&lt;td&gt;That &lt;em&gt;is&lt;/em&gt; a code/Grok Build restart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret rotation of Connect / MCP OAuth tokens&lt;/td&gt;
&lt;td&gt;Credentials are not live knobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off local script, no peers&lt;/td&gt;
&lt;td&gt;A hub is overkill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser-only “SDK in the SPA”&lt;/td&gt;
&lt;td&gt;Forbidden — tokens leak or defaults lie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pair &lt;code&gt;tools-allow&lt;/code&gt; with a sister dial
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;tools-allow&lt;/code&gt; rarely moves alone on the shopping-admin wall. Pair it with &lt;code&gt;schema-budget&lt;/code&gt;, &lt;code&gt;result-cap&lt;/code&gt;, or &lt;code&gt;execute-gate&lt;/code&gt; so you do not fix Human interrupt → live roster, same turn by inventing a second incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Grok Build is the wrong restart target
&lt;/h2&gt;

&lt;p&gt;Grok Build is good at calling tools. It is not a control plane. Killing it to flip &lt;code&gt;tools-allow&lt;/code&gt; teaches the on-call that judgment requires a process ID. The shopping-admin wall already disagrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started (15 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;TeamPro on &lt;a href="https://kiponos.io" rel="noopener noreferrer"&gt;kiponos.io&lt;/a&gt; → Connect → &lt;code&gt;KIPONOS_ID&lt;/code&gt; / &lt;code&gt;KIPONOS_ACCESS&lt;/code&gt; / profile &lt;code&gt;['my-app']['v1.0.0']['dev']['base']&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clone &lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd examples/java/agentic-mcp-1002-am-midturn-flip &amp;amp;&amp;amp; cp kiponos.local.env.example kiponos.local.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;./gradlew test run&lt;/code&gt; — prints &lt;code&gt;examples/agentic-mcp-1002-am-midturn-flip/tools-allow=...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In the dashboard, change &lt;code&gt;tools-allow&lt;/code&gt;. Keep Grok Build up. No MCP reconnect.&lt;/li&gt;
&lt;li&gt;Point the tool wrapper at the same leaf. Do not ship a new server binary to flip Human interrupt → live roster, same turn.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/devto-getting-started-developer-guide.md" rel="noopener noreferrer"&gt;Developer Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiponos/getting-started-with-kiponosio-p5k"&gt;Product tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io/blob/master/docs/GETTING-STARTED.md" rel="noopener noreferrer"&gt;GETTING-STARTED.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiponos-io/kiponos-io" rel="noopener noreferrer"&gt;github.com/kiponos-io/kiponos-io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The moral
&lt;/h2&gt;

&lt;p&gt;If flipping &lt;strong&gt;Human interrupt → live roster, same turn&lt;/strong&gt; requires restarting Grok Build or reconnecting MCP, you do not have agentic control. You have a hope with a process ID.&lt;/p&gt;

&lt;p&gt;MCP, Skills, and tools are how agents &lt;em&gt;act&lt;/em&gt;. &lt;strong&gt;Kiponos is the live primitive they do not ship&lt;/strong&gt; — so the shopping-admin wall can change its mind without killing the session.&lt;/p&gt;

&lt;p&gt;How to try: &lt;code&gt;examples/java/agentic-mcp-1002-am-midturn-flip&lt;/code&gt; and &lt;code&gt;./gradlew test&lt;/code&gt;.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
