<?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: Yurii Serhiichuk</title>
    <description>The latest articles on DEV Community by Yurii Serhiichuk (@xsavikx).</description>
    <link>https://dev.to/xsavikx</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%2F3672298%2F2bc740a5-847f-4cd1-89c8-d982876a37dd.jpg</url>
      <title>DEV Community: Yurii Serhiichuk</title>
      <link>https://dev.to/xsavikx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/xsavikx"/>
    <language>en</language>
    <item>
      <title>Building an Autonomous SRE Agent with Google ADK and the Antigravity SDK</title>
      <dc:creator>Yurii Serhiichuk</dc:creator>
      <pubDate>Thu, 09 Jul 2026 16:58:44 +0000</pubDate>
      <link>https://dev.to/gde/building-an-autonomous-sre-agent-with-google-adk-and-the-antigravity-sdk-1fgl</link>
      <guid>https://dev.to/gde/building-an-autonomous-sre-agent-with-google-adk-and-the-antigravity-sdk-1fgl</guid>
      <description>&lt;p&gt;One of the most stressful parts of being an on-call engineer is triaging a production incident in the middle of the night. Modern distributed systems amplify the pain with extra cognitive overload of, well, the distributed systems: logs scattered across dozens of microservices, traces potentially stored in multiple different locations and a dozen of observability tools and dashboards on hand. While this (usually) makes total sense for SREs to design and develop this the way it is (maybe because of the costs or being knowledgeable in this or that tool, or just optimizing for a particular concern), this adds a lot of load for any on-call engineer.&lt;/p&gt;

&lt;p&gt;So in era of AI, it makes total sense to get some aid from the autonomous and smart systems that are fine-tuned for your setup, that remember all the bits and pieces that are suitable for your infrastructure.&lt;/p&gt;

&lt;p&gt;In this post I'm trying to go over a blueprint of such an autonomous SRE system - an AI agent that can be hosted near your main system and fine tuned to work with a set of tools you use.&lt;/p&gt;

&lt;p&gt;I will be using Google &lt;a href="https://adk.dev/" rel="noopener noreferrer"&gt;&lt;strong&gt;Agent Development KIT (ADK)&lt;/strong&gt;&lt;/a&gt; for multi-agent diagnostic &lt;em&gt;reasoning&lt;/em&gt; and &lt;a href="https://antigravity.google/product/antigravity-sdk" rel="noopener noreferrer"&gt;&lt;strong&gt;Google Antigravity SDK&lt;/strong&gt;&lt;/a&gt; for the agent &lt;em&gt;runtime&lt;/em&gt; - tool wiring, easy-to-apply safety policies and agentic orchestration. The setup will be deployed as a set of Google Cloud Run services but while being containerized can be easily ported to any other containerized platform. The entire stack runs locally as well with &lt;strong&gt;zero GCP credentials&lt;/strong&gt; in a mock-telemetry mode, so you can try it in under a minute.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Core Architecture: Reasoning + Safety
&lt;/h2&gt;

&lt;p&gt;A proper SRE assistant has to get two things right at once: &lt;strong&gt;reasoning orchestration&lt;/strong&gt; (which diagnostic step happens when) and &lt;strong&gt;environmental safety&lt;/strong&gt; (the agent must never be able to mutate production while it pokes around). The blueprint splits these concerns across four small Fast API services that talk to each other over &lt;a href="https://a2a-protocol.org/latest/" rel="noopener noreferrer"&gt;Agent-To-Agent protocol&lt;/a&gt; with results being streamed back as &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events" rel="noopener noreferrer"&gt;Server-Sent Events (SSE)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv2yubd6sawo7c6i2xbjc.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%2Fv2yubd6sawo7c6i2xbjc.png" alt="Architecture: the Orchestrator's only capability is to delegate to the read-only SRE sub-agent" width="800" height="1354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm using Google Antigravity SDK as an orchestrator and front-facing agent while it provides superior safety gates out of the box and is smart-enough to handle user requests.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;safety_policies&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;deny&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;  &lt;span class="c1"&gt;# nothing is allowed by default
&lt;/span&gt;    &lt;span class="nf"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;diagnose_sre&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# …except delegating to the SRE sub-agent
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The config above basically gates whatever tools we want to allow for the agent to use.&lt;/p&gt;

&lt;p&gt;And Google ADK agents fulfill the diagnostic workflows. ADK v2 which I am using is graph-based and the SRE sub-agent runs two-node graph:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TraceAnalyzer&lt;/strong&gt; - scans recent trace summaries, filters for transactions that errrored or breached the latency budget (&amp;gt;5000ms), and isolates the single failing &lt;code&gt;traceId&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LogCorrelator&lt;/strong&gt; pulls the spans and the logs tagged with that &lt;code&gt;traceId&lt;/code&gt;, then reasons over them with metric queries, cascade analysis, and post-mortem generation tools to produce the root-case report.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The third agent is an inventory agent that aids the SRE with aggregated knowledge of resources available in the GCP project. This helps grounding diagnostics and makes sure the agent works against particular resources instead of trying to look around too much.&lt;/p&gt;




&lt;h2&gt;
  
  
  Anatomy of a Diagnosis
&lt;/h2&gt;

&lt;p&gt;When an alert fires, here's what actually is going to happen end to end from the on-call prompt to a finished post-mortem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqyj8h1ho0pzr9xuij0rr.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%2Fqyj8h1ho0pzr9xuij0rr.png" alt="End-to-end diagnosis sequence from alert to post-mortem" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Orchestrator does the one thing its policy allows: it hands the problem to the SRE sub-agent and steps back. From there the sub-agent streams its progress back as Server-Sent Events, so the on-call engineer watches the investigation unfold live instead of waiting on a spinner.&lt;/p&gt;

&lt;p&gt;It starts by pulling the project topology — which services exist, how they call each other, and where their databases sit — from the Inventory agent's Firestore-backed cache; that map tells the diagnosis where to look. It then fetches the recent traces and runs them through the two-node graph: &lt;code&gt;TraceAnalyzer&lt;/code&gt; collapses thousands of spans down to the single failing trace worth investigating, and &lt;code&gt;LogCorrelator&lt;/code&gt; pulls every span and log line sharing that trace's ID to name the actual root cause — not just &lt;em&gt;"the database was slow,"&lt;/em&gt; but which span failed, with which error, and why.&lt;/p&gt;

&lt;p&gt;Only then does it run the cascade analysis and draft the post-mortem, streaming the finished report back through the Orchestrator to the chat UI, where it lands as a rendered dashboard with a one-click download.&lt;/p&gt;

&lt;p&gt;The beauty of such approach is extensibility of the setup. You can add new sub-agents or expand existing tools easily with ADK and A2A protocol.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deep Dive: Cascade Latency &amp;amp; Bottleneck Analysis
&lt;/h2&gt;

&lt;p&gt;In order to showcase the agent, I have also built another Fast API service that emulates real database errors with timeout exceptions and telemetry spans. As it is just a simulation, quite a lot of actual problems are quite similar to this one and frequently the initial gateways/backends latency or errors are hidden downstream. But of course this is a textbook example still: a gateway request that looks 10-second-slow, but where 99% of the time is actually trapped in a database call three levels down.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fddi3p30ktkl37pa495ng.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%2Fddi3p30ktkl37pa495ng.png" alt="Trace waterfall: gateway, backend and database all look ~10s inclusive; the database is the real bottleneck" width="800" height="249"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;All three spans look ~10 s slow (inclusive), but the red /api/database bar is where the time is actually spent.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The cascade-analysis tool builds the span parent/child map and computes, for every span:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inclusive duration&lt;/strong&gt; — wall-clock time of the span including its children.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exclusive (self) duration&lt;/strong&gt; — the active time spent in that span alone:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ExclusiveTime(s) = InclusiveTime(s) - sum of InclusiveTime(children)&lt;/p&gt;

&lt;p&gt;The span with the largest exclusive time is the true bottleneck. Here is the &lt;strong&gt;actual, verified output&lt;/strong&gt; from incident simulator (available in the repo):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;### 🔍 Span Latency Breakdown
Service / Span Name     Span ID             Parent ID           Status   Inclusive Time   Exclusive (Self) Time   Contribution
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
/api/gateway            span-gateway-111    None                ERROR    10270 ms         20 ms                   0.2%
  └── /api/backend      span-backend-222    span-gateway-111    ERROR    10250 ms         50 ms                   0.5%
      └── /api/database span-database-333   span-backend-222    ERROR    10200 ms         10200 ms                99.3%

### 🚨 Identified Bottleneck
*   Bottleneck Span:     /api/database (span-database-333)
*   Self-Execution Time: 10200 ms (99.3% of total trace)
*   Status:              ERROR
*   Error Message:       ConnectionTimeoutError: Failed to connect to db-primary.gcp.internal:5432 after 10000ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The gateway and backend each look "slow" at 10 s inclusive, but their &lt;em&gt;self&lt;/em&gt; time is a rounding error. The agent ignores the noise and points straight at &lt;code&gt;/api/database&lt;/code&gt; — 99.3% of the budget, burned in a single connection timeout.&lt;/p&gt;




&lt;h2&gt;
  
  
  Automated Post-Mortem &amp;amp; One-Click Export
&lt;/h2&gt;

&lt;p&gt;Diagnosis is only half the job; the deliverable on-call engineers actually need is a &lt;strong&gt;post-mortem&lt;/strong&gt;. After the cascade analysis, a post-mortem generator drafts a complete Markdown document with an Incident Overview (time, root service, Trace ID, impact duration), a Timeline, a Root Cause Analysis, and a Prevention Plan — all populated from the real trace and log data.&lt;/p&gt;

&lt;p&gt;That Markdown is then rendered via &lt;a href="https://a2ui.org/" rel="noopener noreferrer"&gt;A2UI protocol&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1rmdbugccn6x3uibgmpj.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%2F1rmdbugccn6x3uibgmpj.png" alt="Post-mortem markdown flows through a translator to a client-side download button" width="796" height="65"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;From SRE report markdown to a one-click, client-side post-mortem download.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A server-side translator spots the post-mortem heading and appends a download-button component; the browser renders it as a styled button that builds the file entirely in the browser — no server round-trip — from the Markdown it already holds.&lt;/p&gt;

&lt;p&gt;One click exports &lt;code&gt;post_mortem.md&lt;/code&gt;, ready to drop into your incident-review wiki.&lt;/p&gt;

&lt;p&gt;And here is how this actually looks like in the deployed UI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3w9z61mtbj361a66o5en.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%2F3w9z61mtbj361a66o5en.png" alt="SRE agent chat UI" width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Least-Privilege IAM on Cloud Run
&lt;/h2&gt;

&lt;p&gt;Handing an autonomous agent unrestricted cloud access is a non-starter. The deploy pipeline gives each Cloud Run service its &lt;strong&gt;own service account&lt;/strong&gt; with the narrowest possible role set:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx6jfesymipmbx8xenzpg.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%2Fx6jfesymipmbx8xenzpg.png" alt="Least-privilege IAM: a write-only app service account vs a read-only agent service account" width="800" height="877"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The write-only target app and the read-only SRE agent can never act on each other's plane.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The split is the whole point: the app that &lt;em&gt;generates&lt;/em&gt; the chaos can only ever &lt;strong&gt;write&lt;/strong&gt; telemetry, and the agent that &lt;em&gt;investigates&lt;/em&gt; it can only ever &lt;strong&gt;read&lt;/strong&gt;. Neither can act on the other's plane. (The deploy also provisions an &lt;code&gt;inventory-agent-sa&lt;/code&gt; for topology discovery and a dedicated &lt;code&gt;sre-build-sa&lt;/code&gt; for Cloud Build, each similarly scoped.)&lt;/p&gt;


&lt;h2&gt;
  
  
  Try It Yourself in 60 Seconds
&lt;/h2&gt;

&lt;p&gt;You can run the entire scan → correlate → analyze → post-mortem loop locally. &lt;strong&gt;No GCP account or credentials required.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone the repo&lt;/span&gt;
git clone https://github.com/xSAVIKx/sre-agent.git
&lt;span class="nb"&gt;cd &lt;/span&gt;sre-agent

&lt;span class="c"&gt;# 2. Install uv and sync the workspace (app, agent, sre_agent, inventory_agent, sre_common)&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;uv
uv &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nt"&gt;--all-packages&lt;/span&gt;

&lt;span class="c"&gt;# 3. Run the incident simulation&lt;/span&gt;
uv run simulate_incident.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The simulation triggers a database-timeout incident in the target app, writes mock traces and logs to &lt;code&gt;mock_telemetry_data/&lt;/code&gt;, boots the Orchestrator in mock mode, runs the diagnostic workflow in-process, and prints the report to your terminal. You will see the structured telemetry logs (gateway → backend → database, ending in a &lt;code&gt;CRITICAL ConnectionTimeoutError&lt;/code&gt;) followed by the full diagnosis: the &lt;strong&gt;99.3% &lt;code&gt;/api/database&lt;/code&gt; bottleneck table&lt;/strong&gt; and the complete &lt;strong&gt;&lt;code&gt;# 🚨 Incident Post-Mortem&lt;/code&gt;&lt;/strong&gt; shown above.&lt;/p&gt;

&lt;p&gt;Want the full multi-service experience with the web chat UI? &lt;code&gt;docker-compose up --build&lt;/code&gt; brings up the Orchestrator, SRE agent, Inventory agent, a Firestore emulator, and the target app together — then open the chat at &lt;code&gt;/chat&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project Resources
&lt;/h2&gt;

&lt;p&gt;The complete, runnable source — plus a step-by-step &lt;a href="https://github.com/xSAVIKx/sre-agent/blob/HEAD/CODELAB.md" rel="noopener noreferrer"&gt;&lt;strong&gt;CODELAB&lt;/strong&gt;&lt;/a&gt; that builds this from scratch — lives on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👉 &lt;a href="https://github.com/xSAVIKx/sre-agent" rel="noopener noreferrer"&gt;github.com/xSAVIKx/sre-agent&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>sre</category>
      <category>antigravity</category>
    </item>
    <item>
      <title>Open Knowledge Format - portable digital map of your data as code</title>
      <dc:creator>Yurii Serhiichuk</dc:creator>
      <pubDate>Mon, 15 Jun 2026 07:38:08 +0000</pubDate>
      <link>https://dev.to/gde/open-knowledge-format-portable-digital-map-of-your-data-as-code-26n9</link>
      <guid>https://dev.to/gde/open-knowledge-format-portable-digital-map-of-your-data-as-code-26n9</guid>
      <description>&lt;p&gt;Yesterday Google dropped an &lt;a href="https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing" rel="noopener noreferrer"&gt;article&lt;/a&gt; describing an interesting idea - a portable format for knowledge sharing as markdown. This is not new or unique (llm wiki, obsidian values and even agents/claude.md are similar concepts). What stands out here is the openness of the proposed standard (also, just a v0.1 draft now) and actual ability of Google to make it a de-facto standard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb3hr9dpq0h2nnhbtdhsi.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.amazonaws.com%2Fuploads%2Farticles%2Fb3hr9dpq0h2nnhbtdhsi.png" alt="OKF google blog post" width="799" height="611"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;I've spent quite some time as GDE and AI integrator helping teams wire data into the LLM agents, and I keep hitting the same wall. The model is brilliant and the data is right there, but the &lt;strong&gt;knowledge about the data&lt;/strong&gt;  - what a table means, how a metric is defined or why a column was deprecated is, unfortunately, scattered across hundreds of different places. Something is available in company google docs or drive, the other things are available directly in readme and the extra missing piece is actually in that one engineer's head. Unfortunately, we can't write a connector for the last piece, but as Sam McVeety and Amir Hormati highlights in the blogpost we can at least help the agents (and developers) navigate through such knowledge better by introducing some shared and well known way of sharing the knowledge. And don't get me wrong, almost every team has probably already solved this in that or another proprietary way, rebuilding that same plumbing again and again from scratch.&lt;/p&gt;

&lt;p&gt;OKF's wager against that mess is almost provocatively simple. If you can &lt;code&gt;cat&lt;/code&gt; a file, you can read it. If you can &lt;code&gt;git clone&lt;/code&gt; a repository, you can ship it. The spec only enforces one field to be explicitly provided - type&amp;nbsp;, and that's exactly the trick: standardize only the smallest possible interoperability surface while leaving everything else to the people producing the data.&lt;/p&gt;




&lt;p&gt;The reference repository indeed provides only the bare minimum - a pretty simple &lt;a href="https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/4c40ef103cd7dd9ca978bbb190fc795cfde4f7c3/okf/SPEC.md" rel="noopener noreferrer"&gt;spec&lt;/a&gt;, example agent (which is BigQuery-oriented and pretty opinionated) and some sample bundles. And while this is a great starter pack, the idea of OKF how I see it is that knowledge lives &lt;em&gt;everywhere&lt;/em&gt;. My SQLite file has knowledge. My Postgres instance has knowledge. My &lt;code&gt;~/notes&lt;/code&gt; folder and my Git history as well. If OKF is going to be a lingua franca, it needs producers for the messy real data the most of us actually work with, and it needs consumers that are not tied to any one vendor's agent.&lt;/p&gt;

&lt;p&gt;So I built that: the &lt;a href="https://github.com/xSAVIKx/okf-skills" rel="noopener noreferrer"&gt;OKF Skills&lt;/a&gt;, a vendor-neutral fleet of producers and consumers for OKF.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftksrewfbhyhlcajxzfb8.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.amazonaws.com%2Fuploads%2Farticles%2Ftksrewfbhyhlcajxzfb8.png" alt="OKF viz screenshot" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;The idea is simple - any source in, any agent out.&lt;/p&gt;

&lt;p&gt;What I built already is just a small baseline that I hope would be useful moving forward. That's six connectors - SQLite, MySQL, PostgreSQL, BigQuery, the local file system and Git. Each is a single portable Go binary with the same three commands: &lt;code&gt;produce&lt;/code&gt; a bundle from the source, &lt;code&gt;ingest&lt;/code&gt; a bundle to verify it (or --sync curated descriptions back to the source), and &lt;code&gt;schema&lt;/code&gt; to describe itself. The SQL connectors can embed a per-column data profile and sample rows right in the concept docs.&lt;/p&gt;

&lt;p&gt;Then three guidance skills with zero extra runtime. &lt;code&gt;reader&lt;/code&gt; teaches an agent how to traverse any OKF bundle cheaply (index first, frontmatter only, grep before you read). The &lt;code&gt;enricher&lt;/code&gt; teaches your harness to write good descriptions grounded in the schema, profile, and samples. And finally the &lt;code&gt;producer-generator&lt;/code&gt; to bootstrap other connectors real fast.&lt;/p&gt;

&lt;p&gt;I also decided to rebuild the visualizer Google team embedded into their agent. The &lt;code&gt;viz&lt;/code&gt; renders any bundle into a single self-contained index.html near your OKF data. It produces a three-pane explorer with an interactive graph, navigator and content reader. Now there's no need to reach for Google-provided agent just to create a visualization if you just want that.&lt;/p&gt;

&lt;p&gt;Finally, there's the mcp server that is capable of discovering every installed connector and exposes them as relevant tools. Point Claude Code or Antigravity at it and you're ready to rock. You can install all of them today with:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Now you should be able to just ask your harness nicely to create, enrich and visualize the OKF bundle.&lt;/p&gt;




&lt;p&gt;I hope this agentic tooling would allow the community to embrace the new format and truly make it a widely used standard. And also warmly welcome any new contributions to the existing connectors.&lt;/p&gt;

&lt;p&gt;Useful links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing" rel="noopener noreferrer"&gt;Introducing the Open Knowledge Format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf" rel="noopener noreferrer"&gt;OKF GitHub repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xSAVIKx/okf-skills" rel="noopener noreferrer"&gt;OKF-skills repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://xsavikx.github.io/okf-skills" rel="noopener noreferrer"&gt;OKF-skills visualization demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agentskills</category>
      <category>openknowledgeformat</category>
      <category>googlecloud</category>
    </item>
  </channel>
</rss>
