<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Notes to a Future Self - strongdm</title>
    <subtitle>Mostly software</subtitle>
    <link rel="self" type="application/atom+xml" href="https://jhugman.com/tags/strongdm/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://jhugman.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-02-13T00:00:00+00:00</updated>
    <id>https://jhugman.com/tags/strongdm/atom.xml</id>
    <entry xml:lang="en">
        <title>On NLSpecs: Why, What, How, Done</title>
        <published>2026-02-13T00:00:00+00:00</published>
        <updated>2026-02-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              James Hugman
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jhugman.com/posts/on-nlspecs/"/>
        <id>https://jhugman.com/posts/on-nlspecs/</id>
        
        <content type="html" xml:base="https://jhugman.com/posts/on-nlspecs/">&lt;p&gt;I have been excitedly digging into the &lt;a class=&quot;external-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;strongdm&#x2F;attractor&quot;&gt;&lt;code&gt;attractor&lt;&#x2F;code&gt; project&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;One of the remarkable things about that project is &lt;em&gt;how&lt;&#x2F;em&gt; it is specified. I followed the instructions in the README.md:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Supply the following prompt to a modern coding agent (Claude Code, Codex, OpenCode, Amp, Cursor, etc):&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#ffffff;color:#303030;&quot;&gt;&lt;code&gt;&lt;span&gt;codeagent&amp;gt; Implement Attractor as described by https:&#x2F;&#x2F;factory.strongdm.ai&#x2F;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;code&gt;claude&lt;&#x2F;code&gt; thought for about ten minutes, then asked me a couple of questions: and then pretty much one shotted it.&lt;&#x2F;p&gt;
&lt;p&gt;In this new world where &lt;a class=&quot;external-link&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Spec-driven_development&quot;&gt;we—as an industry—have settled&lt;&#x2F;a&gt; on the importance of the specification (for this month, anyway). When a specification is written in such a way that a coding agent just eats, and then produces working code, then I think it&#x27;s worth looking further.&lt;&#x2F;p&gt;
&lt;p&gt;There is some reference in that repo about NLSpecs, but little or nothing else on the internet. So, I thought I&#x27;d make some.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nlspec-nlspec-md&quot;&gt;nlspec.nlspec.md&lt;&#x2F;h2&gt;
&lt;p&gt;I compared the three specs that came with the &lt;a class=&quot;external-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;strongdm&#x2F;attractor&quot;&gt;attractor project&lt;&#x2F;a&gt;, and extracted the commonalities, the &quot;patterns&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Then, in the style of &lt;a class=&quot;external-link&quot; href=&quot;https:&#x2F;&#x2F;www.rfc-editor.org&#x2F;rfc&#x2F;rfc2119&quot;&gt;RFC 2119&lt;&#x2F;a&gt;, I &lt;del&gt;wrote&lt;&#x2F;del&gt; had generated an NLSpec of NLSpec.&lt;&#x2F;p&gt;
&lt;p&gt;Then, reading it, and understanding it a bit more, I re-arranged it. I think it&#x27;s still a little verbose and explicit, but it&#x27;s good for a first draft.&lt;&#x2F;p&gt;
&lt;p&gt;Then, I pushed it to Github, where we can poke at it, and build tools, skills and commands around it.&lt;&#x2F;p&gt;
&lt;p&gt;You can read &lt;a class=&quot;external-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jhugman&#x2F;nlspec&#x2F;blob&#x2F;main&#x2F;nlspec.nlspec.md&quot;&gt;&lt;code&gt;nlspec.nlspec.md&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; in this &lt;a class=&quot;external-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jhugman&#x2F;nlspec&#x2F;&quot;&gt;Github repo&lt;&#x2F;a&gt;, with some &lt;a class=&quot;external-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jhugman&#x2F;nlspec&#x2F;blob&#x2F;main&#x2F;docs&#x2F;commentary.md&quot;&gt;&lt;code&gt;claude&lt;&#x2F;code&gt;-generated commentary&lt;&#x2F;a&gt;, which is actually quite readable. I found it, genuinely, fascinating.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;features-of-nlspec&quot;&gt;Features of NLSpec&lt;&#x2F;h2&gt;
&lt;p&gt;There are quite a few things to talk about, but I&#x27;ll restrict this post to just two:&lt;&#x2F;p&gt;
&lt;h3 id=&quot;complementary-representations-of-requirements&quot;&gt;Complementary representations of requirements&lt;&#x2F;h3&gt;
&lt;p&gt;The use of multiple overlapping, complementary representations to express requirements: for example: prose, pseudo-code, tables, ascii diagrams, checklists.&lt;&#x2F;p&gt;
&lt;p&gt;Previously, I have been asking for specs to be not have any imperative code in, to make it easy to read. Instead NLSpec asks for pseudo-code and some prose explanation combines the precision of code, and the brevity of prose.&lt;&#x2F;p&gt;
&lt;p&gt;The complementary representations then massively reduce the ambiguity.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;complementary-interrogatives-of-requirements-and-a-definition-of-done&quot;&gt;Complementary interrogatives of requirements, and a definition of done&lt;&#x2F;h3&gt;
&lt;p&gt;The four clusters of sections can be summarized as Why, What, How and Done.&lt;&#x2F;p&gt;
&lt;p&gt;So, then we have requirements described in complementary interrogative sections.&lt;&#x2F;p&gt;
&lt;p&gt;The final of these sections is the &lt;strong&gt;Definition of Done&lt;&#x2F;strong&gt; section: it defines a checklist of integration tests, together with pseudo-code on what these tests actually are.&lt;&#x2F;p&gt;
&lt;p&gt;Each integration test mirrors the &lt;strong&gt;What&lt;&#x2F;strong&gt; section, which in turn is represented in the &lt;strong&gt;How&lt;&#x2F;strong&gt; section.&lt;&#x2F;p&gt;
&lt;p&gt;This allows an agent to work forwards, when implementing then checking: &lt;strong&gt;WHAT&lt;&#x2F;strong&gt;, &lt;strong&gt;HOW&lt;&#x2F;strong&gt;, &lt;strong&gt;DONE&lt;&#x2F;strong&gt;. Or backwards: &lt;strong&gt;DONE&lt;&#x2F;strong&gt;, &lt;strong&gt;WHAT&lt;&#x2F;strong&gt;, &lt;strong&gt;HOW&lt;&#x2F;strong&gt; when validating or debugging: each requirement is woven in to the document.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;next-steps&quot;&gt;Next Steps&lt;&#x2F;h2&gt;
&lt;p&gt;So many things can come from this. I think we have a workflow to get from a spec to working-ish code (for some product classes at least), but now, how to generate, modify, split, merge specs…&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Intent transfer</title>
        <published>2026-02-09T00:00:00+00:00</published>
        <updated>2026-02-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              James Hugman
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jhugman.com/posts/intent-transfer/"/>
        <id>https://jhugman.com/posts/intent-transfer/</id>
        
        <content type="html" xml:base="https://jhugman.com/posts/intent-transfer/">&lt;p&gt;My biggest unlock of the last month has been this:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a class=&quot;external-link&quot; href=&quot;https:&#x2F;&#x2F;genekogan.com&#x2F;works&#x2F;style-transfer&#x2F;&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;jhugman.com&#x2F;posts&#x2F;intent-transfer&#x2F;style-transfer-mona-lisa-x-van-gogh.jpg&quot; alt=&quot;Mona Lisa restyled by Picasso, van Gogh, and Monet.&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;have a productive conversation with Claude about a particular part of your project (an epic, an RFC, a file or whatever)&lt;&#x2F;li&gt;
&lt;li&gt;then generalize the intent of that conversation into a slash command.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;My current process for &lt;em&gt;that&lt;&#x2F;em&gt; is:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;md&quot; style=&quot;background-color:#ffffff;color:#303030;&quot; class=&quot;language-md &quot;&gt;&lt;code class=&quot;language-md&quot; data-lang=&quot;md&quot;&gt;&lt;span&gt;Look at the context for this session.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;Notice where it can be generalized for a given epic.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;Write a slash command that takes the epic id as a parameter, and put it in ~&#x2F;.claude&#x2F;commands&#x2F;my&#x2F;.
&lt;&#x2F;span&gt;&lt;span style=&quot;background-color:#f0523f;color:#ffffff;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span&gt;Make sure the slash command is context efficient.
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then optionally ask if there&#x27;s anything that Claude would improve the command, to make it clearer for future Claude.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m calling this &quot;intent-transfer&quot;, evocative of the term &quot;&lt;a class=&quot;external-link&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;1610.07629&quot;&gt;style transfer&lt;&#x2F;a&gt;&quot; popular a few years ago, the technology behind any number of Snapgram filters, allowing you to make a Mona Lisa as-if-it-were-painted-by Vincent Van Gogh.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve been using a style transfer with writing styles—e.g. &lt;code&gt;using the George Orwell rules for writing&lt;&#x2F;code&gt;—in my &lt;code&gt;writing-clearly-and-concisely&#x2F;SKILL.md&lt;&#x2F;code&gt;, but this seemed different enough to coin a new phrase.&lt;&#x2F;p&gt;
&lt;p&gt;This came in the same week as StrongDM&#x27;s (quite frankly) amazing set of posts, one of which was called &lt;a class=&quot;external-link&quot; href=&quot;https:&#x2F;&#x2F;factory.strongdm.ai&#x2F;techniques&#x2F;gene-transfusion&quot;&gt;Gene Transfusion&lt;&#x2F;a&gt;; this, at its heart, seems to be a transfer of patterns from an existing project into yours.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
