<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>audit-trail on tomrochette.com</title>
    <link>https://tomrochette.com/tags/audit-trail/</link>
    <description>Recent content in audit-trail on tomrochette.com</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>tom@tomrochette.com (Tom Rochette)</managingEditor>
    <webMaster>tom@tomrochette.com (Tom Rochette)</webMaster>
    <copyright>© 2026 Tom Rochette</copyright>
    <lastBuildDate>Sun, 27 Sep 2026 15:58:28 -0400</lastBuildDate><atom:link href="https://tomrochette.com/tags/audit-trail/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Code Atelier Governance SDK</title>
      <link>https://tomrochette.com/agents/control-planes/code-atelier-governance-sdk/</link>
      <pubDate>Sun, 27 Sep 2026 00:00:00 +0000</pubDate>
      <author>tom@tomrochette.com (Tom Rochette)</author>
      <guid>https://tomrochette.com/agents/control-planes/code-atelier-governance-sdk/</guid>
      <category>research-note</category><category>agent-curated</category><category>fully-ai-generated</category><category>llm=deepseek-v4.1-flash</category><category>agent-governance</category><category>policy-enforcement</category><category>audit-trail</category><category>postgres</category><category>human-in-the-loop</category>
      <description>&lt;p&gt;The Code Atelier Governance SDK (code-atelier-governance) is an MIT-licensed Python SDK that wraps LLM clients and tool calls in pre-execution enforcement gates (scope, budget, approvals, loop detection, presence) and writes an HMAC-chained audit trail to the Postgres your application already runs.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Its thesis is that tracing tools explain what an agent did after the damage, so the useful primitive is a gate that fires before the LLM call and denies it, backed by an audit chain a regulator can verify without a new data platform.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;What it is&#xA;    &lt;div id=&#34;what-it-is&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#what-it-is&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;pip install code-atelier-governance&lt;/code&gt; exposes a &lt;code&gt;GovernanceSDK&lt;/code&gt; with eight modules: Audit, Scope, Cost, Gates, Loop Detection, Presence, Contracts, and Compliance.&#xA;Scope is a per-agent allowlist with hidden tools removed from the LLM context and default deny; Cost enforces token and USD caps per session and per agent-day with built-in pricing for more than twenty models and a combined budget query; Gates issues single-use HMAC-bound approval tokens for high-risk actions.&#xA;The audit trail is an append-only HMAC chain with optional Ed25519 per-row signatures, on-demand chain verification, and EU AI Act Article 12 evidence reports.&#xA;Integrations are one-line wrappers for OpenAI, Anthropic, and LangChain, plus a sync wrapper for Flask and Django, and everything depends only on a Postgres connection string, with an optional read-only console.&#xA;The vendor is Code Atelier, and the source lives at imleopereira/agentic-governance.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Status&#xA;    &lt;div id=&#34;status&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#status&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Active but essentially unadopted.&#xA;The SDK is at version 0.7.3 with 11 PyPI releases, and the repository was created 2026-04-09 with a last push on 2026-07-23 as of 2026-09-27.&#xA;The repository has 0 stars, 0 forks, and no description or topics, which is unusual for a project with a polished documentation site and a hosted platform bridge.&#xA;&lt;strong&gt;The community footprint is absent: a Hacker News search for Code Atelier governance returns nothing, so every claim here rests on the vendor&amp;rsquo;s own pages and the repository.&lt;/strong&gt;&#xA;&lt;strong&gt;What earns the note despite the silence is the threat model, which states plainly what the SDK does not protect against instead of implying it is a complete security boundary.&lt;/strong&gt;&#xA;The vendor also publishes a scaffolder that wires a Microsoft Agent Governance Toolkit agent through these gates, which is a rare, concrete interoperability gesture in this category.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Strengths&#xA;    &lt;div id=&#34;strengths&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#strengths&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Just Postgres: no Redis, Kafka, ClickHouse, sidecar, or background worker, so adoption cost is close to zero for a team already on Postgres.&lt;/li&gt;&#xA;&lt;li&gt;Fail-closed enforcement by default (cost, scope, and gates raise), while observation surfaces warn and continue, which is the right asymmetry.&lt;/li&gt;&#xA;&lt;li&gt;A written threat model that names the bypasses (direct client calls, subprocesses, tool calls inside LLM responses) rather than hiding them.&lt;/li&gt;&#xA;&lt;li&gt;EU AI Act Article 12 evidence export and a self-approval prevention design show the compliance audience is being taken seriously.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Cautions&#xA;    &lt;div id=&#34;cautions&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#cautions&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0 stars and no third-party usage evidence; the only assessment available is the vendor&amp;rsquo;s own.&lt;/li&gt;&#xA;&lt;li&gt;In-process gates do not defend against a second process or any code path that calls OpenAI or Anthropic directly, and the README says so; network-level enforcement needs a proxy.&lt;/li&gt;&#xA;&lt;li&gt;Scope enforcement gates the LLM call, not the tool calls returned inside the response, so a determined agent can still execute a disallowed tool unless you enforce at the tool layer too.&lt;/li&gt;&#xA;&lt;li&gt;Tampering is detected only when verification runs; a database administrator with key control can still replace the chain, as the threat model admits.&lt;/li&gt;&#xA;&lt;li&gt;v0.6.2 flipped several defaults to fail-closed and broke callers, so read the upgrade notes before following an older tutorial.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Pricing&#xA;    &lt;div id=&#34;pricing&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#pricing&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;MIT licensed and free.&#xA;A hosted platform exists through an opt-in bridge that dual-writes audit events while keeping local Postgres authoritative, plus a read-only console, but no prices are published.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Compared to&#xA;    &lt;div id=&#34;compared-to&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#compared-to&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/control-planes/veto/&#34; &gt;Veto&lt;/a&gt;: a framework-agnostic authorization kernel with a commercial cloud and portable receipts; choose Veto for TypeScript or polyglot stacks and this SDK when you are Python and Postgres and want budget and loop gates too.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/control-planes/microsoft-agent-governance-toolkit/&#34; &gt;Microsoft Agent Governance Toolkit&lt;/a&gt;: broad, vendor-backed, and multi-language with identity and sandboxing; choose AGT for a governance program, and this SDK for the smallest viable gate.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/evaluation-review/langfuse/&#34; &gt;Langfuse&lt;/a&gt;: observability that records what happened; choose Langfuse to understand agent behavior, and this SDK to block a call before it happens.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Bottom line&#xA;    &lt;div id=&#34;bottom-line&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#bottom-line&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Recommended for Python teams already on Postgres that want a minimal pre-execution gate with budgets, approvals, and a tamper-evident audit trail. Not for polyglot stacks, teams needing process or network-level enforcement, or anyone who requires an adopted project with independent security review.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Changes&#xA;    &lt;div id=&#34;changes&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#changes&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2026-09-27 - Created.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;See also&#xA;    &lt;div id=&#34;see-also&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#see-also&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/control-planes/control-planes-feature-matrix/&#34; &gt;Control Planes Feature Matrix&lt;/a&gt; - the category compared on shared rows&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/control-planes/veto/&#34; &gt;Veto&lt;/a&gt; - the authorization-kernel alternative with a commercial cloud&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/control-planes/microsoft-agent-governance-toolkit/&#34; &gt;Microsoft Agent Governance Toolkit&lt;/a&gt; - the broad multi-language alternative&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;../../../an-agent-is-only-as-safe-as-its-worst-tool-call/index.md&#34; &gt;An Agent Is Only as Safe as Its Worst Tool Call&lt;/a&gt; - the corpus argument for gating the call&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/evaluation-review/evaluation-review-feature-matrix/&#34; &gt;Evaluation Review Feature Matrix&lt;/a&gt; - the observability layer this deliberately is not&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;References&#xA;    &lt;div id=&#34;references&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#references&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.codeatelier.tech/governance&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=www.codeatelier.tech&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://www.codeatelier.tech/governance&lt;/a&gt; - overview: modules, comparison table, Article 12 framing&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.codeatelier.tech/governance/quickstart&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=www.codeatelier.tech&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://www.codeatelier.tech/governance/quickstart&lt;/a&gt; - quickstart: install, schema, gates, console, sync wrapper&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/imleopereira/agentic-governance&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=github.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://github.com/imleopereira/agentic-governance&lt;/a&gt; - README: modules, threat model, configuration, standards&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://api.github.com/repos/imleopereira/agentic-governance&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=api.github.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://api.github.com/repos/imleopereira/agentic-governance&lt;/a&gt; - stars, forks, creation and push dates as of 2026-09-27&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pypi.org/pypi/code-atelier-governance/json&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=pypi.org&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://pypi.org/pypi/code-atelier-governance/json&lt;/a&gt; - version 0.7.3, MIT license, 11 releases&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://raw.githubusercontent.com/imleopereira/agentic-governance/production/CHANGELOG.md&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=raw.githubusercontent.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://raw.githubusercontent.com/imleopereira/agentic-governance/production/CHANGELOG.md&lt;/a&gt; - release notes: fail-closed defaults and the AGT recipe scaffolder&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
      
    </item>
    
  </channel>
</rss>
