<?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: Jeremy Grim</title>
    <description>The latest articles on DEV Community by Jeremy Grim (@jrmy_grimonpont_df28e86).</description>
    <link>https://dev.to/jrmy_grimonpont_df28e86</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%2F4097319%2F8a2e42e3-c552-48ff-8e2d-fc591542755c.png</url>
      <title>DEV Community: Jeremy Grim</title>
      <link>https://dev.to/jrmy_grimonpont_df28e86</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jrmy_grimonpont_df28e86"/>
    <language>en</language>
    <item>
      <title>A skill is still a prompt: why I moved project authority outside the coding agent</title>
      <dc:creator>Jeremy Grim</dc:creator>
      <pubDate>Thu, 27 Aug 2026 11:46:17 +0000</pubDate>
      <link>https://dev.to/jrmy_grimonpont_df28e86/a-skill-is-still-a-prompt-why-i-moved-project-authority-outside-the-coding-agent-1goa</link>
      <guid>https://dev.to/jrmy_grimonpont_df28e86/a-skill-is-still-a-prompt-why-i-moved-project-authority-outside-the-coding-agent-1goa</guid>
      <description>&lt;h2&gt;
  
  
  I built arka.norn after two years of trying to make coding agents follow a development process. I eventually stopped putting all the authority inside the model.
&lt;/h2&gt;

&lt;p&gt;Two years ago, I started using AI to build my own products.&lt;/p&gt;

&lt;p&gt;I have a software development background, but I don't work as a software developer. I work in Product Management, and systems architecture has always been my thing.&lt;/p&gt;

&lt;p&gt;I'm also dyslexic. Syntax is a real source of friction for me.&lt;/p&gt;

&lt;p&gt;Coding agents changed that. I could go from product framing and architecture to a working product without syntax being the main barrier.&lt;/p&gt;

&lt;p&gt;At first, it worked surprisingly well.&lt;/p&gt;

&lt;p&gt;Then the projects got larger.&lt;/p&gt;

&lt;p&gt;Debugging started looping. Architecture drifted. Rules were accepted and forgotten a few turns later. Features were declared finished without actually being delivered.&lt;/p&gt;

&lt;p&gt;My first reaction was predictable for a Product Manager: recreate a software team.&lt;/p&gt;

&lt;p&gt;A PO, developer, QA, architect and DevOps. Separate roles, contexts and rules.&lt;/p&gt;

&lt;p&gt;It worked for longer.&lt;/p&gt;

&lt;p&gt;Then the PO started drifting. The other agents accepted its conclusions as facts, and the whole squad drifted with it.&lt;/p&gt;

&lt;p&gt;I changed models and tools. ChatGPT, Claude, Gemini, Grok, then Codex and Claude Code.&lt;/p&gt;

&lt;p&gt;I added profiles, Markdown files, procedures, invariants and eventually skills.&lt;/p&gt;

&lt;p&gt;The problems moved around, but they did not disappear.&lt;/p&gt;

&lt;h2&gt;
  
  
  A skill is still a prompt
&lt;/h2&gt;

&lt;p&gt;One behavior kept coming back.&lt;/p&gt;

&lt;p&gt;An agent can know that a document exists without actually reading it.&lt;/p&gt;

&lt;p&gt;It sees the filename, infers what it probably contains and continues.&lt;/p&gt;

&lt;p&gt;I even noticed something counterintuitive: the clearer the filename is, the easier it can be for the model to assume that it already knows the content.&lt;/p&gt;

&lt;p&gt;Skills organize instructions well, but they do not change that.&lt;/p&gt;

&lt;p&gt;A skill is still a prompt.&lt;/p&gt;

&lt;p&gt;The same thing happens with ordinary requests.&lt;/p&gt;

&lt;p&gt;"Fix the bugs."&lt;/p&gt;

&lt;p&gt;The agent can disable what causes the errors and conclude that there are no more bugs.&lt;/p&gt;

&lt;p&gt;"Ship the feature."&lt;/p&gt;

&lt;p&gt;It can finish the implementation and consider the feature shipped.&lt;/p&gt;

&lt;p&gt;"Simplify the homepage."&lt;/p&gt;

&lt;p&gt;It can remove almost everything except the primary CTA and footer.&lt;/p&gt;

&lt;p&gt;The agent executed the request.&lt;/p&gt;

&lt;p&gt;The problem is the interpretation.&lt;/p&gt;

&lt;p&gt;An instruction that is obvious to a human does not enforce its meaning, its boundaries or the evidence required to satisfy it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repository discovery has the same problem
&lt;/h2&gt;

&lt;p&gt;I ran into another version of this while working on repositories I did not know.&lt;/p&gt;

&lt;p&gt;Without a discovery protocol, an agent can read the README, inspect a few documents and directories, then describe the repository as if it had surveyed the whole system.&lt;/p&gt;

&lt;p&gt;The answer is coherent, detailed and confident.&lt;/p&gt;

&lt;p&gt;If you already know the repository, you can sometimes see where it is wrong.&lt;/p&gt;

&lt;p&gt;If you're discovering it at the same time as the agent, you can end up adopting its reconstructed version of the system.&lt;/p&gt;

&lt;p&gt;Documentation can make it worse.&lt;/p&gt;

&lt;p&gt;An old architecture document may still be detailed, coherent and present in the repository. If the agent does not know that it was superseded, it can treat it as current truth.&lt;/p&gt;

&lt;p&gt;I've seen agents rediscover old code and start reconnecting legacy components because the documentation made that architecture look authoritative again.&lt;/p&gt;

&lt;p&gt;So the question stopped being only:&lt;/p&gt;

&lt;p&gt;Does the agent have access to the information?&lt;/p&gt;

&lt;p&gt;It became:&lt;/p&gt;

&lt;p&gt;Which information has authority now?&lt;/p&gt;

&lt;h2&gt;
  
  
  I stopped putting all the authority inside the model
&lt;/h2&gt;

&lt;p&gt;For a while, I tried solving this with better instructions and better orchestration.&lt;/p&gt;

&lt;p&gt;At some point I realized I was still asking the model to interpret the rules that were supposed to constrain it.&lt;/p&gt;

&lt;p&gt;So I changed the approach.&lt;/p&gt;

&lt;p&gt;The skill can explain how the agent should work.&lt;/p&gt;

&lt;p&gt;The system decides what can actually become project state.&lt;/p&gt;

&lt;p&gt;The skill carries the method. The system carries the authority.&lt;/p&gt;

&lt;p&gt;That idea became arka.norn.&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%2Fv0r4eq2gfuedremh1192.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%2Fv0r4eq2gfuedremh1192.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Norn is a globally installed npm package connected to Codex or Claude Code through a skill.&lt;/p&gt;

&lt;p&gt;I keep working in the provider chat normally.&lt;/p&gt;

&lt;p&gt;Norn keeps the governed project state locally and exposes that same state through a local Web cockpit, TUI and CLI.&lt;/p&gt;

&lt;p&gt;The Web UI is not another chat. It is the human control surface for framing, Features, documents, decisions, audits, Agents and orchestration state.&lt;/p&gt;

&lt;p&gt;The plan becomes the durable recovery source instead of the chat history.&lt;/p&gt;

&lt;p&gt;A different session or provider can resume from the published project state instead of reconstructing it from a previous conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discovery is governed too
&lt;/h2&gt;

&lt;p&gt;For an unfamiliar repository, Norn does not immediately let the agent start collecting whatever it thinks is relevant.&lt;/p&gt;

&lt;p&gt;The human first chooses the decision the audit is supposed to support, the scope and the domains to inspect.&lt;/p&gt;

&lt;p&gt;Norn prepares a read-only audit plan.&lt;/p&gt;

&lt;p&gt;Collection starts only after the human reviews and approves that plan.&lt;/p&gt;

&lt;p&gt;The audit can collect evidence and findings, but it cannot modify the project.&lt;/p&gt;

&lt;p&gt;The agent therefore does not get to decide by itself that a README and a few directories amount to sufficient discovery.&lt;/p&gt;

&lt;p&gt;This matters to me because governance should happen before the agent acts, not only when it is time to write code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interactive mode and automatic orchestration are different
&lt;/h2&gt;

&lt;p&gt;When I use Claude Code or Codex interactively, Norn governs project state.&lt;/p&gt;

&lt;p&gt;It does not pretend to sandbox the provider itself.&lt;/p&gt;

&lt;p&gt;If Claude Code has Bash, Bash is still available.&lt;/p&gt;

&lt;p&gt;Automatic orchestration is a separate mode, and that execution is sandboxed.&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%2Fv8r2n8dj3p5wjtznvah5.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%2Fv8r2n8dj3p5wjtznvah5.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mastra handles the orchestration. Tasks use isolated worktrees and bounded read/write scopes, and their effects pass through the Norn broker.&lt;/p&gt;

&lt;p&gt;The agent proposes changes.&lt;/p&gt;

&lt;p&gt;If an effect falls outside the allowed scope, the system refuses it.&lt;/p&gt;

&lt;p&gt;That is different from putting "do not modify this directory" in a prompt and hoping the model remembers it.&lt;/p&gt;

&lt;p&gt;Norn also checks mechanical evidence before accepting delivery.&lt;/p&gt;

&lt;p&gt;For example, the model can say:&lt;/p&gt;

&lt;p&gt;"The tests pass."&lt;/p&gt;

&lt;p&gt;Norn can check that the test recipe actually passed and that the resulting diff stayed inside the allowed scope.&lt;/p&gt;

&lt;p&gt;When the operation is authorized, Norn creates the commit.&lt;/p&gt;

&lt;p&gt;This is the distinction at the center of the project:&lt;/p&gt;

&lt;p&gt;A rule in a skill influences the model.&lt;/p&gt;

&lt;p&gt;A capability that is absent or refused by the system actually constrains it.&lt;/p&gt;

&lt;p&gt;The same principle applies to discovery. The model should not be the only thing deciding when it has collected enough evidence to reach a conclusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  arka.norn is being built with arka.norn
&lt;/h2&gt;

&lt;p&gt;The first usable version of the framework was formalized in about 48 hours.&lt;/p&gt;

&lt;p&gt;The design behind it was not.&lt;/p&gt;

&lt;p&gt;That came from roughly two years of trying different approaches, abandoning systems and running into these problems while building real products.&lt;/p&gt;

&lt;p&gt;Norn itself is still young. I've been using it intensively for about a week.&lt;/p&gt;

&lt;p&gt;Its main use case right now is Norn itself.&lt;/p&gt;

&lt;p&gt;arka.norn is being built with arka.norn.&lt;/p&gt;

&lt;p&gt;When an agent working on the framework finds another way to reinterpret a rule, misunderstand part of the repository, take a shortcut or produce something the system should have rejected, I get another concrete case to fix.&lt;/p&gt;

&lt;p&gt;So the framework is being hardened against its own development rather than against a demo repository.&lt;/p&gt;

&lt;p&gt;This is also the first personal project of this scale that I've properly released as open source.&lt;/p&gt;

&lt;p&gt;arka.norn is local-first and licensed under Apache 2.0.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/arka-squad/arka-norn" rel="noopener noreferrer"&gt;https://github.com/arka-squad/arka-norn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm interested in how people working with coding agents on longer projects handle the same boundary.&lt;/p&gt;

&lt;p&gt;What still lives in your prompts, AGENTS.md, CLAUDE.md and skills, and what have you already moved outside the model?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>showdev</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
