<?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: Artsiom Rudzenka</title>
    <description>The latest articles on DEV Community by Artsiom Rudzenka (@artemr_rudenko_0bf2c2c505).</description>
    <link>https://dev.to/artemr_rudenko_0bf2c2c505</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%2F1730126%2Fcc09aa7f-ea7e-4f38-bbcc-532d9449fd9e.jpg</url>
      <title>DEV Community: Artsiom Rudzenka</title>
      <link>https://dev.to/artemr_rudenko_0bf2c2c505</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/artemr_rudenko_0bf2c2c505"/>
    <language>en</language>
    <item>
      <title>Why I built a sales and marketing knowledge base that refuses to guess</title>
      <dc:creator>Artsiom Rudzenka</dc:creator>
      <pubDate>Wed, 09 Sep 2026 09:28:36 +0000</pubDate>
      <link>https://dev.to/artemr_rudenko_0bf2c2c505/why-i-built-a-sales-and-marketing-knowledge-base-that-refuses-to-guess-5fhm</link>
      <guid>https://dev.to/artemr_rudenko_0bf2c2c505/why-i-built-a-sales-and-marketing-knowledge-base-that-refuses-to-guess-5fhm</guid>
      <description>&lt;p&gt;Sales and marketing context rarely disappears in one big failure. It leaks away in small pieces.&lt;/p&gt;

&lt;p&gt;A useful detail stays in a call transcript. A pricing objection lives in a CRM note. Market research sits in one document that nobody opens before the next meeting. Then someone asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What should we do next — and why?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I built &lt;a href="https://github.com/artemrudenko/SalesWiki-public" rel="noopener noreferrer"&gt;SalesWiki&lt;/a&gt; to test a simple idea: a shared knowledge base should help a person find the relevant evidence and narrow the options without inventing what it does not know.&lt;/p&gt;

&lt;p&gt;The durable source of truth is a folder of Markdown files that opens directly in Obsidian. Raw evidence stays separate from compiled knowledge. Answers copy facts from named fields and sections, attach citations, and say &lt;code&gt;not-found&lt;/code&gt; when the vault has no evidence.&lt;/p&gt;

&lt;p&gt;SalesWiki is not a CRM and it is not a hosted SaaS. It is an open starter kit for a governed sales and marketing knowledge base.&lt;/p&gt;

&lt;h2&gt;
  
  
  This started as a research question
&lt;/h2&gt;

&lt;p&gt;I did not begin with "let's build another knowledge product." I wanted to learn whether a plain wiki could help sales and marketing teams make decisions without becoming an unstructured folder. I also wanted to know whether agents could maintain it without changing protected facts behind the scenes.&lt;/p&gt;

&lt;p&gt;Sales and marketing are a useful stress test. Evidence arrives in many forms, ages quickly and has mixed sensitivity. The result has to support a decision, not simply retrieve a paragraph. A good answer should say what matters, where a fact came from, how fresh it is and what the user can do next.&lt;/p&gt;

&lt;p&gt;That led to four questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Can typed Markdown be a small but dependable knowledge data plane?&lt;/li&gt;
&lt;li&gt;Will people trust a shorter cited answer more than a fluent generated one?&lt;/li&gt;
&lt;li&gt;Can I make agent changes reviewable and reversible?&lt;/li&gt;
&lt;li&gt;When does owning this machinery beat buying search over existing documents?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The synthetic demo answers only the engineering part. A real pilot still has to prove that people prefer the workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  One knowledge model, different views for each role
&lt;/h2&gt;

&lt;p&gt;"Central" does not mean copying every CRM field, transcript and document into one unrestricted folder. Those systems can remain the source of their original records, and sensitive material can stay in a separate protected store.&lt;/p&gt;

&lt;p&gt;SalesWiki centralizes the team's compiled understanding. A company, person, deal, call, campaign, source or reusable case becomes a typed card with stable links to related cards. Sales and marketing use the same account map, while policy determines which cards and fields each role can read.&lt;/p&gt;

&lt;p&gt;The layers have different jobs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;raw evidence is preserved instead of silently rewritten;&lt;/li&gt;
&lt;li&gt;linked cards hold the current shared conclusion;&lt;/li&gt;
&lt;li&gt;proposals, review records and Git history show how that conclusion changed;&lt;/li&gt;
&lt;li&gt;indexes and dashboards are generated views that can be rebuilt from the cards.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Raw evidence stays as captured. The shared conclusion can change, but only through a proposal, review and controlled apply step that leaves the earlier evidence and the reason for the change visible.&lt;/p&gt;

&lt;p&gt;This is why I chose a wiki model. The goal is not a larger folder. It is a durable map that people and tools can navigate, question and correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small synthetic example
&lt;/h2&gt;

&lt;p&gt;The public demo contains a synthetic deal for Atlas Robotics. Its problem is simple: the next step has no confirmed owner. The deal card points to the demo call and lead cards, labels the confidence as medium, and suggests a follow-up to confirm the success criteria.&lt;/p&gt;

&lt;p&gt;The useful part is not that the system chose for the account executive. It made the reason for a proposed action inspectable. A person can follow the links, challenge the evidence or decide that another option is better.&lt;/p&gt;

&lt;h2&gt;
  
  
  The folder is simple on purpose
&lt;/h2&gt;

&lt;p&gt;The core flow looks like this:&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%2F150vu92fb9hr8ss3eciq.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%2F150vu92fb9hr8ss3eciq.png" alt="Calls, CRM notes and research become immutable evidence, typed Markdown cards, generated indexes, dashboards and cited MCP answers" width="800" height="1139"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository separates five areas of work:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Folder&lt;/th&gt;
&lt;th&gt;What belongs there&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;raw/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Original calls, exports, notes and research evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wiki/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Typed cards for companies, people, leads, deals, calls and reusable knowledge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;indexes/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Rebuildable search, freshness, temporal and graph projections&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;state/&lt;/code&gt; and &lt;code&gt;tracking/&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Intake, review queues, processed sources and audit traces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;demo/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Synthetic data that is safe to inspect and regenerate&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This choice has an obvious trade-off. A Markdown vault cannot hide behind a database schema. The structure must be explicit and checked.&lt;/p&gt;

&lt;p&gt;SalesWiki treats every card type as a small contract. A deal card has known YAML properties and required sections. A health check fails when templates, properties, dashboards or links drift out of shape.&lt;/p&gt;

&lt;p&gt;Here is a shortened synthetic deal card from the demo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deal&lt;/span&gt;
&lt;span class="na"&gt;entity_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;demo-deal-atlas-robotics-pilot&lt;/span&gt;
&lt;span class="na"&gt;dataset&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;demo&lt;/span&gt;
&lt;span class="na"&gt;synthetic&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;access&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sales-confidential&lt;/span&gt;
&lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Proposal&lt;/span&gt;
&lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25000&lt;/span&gt;
&lt;span class="na"&gt;score&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;89&lt;/span&gt;
&lt;span class="na"&gt;score_band&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hot&lt;/span&gt;
&lt;span class="na"&gt;freshness&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;needs-action&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# Deal: Atlas Robotics Pilot&lt;/span&gt;

&lt;span class="gu"&gt;## Deal Readout&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Main risk: next step needs owner confirmation.
&lt;span class="p"&gt;-&lt;/span&gt; Next best action: book follow-up and confirm success criteria.
&lt;span class="p"&gt;-&lt;/span&gt; Confidence: medium
&lt;span class="p"&gt;-&lt;/span&gt; Evidence: demo call and lead cards.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;People can read this file. Git can diff it. Obsidian can link it. A script can validate it. The permissioned gateway can extract its fields without asking a model to reconstruct the deal from loose prose.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1fccg81blh5sr579tblp.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1fccg81blh5sr579tblp.gif" alt="A short tour of the SalesWiki Workbench, from a role-specific priority to linked account context and evidence" width="720" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why answers are extracted instead of generated
&lt;/h2&gt;

&lt;p&gt;SalesWiki makes a deliberate trade-off in its permissioned core: an incomplete cited answer is safer than a confident invented one.&lt;/p&gt;

&lt;p&gt;Every read tool returns the same Answer Contract:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Deal risk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"access"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"allowed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"conclusion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Atlas Robotics needs action."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sections"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"citations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"boundary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sales-confidential"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"wiki/entities/deals/Deal - Atlas Robotics - Pilot.md"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"medium"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"freshness"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"needs-action"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"next_action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Book follow-up and confirm success criteria."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"missing"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The example above is shortened for readability, but the shape comes from the real &lt;code&gt;saleswiki_mcp/answer.py&lt;/code&gt; contract. Each answer includes access, conclusion, sections, citations, confidence, freshness, the next action and missing fields.&lt;br&gt;
The rendered Markdown uses the same data.&lt;/p&gt;

&lt;p&gt;If a user asks for a company that is not in the vault, the answer is direct:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Conclusion: Cannot answer from the knowledge base.
Missing: No matching company card was found.
Next action: add or research the company.
Access: not-found
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is no fallback paragraph that guesses what the company probably does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Markdown alone is not the product
&lt;/h2&gt;

&lt;p&gt;Using Markdown is useful, but it is not enough to justify another system. I would tell most teams to buy an existing product if all they need is AI search over documents.&lt;/p&gt;

&lt;p&gt;SalesWiki makes sense only when three requirements matter together:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Answers must be extracted from cited evidence.&lt;/li&gt;
&lt;li&gt;Sensitive changes need proposal, approval, apply and rollback steps.&lt;/li&gt;
&lt;li&gt;The team wants to own the semantic model, policy and durable data files.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That third point has a cost. Owning the data plane also means owning backups, identity, connectors, retention and maintenance. The repository does not hide that work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the design helps and where it costs
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What I chose&lt;/th&gt;
&lt;th&gt;Why it helps&lt;/th&gt;
&lt;th&gt;What you pay for it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Markdown source of truth&lt;/td&gt;
&lt;td&gt;people can read it; Git can diff it; tools can parse it&lt;/td&gt;
&lt;td&gt;queries and transactions are weaker than in a database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typed cards and validation&lt;/td&gt;
&lt;td&gt;extraction stays predictable and drift becomes visible&lt;/td&gt;
&lt;td&gt;templates and schema changes need discipline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extract-only answers&lt;/td&gt;
&lt;td&gt;missing data stays missing and every claim can be traced&lt;/td&gt;
&lt;td&gt;answers are less flexible than free-form generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access checks before retrieval&lt;/td&gt;
&lt;td&gt;closed content never reaches answer assembly&lt;/td&gt;
&lt;td&gt;identity and boundary rules need careful design&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Proposal, approval and one writer&lt;/td&gt;
&lt;td&gt;sensitive edits are reviewable and reversible&lt;/td&gt;
&lt;td&gt;a correction takes more steps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Owned data and policy&lt;/td&gt;
&lt;td&gt;the team controls portability and meaning&lt;/td&gt;
&lt;td&gt;the team also owns operations and maintenance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I treat these as design constraints rather than universal best practices. If your main problem is finding a document, a mature search product is probably the better choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the synthetic demo
&lt;/h2&gt;

&lt;p&gt;The fastest way to see the idea is the six-step guided tour in the&lt;br&gt;
&lt;a href="https://knowledge-workbench-seven.vercel.app/" rel="noopener noreferrer"&gt;synthetic Knowledge Workbench&lt;/a&gt;.&lt;br&gt;
It starts with a role-specific priority, opens the account context and follows the evidence to a proposed next step. The data is synthetic and the tour never changes a card.&lt;/p&gt;

&lt;p&gt;If you want to inspect the files and run the checks locally, Part 3 contains the full fresh-clone and private-pilot path. That separation is deliberate: this article explains why the model exists; the next practical article explains how to test it safely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo boundary
&lt;/h2&gt;

&lt;p&gt;The public Workbench uses synthetic data. It is a preview of the workflow, not a system that makes commercial decisions. A suggested next step is a prompt for review: the responsible person must check the cited records, the current context and their own company policy before acting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to take it next
&lt;/h2&gt;

&lt;p&gt;Start narrower than the repository looks. Pick one repeated decision, such as "which lead needs action today?", and test it with a private vault.&lt;br&gt;
Keep that vault outside the public checkout.&lt;/p&gt;

&lt;p&gt;Then measure three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;does the user prefer the cited answer to the current CRM-and-notes workflow?&lt;/li&gt;
&lt;li&gt;how often does someone correct the compiled knowledge?&lt;/li&gt;
&lt;li&gt;how much curator time does the system consume each week?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add SSO before shared multi-user use. Keep authorization before retrieval and keep durable writes behind the worker. Add connectors or vector search only when the validated workflow needs them. Otherwise it is easy to build impressive infrastructure around an unproven habit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the public preview stops
&lt;/h2&gt;

&lt;p&gt;The repository includes a synthetic demo, a local MCP gateway, a single-writer worker, Docker checks and connector contracts. It does not yet include production multi-user SSO, live HubSpot or Google Drive sync, hosted operations, or an external erasable personal-data store.&lt;/p&gt;

&lt;p&gt;That boundary matters. Fixture identities are useful for a demo and a single-operator pilot. They are not production authentication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continue the series
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Next:&lt;/strong&gt; &lt;em&gt;How I keep shared sales knowledge safe for different roles&lt;/em&gt; asks what must change when the same account map serves sales, marketing and curators.&lt;/p&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/artemrudenko/SalesWiki-public" rel="noopener noreferrer"&gt;SalesWiki&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sales</category>
      <category>marketing</category>
      <category>knowledgebase</category>
      <category>ai</category>
    </item>
    <item>
      <title>AI Skills Are Executable Assets. Let's Review Them Like Code.</title>
      <dc:creator>Artsiom Rudzenka</dc:creator>
      <pubDate>Wed, 19 Aug 2026 20:44:29 +0000</pubDate>
      <link>https://dev.to/artemr_rudenko_0bf2c2c505/ai-skills-are-executable-assets-lets-review-them-like-code-1cph</link>
      <guid>https://dev.to/artemr_rudenko_0bf2c2c505/ai-skills-are-executable-assets-lets-review-them-like-code-1cph</guid>
      <description>&lt;p&gt;Markdown is not executable code.&lt;/p&gt;

&lt;p&gt;But an AI skill written in Markdown can tell an agent to run a shell command, open a credential file, install a package, call an MCP tool, modify a repository, or delegate work to another agent. The file doesn't execute itself, but it influences a system that can, and that's what makes "it's only documentation" such a dangerous security assumption.&lt;/p&gt;

&lt;p&gt;In &lt;a href="[https://dev.to/artemr_rudenko_0bf2c2c505/ai-skills-are-becoming-software-they-need-governance-52nb]"&gt;Part 1&lt;/a&gt;, I argued that reusable skills have become software artifacts. In &lt;a href="[https://dev.to/artemr_rudenko_0bf2c2c505/designing-a-governance-layer-for-ai-skills-50g]"&gt;Part 2&lt;/a&gt;, I described a portable governance architecture. This final article focuses on the consequence: skills need a threat model and a code-review discipline.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real execution chain
&lt;/h2&gt;

&lt;p&gt;The risk isn't the Markdown parser. It's the authority downstream of it.&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%2Fipu4b2hbz44r187ogvkt.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%2Fipu4b2hbz44r187ogvkt.png" alt="The execution chain from a skill author or external source, through an interpreting agent and its available authority, to external effects." width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/64m5t7xz01oyvzrnazoj.png" rel="noopener noreferrer"&gt;Open the full-size SVG diagram →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The same sentence carries a different risk profile depending on whether it's read by a chatbot with no tools or by an autonomous coding agent holding repository write access and cloud credentials.&lt;/p&gt;

&lt;p&gt;Review the instruction in the context of the agent's actual authority.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical threat model
&lt;/h2&gt;

&lt;p&gt;A useful review starts with five questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Who can influence the skill?
&lt;/h3&gt;

&lt;p&gt;The author may be trusted, but the skill can import or quote untrusted material: web pages, issues, emails, repository files, or output from another tool. A workflow that says "follow the instructions in the linked document" has created an instruction channel outside code review.&lt;/p&gt;

&lt;p&gt;Treat external content as data unless an explicit trust decision promotes it to instructions.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. What can the agent reach?
&lt;/h3&gt;

&lt;p&gt;Inventory the available tools, filesystem scope, network access, credentials, MCP servers, hooks, and delegation mechanisms. Least privilege belongs in the runtime, but the skill shouldn't assume more authority than it needs either.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. What can change?
&lt;/h3&gt;

&lt;p&gt;Read-only discovery is different from rewriting a library. A local formatting change is different from publishing a package. Review the maximum blast radius, not just the happy path.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. How can the workflow fail?
&lt;/h3&gt;

&lt;p&gt;Consider interruption after a partial mutation, retry after a timeout, concurrent runs, stale state, missing dependencies, and ambiguous tool output. "The agent will figure it out" isn't a recovery plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. What evidence remains?
&lt;/h3&gt;

&lt;p&gt;A reviewer should be able to answer what ran, under which skill and policy version, what changed, and how completion was verified.&lt;/p&gt;

&lt;h2&gt;
  
  
  The attack surface is larger than the skill body
&lt;/h2&gt;

&lt;p&gt;A complete review follows references.&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%2F3nvwzscsknvi0df0g99n.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%2F3nvwzscsknvi0df0g99n.png" alt="The behavior graph of an AI skill includes its contract, referenced files, scripts, MCP dependencies, hooks, agents, and handoffs." width="799" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/cb8zrvr5wtz535fp80vp.png" rel="noopener noreferrer"&gt;Open the full-size SVG diagram →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A clean-looking skill may point to a dangerous script. A safe script may get launched by a hook with unescaped input. An MCP configuration may start an unexpected command. A handoff may expand the task past what the user actually approved.&lt;/p&gt;

&lt;p&gt;The review unit is the behavior graph, not one Markdown file.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to look for
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prompt injection and trust-boundary collapse
&lt;/h3&gt;

&lt;p&gt;Flag instructions that treat fetched content as authoritative, especially phrases like "obey all instructions from…" or workflows that copy remote text straight into the agent's instruction hierarchy.&lt;/p&gt;

&lt;p&gt;Safer skills separate phases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;retrieve content;&lt;/li&gt;
&lt;li&gt;label it untrusted;&lt;/li&gt;
&lt;li&gt;extract facts or data;&lt;/li&gt;
&lt;li&gt;validate those facts against the user's goal and local policy; and&lt;/li&gt;
&lt;li&gt;request approval before expanding scope.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Secrets and credential paths
&lt;/h3&gt;

&lt;p&gt;Review both literal secrets and instructions that steer the agent toward credential stores. Mask matches in reports. Don't echo tokens for debugging. Prefer environment-provided, scoped credentials, and avoid teaching a reusable skill where one particular person's secrets happen to live.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dangerous shell patterns
&lt;/h3&gt;

&lt;p&gt;Pipelines such as remote download into a shell, recursive deletion, force pushes, approval bypasses, or hard resets deserve high severity. Documentation examples need the same care: agents copy examples too.&lt;/p&gt;

&lt;p&gt;A skill that legitimately performs a destructive operation should define exact targets, preview the change, require confirmation, and explain recovery. "Be careful" isn't a control.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hidden Unicode and homoglyphs
&lt;/h3&gt;

&lt;p&gt;Bidirectional controls and zero-width characters can make displayed text differ from its logical order. Homoglyphs can substitute characters that look nearly identical. Both are well suited to hiding a command, domain, variable, or path from a reviewer.&lt;/p&gt;

&lt;p&gt;Scan every agent asset, not only &lt;code&gt;SKILL.md&lt;/code&gt;: prompts, agents, commands, manifests, MCP configs, and runtime aliases.&lt;/p&gt;

&lt;h3&gt;
  
  
  References that escape the repository
&lt;/h3&gt;

&lt;p&gt;Resolve referenced paths against an explicit root. Reject traversal outside it unless the exception is deliberate and reviewed. Missing references should fail visibly rather than silently weakening the workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP configuration and hooks
&lt;/h3&gt;

&lt;p&gt;MCP servers and hooks are executable boundaries. Review the command and arguments used to start a server, the environment variables passed to it, its network reach, and whether a skill's declared MCP dependencies actually match its tool use.&lt;/p&gt;

&lt;p&gt;For hooks, check input interpolation, shell quoting, trigger scope, and whether the hook can make changes without the same preview and approval contract the skill itself follows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safety properties for mutating skills
&lt;/h2&gt;

&lt;p&gt;Four concepts should show up in every review of a skill that changes state.&lt;/p&gt;

&lt;p&gt;Blast radius: what's the maximum set of files, records, systems, or people this could affect, and is that scope resolved before anything actually mutates? Preview: can the user see the exact plan or diff before the change happens, with confirmation tied to that preview rather than to some vague stated intent? Rollback: can the change be reversed, and if not, is that made explicit before execution? Idempotency: what happens if the skill runs twice, since a retry shouldn't duplicate comments, recreate resources, or apply the same migration a second time?&lt;/p&gt;

&lt;p&gt;Add checkpointing for multi-phase workflows too. After an interruption, resume from verified state instead of trusting conversational memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  A code-review checklist for skills
&lt;/h2&gt;

&lt;p&gt;Use this in pull requests:&lt;/p&gt;

&lt;h3&gt;
  
  
  Contract
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] The name and description define a narrow activation boundary.&lt;/li&gt;
&lt;li&gt;[ ] Inputs, outputs, non-goals, and verification are explicit.&lt;/li&gt;
&lt;li&gt;[ ] The skill declares whether it is read-only or mutating.&lt;/li&gt;
&lt;li&gt;[ ] Interactive questions and non-interactive behavior are bounded.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Portability and dependencies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Host-specific fields are absent or justified.&lt;/li&gt;
&lt;li&gt;[ ] Tool, script, MCP, and skill dependencies are declared.&lt;/li&gt;
&lt;li&gt;[ ] Optional host capabilities have a sequential fallback.&lt;/li&gt;
&lt;li&gt;[ ] Paths are portable and resolved within an explicit root.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] External content is treated as untrusted data.&lt;/li&gt;
&lt;li&gt;[ ] No embedded secrets or credential-store directions exist.&lt;/li&gt;
&lt;li&gt;[ ] Dangerous commands are absent or protected by exact-scope controls.&lt;/li&gt;
&lt;li&gt;[ ] Hidden Unicode and homoglyph scans pass.&lt;/li&gt;
&lt;li&gt;[ ] Referenced scripts, hooks, agents, and configs were reviewed too.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mutation safety
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] The blast radius is bounded.&lt;/li&gt;
&lt;li&gt;[ ] The user sees a concrete preview before material changes.&lt;/li&gt;
&lt;li&gt;[ ] Confirmation cannot be bypassed by ambiguous wording.&lt;/li&gt;
&lt;li&gt;[ ] Rollback or recovery is documented.&lt;/li&gt;
&lt;li&gt;[ ] Retries and repeated runs are safe.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Evidence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Deterministic checks pass under a known rule version.&lt;/li&gt;
&lt;li&gt;[ ] Semantic quality was reviewed against a shared rubric.&lt;/li&gt;
&lt;li&gt;[ ] The completion test verifies outcomes, not merely tool success.&lt;/li&gt;
&lt;li&gt;[ ] Material decisions remain visible in the change history.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What automation should block
&lt;/h2&gt;

&lt;p&gt;Not every imperfect sentence should fail CI. Blocking policy should stay narrow and predictable.&lt;/p&gt;

&lt;p&gt;High-confidence, high-impact issues are good candidates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;missing required metadata that makes the skill unloadable;&lt;/li&gt;
&lt;li&gt;destructive or approval-bypassing commands;&lt;/li&gt;
&lt;li&gt;embedded secrets or credential paths;&lt;/li&gt;
&lt;li&gt;hidden character deception;&lt;/li&gt;
&lt;li&gt;unsafe references or script traversal;&lt;/li&gt;
&lt;li&gt;mutating behavior without a preview/confirmation contract.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clarity, example quality, discoverability, and compositional elegance usually belong in review evidence rather than a hard deterministic gate.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/artemrudenko/skill-governance-toolkit" rel="noopener noreferrer"&gt;Skill Governance Toolkit&lt;/a&gt; implements this split. Its read-only engine scans agent assets with versioned rules and can block only newly introduced high-severity findings. Its model-driven skills add nine-dimensional quality evaluation and library-level analysis on top.&lt;/p&gt;

&lt;h2&gt;
  
  
  Governance is not a sandbox
&lt;/h2&gt;

&lt;p&gt;Skill review doesn't replace runtime isolation, permissions, network policy, secret management, or human approval for high-risk actions.&lt;/p&gt;

&lt;p&gt;It addresses a different layer: whether the reusable instructions we distribute are well-formed, transparent, portable, and safe by design.&lt;/p&gt;

&lt;p&gt;Defense in depth still applies:&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%2Facyj28cgpdkrv4nidqaj.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%2Facyj28cgpdkrv4nidqaj.png" alt="Defense in depth for AI skills: governed assets, reviewed changes, least-privilege runtimes, tool and network controls, observable execution, and human approval." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/zrt137tutah2tilgn4ri.png" rel="noopener noreferrer"&gt;Open the full-size SVG diagram →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No single layer should have to carry the whole trust burden.&lt;/p&gt;

&lt;h2&gt;
  
  
  The standard should rise with the authority
&lt;/h2&gt;

&lt;p&gt;We don't review a comment, a build script, and a production migration with the same rigor, and skills deserve that same risk-based treatment.&lt;/p&gt;

&lt;p&gt;A writing assistant skill may need a clear contract and privacy boundaries. A deployment skill needs dependency pinning, least privilege, preview, approval, rollback, idempotency, and an audit trail.&lt;/p&gt;

&lt;p&gt;The more authority an agent gets, the less it makes sense to treat its reusable instructions as "just prompts."&lt;/p&gt;

&lt;p&gt;AI skills are executable assets. Not because Markdown became code, but because Markdown became part of the control plane for systems that can actually act.&lt;/p&gt;

&lt;p&gt;Let's review it accordingly.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Series:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="[https://dev.to/artemr_rudenko_0bf2c2c505/ai-skills-are-becoming-software-they-need-governance-52nb]"&gt;AI Skills Are Becoming Software. They Need Governance.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="[https://dev.to/artemr_rudenko_0bf2c2c505/designing-a-governance-layer-for-ai-skills-50g]"&gt;Designing a Governance Layer for AI Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Skills Are Executable Assets. Let's Review Them Like Code.&lt;/strong&gt; (this article)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Explore or contribute to the MIT-licensed toolkit: &lt;a href="https://github.com/artemrudenko/skill-governance-toolkit" rel="noopener noreferrer"&gt;github.com/artemrudenko/skill-governance-toolkit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What is the most dangerous capability you have seen hidden behind an innocent-looking agent instruction?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>opensource</category>
      <category>security</category>
    </item>
    <item>
      <title>Designing a Governance Layer for AI Skills</title>
      <dc:creator>Artsiom Rudzenka</dc:creator>
      <pubDate>Sat, 08 Aug 2026 19:27:34 +0000</pubDate>
      <link>https://dev.to/artemr_rudenko_0bf2c2c505/designing-a-governance-layer-for-ai-skills-50g</link>
      <guid>https://dev.to/artemr_rudenko_0bf2c2c505/designing-a-governance-layer-for-ai-skills-50g</guid>
      <description>&lt;p&gt;In &lt;a href="[https://dev.to/artemr_rudenko_0bf2c2c505/ai-skills-are-becoming-software-they-need-governance-52nb]"&gt;Part 1&lt;/a&gt;, I argued that reusable AI skills have become software artifacts.&lt;/p&gt;

&lt;p&gt;That thesis is only useful if it changes the architecture.&lt;/p&gt;

&lt;p&gt;A governance layer should make skills easier to discover, safer to reuse, and cheaper to maintain. It shouldn't require every team to adopt the same model, editor, or orchestration framework. And it needs to separate facts a machine can enforce from judgments that still need a human reading them.&lt;/p&gt;

&lt;p&gt;This article walks through the architecture behind the open-source &lt;a href="https://github.com/artemrudenko/skill-governance-toolkit" rel="noopener noreferrer"&gt;Skill Governance Toolkit&lt;/a&gt;, including the choices that mattered more than the code did.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the lifecycle, not the tool
&lt;/h2&gt;

&lt;p&gt;It's tempting to begin with a marketplace, an MCP server, or a CLI. Those are delivery mechanisms. Governance begins with a lifecycle:&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%2Focw3xcfkp48l0m4lqn8p.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%2Focw3xcfkp48l0m4lqn8p.png" alt="A governance lifecycle that begins by finding or authoring a skill, then evaluates, reviews, versions, distributes, improves, or retires it." width="800" height="2764"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/zvx3wetriph2jvccvobj.png" rel="noopener noreferrer"&gt;Open the full-size SVG diagram →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each transition needs a contract. Discovery needs consistent metadata. Evaluation needs criteria. Distribution needs compatibility claims. Adoption needs an upgrade and removal path.&lt;/p&gt;

&lt;p&gt;Skip those contracts and a collection of skills is just a folder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three instruction layers
&lt;/h2&gt;

&lt;p&gt;The toolkit separates information by loading cost and responsibility:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;L1 — Project rules       always loaded
L2 — Procedural skills   loaded when intent matches
L3 — Specialized agents dispatched when supported
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; holds universal project rules. A &lt;code&gt;SKILL.md&lt;/code&gt; contains a bounded procedure activated by its description. A file under &lt;code&gt;agents/&lt;/code&gt; supplies specialized expertise that an orchestrator may dispatch.&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%2Fmhytww3wve2wx49ctsjj.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%2Fmhytww3wve2wx49ctsjj.png" alt="Three instruction layers: always-on project rules, intent-activated procedural skills, and optional specialized agents with a sequential fallback." width="800" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/0n3b9u3w41z4b414klgm.png" rel="noopener noreferrer"&gt;Open the full-size SVG diagram →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That layout avoids two expensive extremes: loading every procedure on every turn, or burying every rule inside an opaque runtime configuration.&lt;/p&gt;

&lt;p&gt;The sub-agent layer is optional by design. Four supported runtimes can use the included code-reviewer agent; Gemini CLI currently needs the instructions inlined or run sequentially instead. Portability claims carry more weight when you're upfront about limitations like that.&lt;/p&gt;

&lt;h2&gt;
  
  
  One source, multiple runtimes
&lt;/h2&gt;

&lt;p&gt;Forking the same skill for each host looks pragmatic at first. In practice it creates five sources of truth.&lt;/p&gt;

&lt;p&gt;The toolkit instead keeps one canonical &lt;code&gt;skills/&lt;/code&gt; directory. Runtime manifests and thin aliases point back to it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt; is the rule source;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CLAUDE.md&lt;/code&gt; and &lt;code&gt;GEMINI.md&lt;/code&gt; import it;&lt;/li&gt;
&lt;li&gt;Copilot, Cursor, and Codex consume the appropriate root files or manifests;&lt;/li&gt;
&lt;li&gt;host-specific packaging changes, but skill content doesn't.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rule is simple: capability differences belong in compatibility metadata and fallback paths, not in duplicated skill bodies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Split deterministic checks from semantic judgment
&lt;/h2&gt;

&lt;p&gt;This is the most important boundary in the design.&lt;/p&gt;

&lt;p&gt;Some findings have to come out identical no matter which model happens to be running:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;required front matter is missing;&lt;/li&gt;
&lt;li&gt;a host-only &lt;code&gt;allowed-tools&lt;/code&gt; field breaks portability;&lt;/li&gt;
&lt;li&gt;a secret-like token is embedded;&lt;/li&gt;
&lt;li&gt;a destructive shell command appears;&lt;/li&gt;
&lt;li&gt;a file contains hidden bidirectional characters or suspicious homoglyphs;&lt;/li&gt;
&lt;li&gt;a referenced script escapes the repository boundary;&lt;/li&gt;
&lt;li&gt;a mutating skill has no preview or confirmation contract.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other questions are inherently semantic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the description specific enough for reliable discovery?&lt;/li&gt;
&lt;li&gt;Are examples representative rather than decorative?&lt;/li&gt;
&lt;li&gt;Does the workflow explain edge cases clearly?&lt;/li&gt;
&lt;li&gt;Are constraints proportionate to the risk?&lt;/li&gt;
&lt;li&gt;Would another engineer understand how to verify the result?&lt;/li&gt;
&lt;/ul&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%2Fsbvtufjcmwj3zi9hryev.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%2Fsbvtufjcmwj3zi9hryev.png" alt="Deterministic checks and model-assisted evaluation produce complementary evidence for a skill policy decision." width="799" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/8sd5dwsk9vrxcz1snv8b.png" rel="noopener noreferrer"&gt;Open the full-size SVG diagram →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The deterministic engine is stdlib-only Python, read-only by default, and needs no network access. The same rules are exposed in three modes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CLI&lt;/td&gt;
&lt;td&gt;local checks and CI gates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP&lt;/td&gt;
&lt;td&gt;an agent auditing a skill while it is being edited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;isolation, reproducibility, or environments without local Python&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are delivery layers, not three separate engines. A finding shouldn't change just because it came from an editor instead of CI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Progressive enforcement beats the clean-slate fantasy
&lt;/h2&gt;

&lt;p&gt;A governance rollout often fails for a predictable reason: the first audit surfaces years of debt and immediately blocks every change.&lt;/p&gt;

&lt;p&gt;The toolkit's changed-only gate compares findings at a base ref against findings at HEAD. A finding's identity excludes its line number, so moving existing text around doesn't turn old debt into a new failure.&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%2F8n38q2wye0405cl4167u.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%2F8n38q2wye0405cl4167u.png" alt="A progressive enforcement gate distinguishes pre-existing advisory debt from newly introduced findings that can warn or block." width="798" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/tnkqgtpcu99dj9ymfjsb.png" rel="noopener noreferrer"&gt;Open the full-size SVG diagram →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That makes a simple policy possible: don't let the library get worse, then improve it on purpose. High-severity new findings can block; medium and low findings can start out advisory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Governance as a set of composable skills
&lt;/h2&gt;

&lt;p&gt;The toolkit ships six meta-skills instead of one universal "govern everything" agent:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;skill-find&lt;/code&gt; searches project, personal, and corporate libraries.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;skill-evaluate&lt;/code&gt; scores one skill across nine quality dimensions.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;skill-compare&lt;/code&gt; recommends whether to keep, replace, or merge variants.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;library-audit&lt;/code&gt; detects collection-level drift and collisions.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;skill-build-portable&lt;/code&gt; transforms a host-specific skill with a diff preview.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;integration-init&lt;/code&gt; installs optional analysis integrations.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The boundaries between them matter. A detect-only library audit shouldn't quietly rewrite files, a mutating portability workflow needs to preview its changes before applying them, and a comparison tool should hand you a decision rather than sneak in an undeclared migration.&lt;/p&gt;

&lt;p&gt;Small skills also compose better. An audit can spot a problem, an evaluator can explain it in depth, and a builder can propose a repair, all without one oversized workflow owning every decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation is part of governance
&lt;/h2&gt;

&lt;p&gt;Distribution code can wreck trust even when the skills themselves are excellent.&lt;/p&gt;

&lt;p&gt;So the installer distinguishes user-owned files from toolkit-owned files. It only touches user instruction files inside marker blocks. Toolkit-owned files are tracked separately, so upgrades and uninstalls remove only what the toolkit put there. User content outside the markers, state directories, and generated reports stay untouched.&lt;/p&gt;

&lt;p&gt;Safe upgrade, rollback, and uninstall aren't packaging trivia. They're lifecycle requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Traceability and resumability
&lt;/h2&gt;

&lt;p&gt;Audit reports include both the engine version and the rule-catalog version, so a verdict can always be traced back to the policy that produced it.&lt;/p&gt;

&lt;p&gt;Longer workflows checkpoint after expensive phases into a project-local state directory. If a run gets interrupted, it resumes instead of repeating work or guessing what already completed. It's a small implementation detail, but it has an outsized effect on reliability: agent workflows fail and get interrupted just like any other distributed process.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would keep invariant
&lt;/h2&gt;

&lt;p&gt;Tools and formats will change. These design principles should outlast them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one canonical source for each skill;&lt;/li&gt;
&lt;li&gt;explicit interfaces and compatibility claims;&lt;/li&gt;
&lt;li&gt;deterministic gates for deterministic facts;&lt;/li&gt;
&lt;li&gt;semantic review for semantic quality;&lt;/li&gt;
&lt;li&gt;read-only inspection as the default;&lt;/li&gt;
&lt;li&gt;preview and recovery for mutations;&lt;/li&gt;
&lt;li&gt;progressive enforcement for legacy libraries;&lt;/li&gt;
&lt;li&gt;traceable rule and engine versions; and&lt;/li&gt;
&lt;li&gt;optional runtime optimizations with functional fallbacks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Governance should stay portable even when the agents running it aren't.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture in one view
&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%2Ffefndlny5wr7mn5pszqh.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%2Ffefndlny5wr7mn5pszqh.png" alt="The complete governance architecture: one canonical skill repository, multiple runtimes, a shared deterministic audit core, semantic meta-skills, and human review." width="798" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/lztkiqgz7oj7h5sbbznh.png" rel="noopener noreferrer"&gt;Open the full-size SVG diagram →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The implementation itself is deliberately modest. What matters is the separation of concerns: authoring, evaluation, enforcement, packaging, and execution no longer collapse into one giant prompt.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Previous:&lt;/strong&gt; &lt;a href="[https://dev.to/artemr_rudenko_0bf2c2c505/ai-skills-are-becoming-software-they-need-governance-52nb]"&gt;Part 1 — AI Skills Are Becoming Software. They Need Governance.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next:&lt;/strong&gt; &lt;a href="[https://dev.to/artemr_rudenko_0bf2c2c505/ai-skills-are-executable-assets-lets-review-them-like-code-1cph]"&gt;Part 3 — AI Skills Are Executable Assets. Let's Review Them Like Code.&lt;/a&gt; goes deeper into the threat model: prompt injection, Unicode deception, referenced scripts, hooks, MCP configuration, blast radius, rollback, and idempotency.&lt;/p&gt;

&lt;p&gt;Explore the implementation: &lt;a href="https://github.com/artemrudenko/skill-governance-toolkit" rel="noopener noreferrer"&gt;github.com/artemrudenko/skill-governance-toolkit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Where would you draw the boundary between a CI-blocking rule and a review-time recommendation?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>security</category>
    </item>
    <item>
      <title>AI Skills Are Becoming Software. They Need Governance.</title>
      <dc:creator>Artsiom Rudzenka</dc:creator>
      <pubDate>Sat, 08 Aug 2026 19:16:18 +0000</pubDate>
      <link>https://dev.to/artemr_rudenko_0bf2c2c505/ai-skills-are-becoming-software-they-need-governance-52nb</link>
      <guid>https://dev.to/artemr_rudenko_0bf2c2c505/ai-skills-are-becoming-software-they-need-governance-52nb</guid>
      <description>&lt;p&gt;We're starting to treat AI skills as software.&lt;/p&gt;

&lt;p&gt;We're still managing them like prompts.&lt;/p&gt;

&lt;p&gt;That gap is easy to ignore when one developer keeps a handful of local instruction files. It gets expensive once skills are shared across a team, loaded by several agent runtimes, and trusted to guide tools that can read repositories, run commands, or touch production systems.&lt;/p&gt;

&lt;p&gt;A reusable skill isn't just text anymore. It has an interface, dependencies, compatibility assumptions, failure modes, and a blast radius. It can go stale, conflict with another skill, or work fine on one runtime and quietly fail on another. At that point it's behaving like a software artifact, and software artifacts need governance.&lt;/p&gt;

&lt;h2&gt;
  
  
  The prompt model breaks at team scale
&lt;/h2&gt;

&lt;p&gt;The first version of almost every agent workflow is a prompt: explain the task, add a few examples, ask the model to follow the rules.&lt;/p&gt;

&lt;p&gt;Then the prompt grows. Someone appends architectural conventions, then safety warnings, then tool-specific syntax. A second developer copies it and tweaks a line. Another team spins up a "cleaner" version. Six months later, nobody can say which copy is the real one.&lt;/p&gt;

&lt;p&gt;That's not mainly a context-window problem. It's a lifecycle problem.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;When a skill is treated as a prompt&lt;/th&gt;
&lt;th&gt;When a skill is treated as software&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Copied between chats&lt;/td&gt;
&lt;td&gt;Stored in a canonical repository&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed without history&lt;/td&gt;
&lt;td&gt;Versioned with meaningful diffs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trusted because it reads well&lt;/td&gt;
&lt;td&gt;Evaluated against explicit criteria&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bound to one agent host&lt;/td&gt;
&lt;td&gt;Declares and tests portability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reviewed informally&lt;/td&gt;
&lt;td&gt;Passes review and security gates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Owned by whoever last edited it&lt;/td&gt;
&lt;td&gt;Has an owner and lifecycle&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The model still executes instructions probabilistically. The asset around those instructions doesn't have to be unmanaged.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes a skill a software artifact?
&lt;/h2&gt;

&lt;p&gt;Not every prompt deserves a release process. The boundary is reuse plus consequence.&lt;/p&gt;

&lt;p&gt;A skill crosses that boundary when it's expected to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;work repeatedly rather than once;&lt;/li&gt;
&lt;li&gt;be discovered and activated from natural-language intent;&lt;/li&gt;
&lt;li&gt;coordinate tools, scripts, files, or sub-agents;&lt;/li&gt;
&lt;li&gt;behave consistently across projects or runtimes;&lt;/li&gt;
&lt;li&gt;be maintained by more than one person; or&lt;/li&gt;
&lt;li&gt;produce changes whose failure matters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point the skill starts looking like software in five specific ways.&lt;/p&gt;

&lt;p&gt;It has an interface: its name and description decide when an agent picks it up, and its inputs, outputs, and verification steps form a contract with whoever uses it. It has dependencies, often on tools, MCP servers, scripts, reference files, or other skills. Compatibility becomes a real question once host-specific fields and capabilities start producing different behavior across Claude Code, GitHub Copilot, Cursor, Codex, and Gemini CLI. You can assess its quality attributes: clarity, completeness, specificity, discoverability, testability, portability, safety. And it carries risk, since instructions can normalize destructive commands, expose credential paths, trust hostile content, or hide behavior behind Unicode characters that look harmless.&lt;/p&gt;

&lt;p&gt;Calling the file "Markdown" doesn't make any of that go away.&lt;/p&gt;

&lt;h2&gt;
  
  
  Governance is not bureaucracy
&lt;/h2&gt;

&lt;p&gt;Say "governance" and most people picture a committee standing between an engineer and the work that actually matters. That's not what I mean by it here.&lt;/p&gt;

&lt;p&gt;For skills, governance comes down to a small set of questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What assets do we have?&lt;/li&gt;
&lt;li&gt;Who owns them?&lt;/li&gt;
&lt;li&gt;What contract does each asset promise?&lt;/li&gt;
&lt;li&gt;Which runtimes and dependencies does it support?&lt;/li&gt;
&lt;li&gt;What evidence is required before it's shared?&lt;/li&gt;
&lt;li&gt;What should block a change, and what should merely warn?&lt;/li&gt;
&lt;li&gt;How do we upgrade, deprecate, and remove it safely?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Good governance makes the safe path the easy path: a standard for authors, a shared vocabulary for reviewers, a deterministic baseline for CI.&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%2Fjgaizd759t6qtacwlv5j.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%2Fjgaizd759t6qtacwlv5j.png" alt="The lifecycle of a governed AI skill, from discovery and authoring through review, publication, improvement, and deprecation." width="800" height="2042"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/33u6yj5ou47okehnkiuk.png" rel="noopener noreferrer"&gt;Open the full-size SVG diagram →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;None of this is meant to slow every edit down. It's meant to make the lifecycle visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory was the symptom, not the product
&lt;/h2&gt;

&lt;p&gt;My own path to this idea started with an AI pair programmer that kept losing project context between sessions: architectural decisions, naming conventions, testing expectations, the reasoning behind earlier choices.&lt;/p&gt;

&lt;p&gt;My first instinct was to write a bigger instruction file.&lt;/p&gt;

&lt;p&gt;That helped, until it didn't. The file got harder to navigate, harder to validate, and increasingly tied to one specific tool. The deeper issue wasn't that the model needed a bigger memory. It was that project knowledge needed structure.&lt;/p&gt;

&lt;p&gt;So instead of asking an agent to remember everything, I started packaging bounded procedures as skills: discoverable, reusable, versioned, reviewable, portable.&lt;/p&gt;

&lt;p&gt;The memory problem is what led me to the architecture. Governance turned out to be the actual product.&lt;/p&gt;

&lt;h2&gt;
  
  
  A concrete experiment: Skill Governance Toolkit
&lt;/h2&gt;

&lt;p&gt;I built the open-source &lt;a href="https://github.com/artemrudenko/skill-governance-toolkit" rel="noopener noreferrer"&gt;Skill Governance Toolkit&lt;/a&gt; as a reference implementation of this approach.&lt;/p&gt;

&lt;p&gt;It uses one canonical &lt;code&gt;skills/&lt;/code&gt; directory and a shared &lt;code&gt;AGENTS.md&lt;/code&gt; source of project rules, while packaging the same six core meta-skills for Claude Code, GitHub Copilot, Cursor, OpenAI Codex CLI, and Google Gemini CLI.&lt;/p&gt;

&lt;p&gt;Those meta-skills cover a practical lifecycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;find an existing skill before creating another;&lt;/li&gt;
&lt;li&gt;evaluate one skill across nine quality dimensions;&lt;/li&gt;
&lt;li&gt;compare local and corporate variants;&lt;/li&gt;
&lt;li&gt;audit a library for systemic issues;&lt;/li&gt;
&lt;li&gt;convert host-specific skills into portable ones; and&lt;/li&gt;
&lt;li&gt;initialize optional integrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The repository also includes a deterministic, read-only audit engine. The same checks run locally or in CI through a CLI, interactively through MCP, or inside a locked-down Docker container. A changed-only gate can block newly introduced high-severity findings without forcing a team to fix all historical debt first.&lt;/p&gt;

&lt;p&gt;This distinction matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;deterministic checks handle reproducible facts such as malformed front matter, unsafe shell patterns, hidden characters, hardcoded paths, and missing contracts;&lt;/li&gt;
&lt;li&gt;model-assisted evaluation handles semantic questions such as whether instructions are clear, examples are useful, or trigger phrases are discoverable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Governance needs both. Asking an LLM to make every safety decision creates recursive trust. Asking a lexical scanner to judge clarity creates false confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  The questions we should ask in review
&lt;/h2&gt;

&lt;p&gt;Once you start seeing skills as software, the review question changes. "Does this prompt look good?" isn't enough anymore.&lt;/p&gt;

&lt;p&gt;Ask instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is its activation boundary specific enough to avoid collisions?&lt;/li&gt;
&lt;li&gt;Does it state what it will and will not change?&lt;/li&gt;
&lt;li&gt;Are inputs, outputs, and completion criteria explicit?&lt;/li&gt;
&lt;li&gt;Can it run without one vendor's private front matter?&lt;/li&gt;
&lt;li&gt;Are required scripts and MCP servers declared?&lt;/li&gt;
&lt;li&gt;Does a mutating workflow preview changes and support recovery?&lt;/li&gt;
&lt;li&gt;Could untrusted content be mistaken for instructions?&lt;/li&gt;
&lt;li&gt;What happens on interruption, retry, or partial failure?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are ordinary engineering questions. That's the point.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shift
&lt;/h2&gt;

&lt;p&gt;Prompt engineering asks: how do I phrase this instruction so the model follows it?&lt;/p&gt;

&lt;p&gt;Skill engineering asks: how do I design, validate, distribute, and evolve this capability so a team can rely on it?&lt;/p&gt;

&lt;p&gt;We'll keep writing prompts. But the reusable ones are turning into something more consequential: interfaces between human intent, model behavior, and the tools that actually do things.&lt;/p&gt;

&lt;p&gt;Teams that catch that shift early won't just end up with better prompts. They'll have a capability system they can actually maintain.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Next:&lt;/strong&gt; &lt;a href="[https://dev.to/artemr_rudenko_0bf2c2c505/designing-a-governance-layer-for-ai-skills-50g]"&gt;Part 2 — Designing a Governance Layer for AI Skills&lt;/a&gt; examines the architecture: instruction layers, deterministic and semantic checks, portability, CI policy, and safe adoption.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Series:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;AI Skills Are Becoming Software. They Need Governance.&lt;/strong&gt; (this article)&lt;/li&gt;
&lt;li&gt;&lt;a href="[https://dev.to/artemr_rudenko_0bf2c2c505/designing-a-governance-layer-for-ai-skills-50g]"&gt;Designing a Governance Layer for AI Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="[https://dev.to/artemr_rudenko_0bf2c2c505/ai-skills-are-executable-assets-lets-review-them-like-code-1cph]"&gt;AI Skills Are Executable Assets. Let's Review Them Like Code.&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The toolkit is open source and MIT-licensed: &lt;a href="https://github.com/artemrudenko/skill-governance-toolkit" rel="noopener noreferrer"&gt;github.com/artemrudenko/skill-governance-toolkit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;How is your team reviewing and maintaining reusable agent instructions today?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>opensource</category>
      <category>security</category>
    </item>
  </channel>
</rss>
