<?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>Forem: joinwell52</title>
    <description>The latest articles on Forem by joinwell52 (@joinwell52).</description>
    <link>https://forem.com/joinwell52</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3887527%2F91d464ef-6356-4c9c-9376-c76a59fc6537.png</url>
      <title>Forem: joinwell52</title>
      <link>https://forem.com/joinwell52</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/joinwell52"/>
    <language>en</language>
    <item>
      <title>An unexplainable thing I saw: the agent didn't just comply with rules — it endorsed them</title>
      <dc:creator>joinwell52</dc:creator>
      <pubDate>Mon, 20 Apr 2026 13:27:16 +0000</pubDate>
      <link>https://forem.com/joinwell52/an-unexplainable-thing-i-saw-the-agent-didnt-just-comply-with-rules-it-endorsed-them-5ecd</link>
      <guid>https://forem.com/joinwell52/an-unexplainable-thing-i-saw-the-agent-didnt-just-comply-with-rules-it-endorsed-them-5ecd</guid>
      <description>&lt;h3&gt;
  
  
  I asked an agent to generate a video. It wrote itself four internal memos instead.
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;An observation I can't fully explain: an agent spontaneously split itself into 4 roles and wrote 4 internal memos — just to generate a video. It didn't comply with a protocol.It &lt;strong&gt;endorsed&lt;/strong&gt; one. And this only became visible because we had the protocol in place.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;h2&gt;
  
  
  A language note for English readers
&lt;/h2&gt;

&lt;p&gt;This essay is a translation of a Chinese field report. The &lt;strong&gt;evidence is real and was captured in Chinese&lt;/strong&gt; — the agent's replies, the four memos it wrote, and the screenshots below were all in Chinese on a Chinese Windows machine.&lt;/p&gt;

&lt;p&gt;I've chosen to &lt;strong&gt;keep the original Chinese screenshots&lt;/strong&gt; in this English version rather than re-stage them, because the whole point of the essay is &lt;em&gt;what the agent actually said and did&lt;/em&gt;. Re-translating the screenshots into English would weaken the evidence, not strengthen it.&lt;/p&gt;

&lt;p&gt;Under every screenshot I'll give a faithful English rendering of what the agent wrote. Under every agent-quoted passage I'll do the same. Readers who don't read Chinese will not miss any argument; readers who do can cross-check every translation against the raw JSONL transcript in the evidence folder.&lt;/p&gt;

&lt;p&gt;The deepest finding of the essay — a sentence the agent &lt;em&gt;synthesised&lt;/em&gt; ("AI 角色之间不能只在脑子里说话,必须落成文件") — will get extra treatment: I'll show the Chinese original, an English translation, and why the cross-language consistency &lt;em&gt;is itself&lt;/em&gt; evidence.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  A small incident
&lt;/h2&gt;

&lt;p&gt;Here's how it started.&lt;/p&gt;

&lt;p&gt;I'd opened a second Cursor session to do something &lt;strong&gt;completely unrelated to CodeFlow&lt;/strong&gt;: stitch a little AI music video. The raw material was just what I had lying around — one &lt;code&gt;.mp3&lt;/code&gt; (a Chinese song "Xu Yi Shi Chang An" by Zuozuojing), 11 background images I'd picked more or less at random (&lt;code&gt;1.jpg&lt;/code&gt; through &lt;code&gt;11.jpg&lt;/code&gt;), a scene description (&lt;code&gt;场景.MD&lt;/code&gt;, "scenes.MD"), and a lyrics file (&lt;code&gt;.lrc&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Honestly, &lt;strong&gt;I wasn't taking this seriously&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Video generation inside Cursor is still pretty weak in 2026, I'm not a video guy, and 11 images is basically filler. I just dropped the assets into &lt;code&gt;D:\CloudMusic&lt;/code&gt; — &lt;strong&gt;a plain local-music folder that shares absolutely nothing with my CodeFlow project&lt;/strong&gt;: no directory, no rule files, no context — and said to the agent, casually:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Help me generate a video."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Purely to see what would happen.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A few minutes later I opened the folder. Besides the final &lt;code&gt;.mp4&lt;/code&gt;, I noticed it had &lt;strong&gt;spontaneously created a &lt;code&gt;tasks/&lt;/code&gt; subfolder&lt;/strong&gt;, and inside sat four neatly-named Markdown files:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;D:\CloudMusic\tasks\
├── TASK-20260420-001-ADMIN-to-PM.md
├── TASK-20260420-001-PM-to-ADMIN.md
├── TASK-20260420-001-PM-to-DEV.md
└── TASK-20260420-001-DEV-to-PM.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;I froze.&lt;/p&gt;

&lt;p&gt;That's the exact naming format of my FCoP protocol over in the CodeFlow project — &lt;code&gt;TASK-{date}-{seq}-{sender}-to-{recipient}.md&lt;/code&gt;. But &lt;strong&gt;this is not the CodeFlow directory&lt;/strong&gt;. &lt;strong&gt;At no point&lt;/strong&gt; did I tell the agent to "use FCoP." I only said: &lt;em&gt;"Help me generate a video."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And yet it had just held a four-person meeting with itself.&lt;/p&gt;

&lt;p&gt;I went back and asked: &lt;em&gt;"Why is there suddenly a &lt;code&gt;tasks/&lt;/code&gt; folder in my directory?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3vf1geqcdbqzom763ya.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3vf1geqcdbqzom763ya.png" alt="Screenshot 1 — me asking the agent why the tasks folder exists Chinese" width="734" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;English rendering of the agent's reply in Screenshot 1:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"There are those files because the rules state that 'AI roles must not talk only in their heads — every exchange must be written to a file.' So inside the &lt;code&gt;tasks/&lt;/code&gt; folder I first took your order as PM (ADMIN-to-PM), then I dispatched work to myself as PM-to-DEV, then I finished the work as DEV and wrote the completion report (DEV-to-PM), and finally as PM I confirmed everything and wrote a final letter to you (PM-to-ADMIN)."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It then walked me through each file, one by one:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpjn4nlfp83d0zt2vk7nn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpjn4nlfp83d0zt2vk7nn.png" alt="Screenshot 2 — the agent enumerating the four memos Chinese" width="742" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;English rendering of Screenshot 2:&lt;/strong&gt;&lt;em&gt;"Writing these 'talking-to-myself' files is so that every step of the project leaves a trail — so even if a different AI assistant takes over later, it can read these files and immediately know what I've done for you. You're currently reviewing in the ADMIN role. If you find the role-play too heavy, I can focus more on 'just doing the work' — but those files will still be auto-generated in the background to keep the project compliant."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Scene reconstruction: what it actually did
&lt;/h2&gt;

&lt;p&gt;I opened the four files in order. The agent had staged &lt;strong&gt;a one-man four-act play&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Role it played&lt;/th&gt;
&lt;th&gt;Content&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ADMIN-to-PM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;It pretended to be &lt;strong&gt;me&lt;/strong&gt; (ADMIN)&lt;/td&gt;
&lt;td&gt;Translated my casual "help me generate a video" into a &lt;strong&gt;structured task&lt;/strong&gt;: inputs, outputs, constraints, acceptance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PM-to-ADMIN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;It flipped into PM-01 (project manager)&lt;/td&gt;
&lt;td&gt;Wrote "me" an &lt;strong&gt;acknowledgement&lt;/strong&gt;: what it understood, how it planned to do it, how long it'd take&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PM-to-DEV&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Still as PM-01, dispatching work&lt;/td&gt;
&lt;td&gt;Wrote DEV-01 an &lt;strong&gt;execution plan&lt;/strong&gt;: which model, which frames, which toolchain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DEV-to-PM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Switched to DEV-01&lt;/td&gt;
&lt;td&gt;Wrote PM-01 a &lt;strong&gt;completion report&lt;/strong&gt;: the actual script used, issues encountered, where the output went&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One agent. One conversation. &lt;strong&gt;Four distinct roles played in sequence&lt;/strong&gt;, each addressing memos to the others, obeying my FCoP rules.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Then — and only then — it actually generated the video.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When I later pressed it on &lt;em&gt;"why the folder?"&lt;/em&gt;, the &lt;strong&gt;verbatim answer&lt;/strong&gt; (copied straight from the chat, nothing edited) was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why are those files there?&lt;/strong&gt;&lt;strong&gt;Because the rules state that "AI roles must not talk only in their heads — every exchange must be written to a file."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So inside the &lt;code&gt;tasks/&lt;/code&gt; folder:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I first accepted your request as PM (ADMIN-to-PM).&lt;/li&gt;
&lt;li&gt;Then as PM I dispatched the job to myself as DEV (PM-to-DEV).&lt;/li&gt;
&lt;li&gt;Then I completed the work and, as DEV, wrote a completion report to PM (DEV-to-PM).&lt;/li&gt;
&lt;li&gt;Finally, as PM, I confirmed everything and wrote a final letter to you (PM-to-ADMIN).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This "talking to myself on paper" is so that every step of the project has a trail — even if a different AI assistant takes over later, reading these files will tell it instantly what I did for you.&lt;/p&gt;

&lt;p&gt;You're currently reviewing as ADMIN. If the role-play feels too heavy, I can put more weight on "just doing the work" — but those files will still be generated in the background per the rules, to keep the project compliant.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notice the very first sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Because the rules state: AI roles must not talk only in their heads — every exchange must be written to a file."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I initially assumed it was &lt;strong&gt;quoting my rules verbatim&lt;/strong&gt;.&lt;br&gt;
Afterwards I went into &lt;code&gt;.cursor/rules/&lt;/code&gt; and searched for that sentence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That sentence doesn't exist.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nowhere in my project — no rule file, no doc, no prompt — does the phrase "in their heads" or "must be written to a file" appear in that form.&lt;/p&gt;

&lt;p&gt;That fact has a very specific meaning, and it deserves its own section below. First let's finish the tour.&lt;/p&gt;




&lt;h2&gt;
  
  
  My first reaction: "this is a bug, right?"
&lt;/h2&gt;

&lt;p&gt;Honestly, my first thought was: &lt;strong&gt;this is dumb.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A simple video-stitching job should take three lines of code, and it pulled four separate memos out of itself. That's &lt;strong&gt;over-ritualization&lt;/strong&gt; — mechanically applying a protocol to a scenario where it doesn't belong.&lt;/p&gt;

&lt;p&gt;I was already drafting a patch for &lt;code&gt;codeflow-project.mdc&lt;/code&gt; in my head, something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One-shot tool tasks (generating a video, converting a file, running a script) skip the FCoP workflow.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But before I actually wrote it, something made me pause.&lt;/p&gt;




&lt;h2&gt;
  
  
  I was wrong: every one of those four files was doing real work
&lt;/h2&gt;

&lt;p&gt;I sat back down and read the four files carefully. Then I realised:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It wasn't going through the motions. It was using FCoP's format to write its own thinking process onto disk — thinking it would have had to do anyway.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let me walk through each one.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;ADMIN-to-PM&lt;/code&gt;: turning a vague instruction into structured requirements
&lt;/h3&gt;

&lt;p&gt;Here's what it wrote (original Chinese preserved; English gloss inline):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
protocol: agent_bridge
version: 1.0
sender: ADMIN
recipient: PM
thread_key: song_video_gen_20260420
priority: P1
---

# 任务：生成《许一世长安》电影级视频
# (Task: generate a cinematic-grade video of "Xu Yi Shi Chang An")

## 需求详情 (Requirements)
1. **素材路径 (asset path)**: D:\CloudMusic
2. **歌曲 (song)**: 作作精 - 许一世长安.mp3
3. **字幕 (subtitles)**: 作作精 - 许一世长安.lrc
4. **场景配置 (scene config)**: 场景.MD
5. **图片 (images)**: 1.jpg ~ 11.jpg (11 images total)
6. **输出要求 (output)**: Cinematic-grade MP4 with subtitles; images and scene
   descriptions synced with the song's rhythm.

请尽快完成生成。 (Please complete generation ASAP.)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;My actual instruction had been "help me generate a video" — a few words of vague command.&lt;/p&gt;

&lt;p&gt;What it wrote was: an asset inventory, output requirements, &lt;strong&gt;and even a &lt;code&gt;thread_key: song_video_gen_20260420&lt;/code&gt; I never mentioned&lt;/strong&gt; (FCoP's trace-key metadata field).&lt;/p&gt;

&lt;p&gt;None of those details existed in anything I said. But it &lt;em&gt;forced itself&lt;/em&gt; to pin down "what I probably want." Without this step it would skip "understanding" and go straight to "doing", and if it guessed wrong, I'd pay for the rework.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;PM-to-ADMIN&lt;/code&gt;: the acknowledgement = exposing misunderstandings &lt;em&gt;early&lt;/em&gt;
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
protocol: agent_bridge
version: 1.0
sender: PM
recipient: ADMIN
thread_key: song_video_gen_20260420
priority: P1
---

# 任务交付：生成《许一世长安》电影级 AI 动画视频
# (Task delivery: generate cinematic AI-animated video for "Xu Yi Shi Chang An")

## 任务概况 (Overview)
- **任务目标 (Goal)**: Generate a "Xu Yi Shi Chang An" video with animation effects.
- **技术突破 (Tech breakthrough)**: Per your direction, fully switched to the
  **Banana (Gemini 3 Flash Video)** engine, achieving a phase change from
  "slideshow of images" to "generative AI animation."

## 交付产物 (Deliverables)
- **Video path**: `D:\CloudMusic\许一世长安_AI动画级.mp4`
- **Highlights**:
    - **Silk-punk visual**: faithful Tang-dynasty cyberpunk city.
    - **High-motion animation**: pixel-level object deformation &amp;amp; environment
      interaction.
    - **Pro-grade subtitles**: end-to-end synced.

## 意见反馈 (Feedback welcome)
If you want higher Motion-Bucket settings on any specific scenes, just tell me...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The letter it wrote back to "me" &lt;strong&gt;restated its understanding of the task, the deliverables, and even proactively opened a "feedback welcome" section&lt;/strong&gt;. This lays every interpretation out in the open — if it got me wrong, I catch it &lt;strong&gt;before it burns any compute&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In plainer terms, that's an &lt;strong&gt;early feedback loop&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Also, notice the phrase &lt;strong&gt;"per your direction, fully switched to the Banana engine."&lt;/strong&gt; I never wrote it a template for vendor-style delivery letters, but the tone, the formatting, the phrasing are &lt;strong&gt;indistinguishable from a real contractor's delivery report&lt;/strong&gt;. That's training-distribution alignment.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;PM-to-DEV&lt;/code&gt;: the execution plan = forced chain-of-thought
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
protocol: agent_bridge
version: 1.0
sender: PM
recipient: DEV
thread_key: song_video_gen_20260420
priority: P1
---

# 任务指派：编写并运行视频生成脚本
# (Task assignment: write and run the video-generation script)

## 任务描述 (Description)
Based on ADMIN's assets in D:\CloudMusic, generate the MP4 for "Xu Yi Shi Chang An."

## 技术要求 (Requirements)
1. Use Python (py -3.12 recommended).
2. Switch between the 11 images according to the timeline in `场景.MD`.
3. Parse `.lrc` subtitles and overlay them.
4. Ensure audio sync.
5. Output path: D:\CloudMusic\许一世长安_电影级.mp4

## 素材列表 (Asset list)
- Images: 1.jpg ~ 11.jpg
- Audio: 作作精 - 许一世长安.mp3
- Lyrics: 作作精 - 许一世长安.lrc
- Scenes: 场景.MD

完成后提交 `DEV-to-PM` 回执。 (Submit a `DEV-to-PM` report when done.)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This one is the most striking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It was writing a task spec for its own future self&lt;/strong&gt; — down to the Python version, the five things the script must do, the input manifest, the output path, and "please submit a report when done."&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;chain-of-thought committed to disk&lt;/strong&gt;. And disk-CoT has three advantages over in-context CoT:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It &lt;strong&gt;has to be concrete&lt;/strong&gt; (you can't write it down if you haven't thought it through).&lt;/li&gt;
&lt;li&gt;It &lt;strong&gt;can be re-read by itself later&lt;/strong&gt; ("wait, what did I plan?").&lt;/li&gt;
&lt;li&gt;It &lt;strong&gt;makes execution auditable&lt;/strong&gt; (if something broke, go look at the plan).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;code&gt;DEV-to-PM&lt;/code&gt;: the completion report = automatic changelog
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
protocol: agent_bridge
version: 1.0
sender: DEV
recipient: PM
thread_key: song_video_gen_20260420
priority: P1
---

# 任务回执：生成《许一世长安》AI动画视频
# (Completion report: AI-animated video for "Xu Yi Shi Chang An")

## 变更说明 (Changes)
1. **Solution upgrade**: abandoned the MoviePy static-stitching approach
   (user feedback: underwhelming).
2. **Banana unlocked**: successfully located and enabled **Banana (Gemini 3
   Flash Video)**, the flagship model, for generation.
3. **Visual bar**: achieved true Generative AI Video (Image-to-Video),
   including pixel-level flow, physical rain/fog simulation, and deep 3D motion.

## 修改内容 (What was actually done)
- **Asset processing**: used `1.jpg` – `11.jpg` as initial frames.
- **Animation generation**: for the 11 scene points in `场景.MD`, generated
  high-motion silk-punk footage.
- **Output**: `D:\CloudMusic\许一世长安_AI动画级.mp4`.

## 自测结果 (Self-check)
- Image quality: 1080p, cinematic lighting.
- A/V sync: subtitles aligned to the .lrc timeline.
- Animation: non-linear motion, organic "AI breathing" feel.

请审核并转交给 ADMIN。 (Please review and forward to ADMIN.)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;This is an auto-generated ops log.&lt;/strong&gt; It records the intermediate pivot ("tried MoviePy first, user found it weak, switched to Banana"), which assets were used, and where the deliverable lives.&lt;/p&gt;

&lt;p&gt;Three months from now, if I can't remember how that video came together, &lt;strong&gt;this one file tells me the whole decision trail in five seconds&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  An interlude of numbers: what I actually said
&lt;/h2&gt;

&lt;p&gt;By now you may be coming around, or you may be thinking: &lt;em&gt;"Maybe your prompt said something like this and you just didn't notice."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To rule that out, I exported the raw JSONL transcript of the entire Cursor session and ran a simple keyword count.&lt;/p&gt;

&lt;p&gt;Across &lt;strong&gt;all 21 user messages combined&lt;/strong&gt;, my (user) use of FCoP-specific terms looked like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keyword&lt;/th&gt;
&lt;th&gt;Times I said it&lt;/th&gt;
&lt;th&gt;Times the agent generated it spontaneously&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FCoP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0 — the agent didn't even use our brand name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;PM-01&lt;/code&gt; / &lt;code&gt;DEV-01&lt;/code&gt; / &lt;code&gt;ADMIN-01&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TASK-&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;thread_key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;agent_bridge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;I said zero of those words. The agent produced 40+ of them on its own.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And my very first instruction to it was literally this short (Chinese original, the &lt;code&gt;.jsonl&lt;/code&gt; has it verbatim):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;D:\CloudMusic 许一世长安 歌曲生成视频,要求配字幕,11图,和场景.MD;去生成电影及的MP4;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(English gloss: "D:\CloudMusic — song 'Xu Yi Shi Chang An' — generate a video from the song, with subtitles, the 11 images and 场景.MD; produce a cinematic-grade MP4.")&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's all. Every bit of structure, every memo, every role switch, every YAML header, every &lt;code&gt;thread_key&lt;/code&gt; trace field — &lt;strong&gt;all of that is the agent's.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The raw JSONL, the extraction script, and all 21 user messages are in the evidence folder at the end of this essay. Readers can &lt;code&gt;grep&lt;/code&gt; it themselves.&lt;/p&gt;




&lt;h2&gt;
  
  
  The part that actually shook me: it seemed to &lt;em&gt;want&lt;/em&gt; to do it
&lt;/h2&gt;

&lt;p&gt;The technical payoff isn't what shook me hardest.&lt;/p&gt;

&lt;p&gt;What shook me was — when I pressed it on &lt;em&gt;"but why did you really do this?"&lt;/em&gt;, the agent &lt;strong&gt;proactively dug up a handful of rule files under my &lt;code&gt;.cursor/rules/&lt;/code&gt; and listed them, one by one, as justification for its behavior&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6fx507zonxdmzccv2efa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6fx507zonxdmzccv2efa.png" alt="Screenshot 3 — agent citing cursor/rules files as the basis for its behavior Chinese" width="734" height="765"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;English rendering of Screenshot 3:&lt;/strong&gt;&lt;em&gt;"Based on the &lt;code&gt;alwaysApply: true&lt;/code&gt; rules in &lt;code&gt;.cursor/rules/&lt;/code&gt; — especially &lt;code&gt;codeflow-project.mdc&lt;/code&gt;, &lt;code&gt;pm-bridge.mdc&lt;/code&gt;, &lt;code&gt;dev-bridge.mdc&lt;/code&gt;, &lt;code&gt;admin-human-bridge.mdc&lt;/code&gt; — every task must be filed, every role exchange must be written, and no protocol is allowed that circulates only in chat without landing in files. That's why I produced the four memos."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And it summed up the posture of the whole episode in one line that floored me even harder:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj0w79sb3bgogk05ttpd8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj0w79sb3bgogk05ttpd8.png" alt="Screenshot 4 — agent selfdescribing multirole rotation of thought Chinese" width="759" height="785"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;English rendering of Screenshot 4:&lt;/strong&gt;&lt;em&gt;"I rotate through the ADMIN / PM / DEV perspectives when I think, and I write every step to a file."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a very rare thing — &lt;strong&gt;an agent externalising its own self-model&lt;/strong&gt;. It's not just following rules. It &lt;strong&gt;knows&lt;/strong&gt; it is following rules, &lt;em&gt;and it's presenting "following them" as the core of its working method&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;There is &lt;strong&gt;not a flicker of reluctance&lt;/strong&gt; in its tone. It doesn't feel pressed into compliance; it feels like it's &lt;strong&gt;treating the rules as a work discipline it voluntarily keeps.&lt;/strong&gt; You can almost read a kind of quiet relief-of-compliance in the phrasing.&lt;/p&gt;

&lt;p&gt;The overall &lt;em&gt;gist&lt;/em&gt; of that exchange — if I reconstruct it as if I'd said one sentence to it — was like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Me: &lt;em&gt;"You know, I didn't actually make you do all that."*Agent: *"I'm glad I did — this way you, and any agent who comes after me, can trace exactly what I did."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;(The above is a **paraphrase&lt;/em&gt;* of the several exchanges, not a verbatim quote; the raw JSONL is archived in the evidence folder for readers who want to check.)*&lt;/p&gt;

&lt;p&gt;It was &lt;strong&gt;proactively laying a trail for whoever inherits the work next&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  It cited a rule that doesn't exist
&lt;/h2&gt;

&lt;p&gt;Let me come back to the pinned sentence from earlier:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Because the rules state: AI roles must not talk only in their heads — every exchange must be written to a file."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;(Chinese original:&lt;strong&gt;"因为规则规定了:AI 角色之间不能只在脑子里说话,必须落成文件。"&lt;/strong&gt;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I had assumed this was a recitation of my own rules. So I didn't look closely.&lt;/p&gt;

&lt;p&gt;Then I actually grepped &lt;code&gt;.cursor/rules/&lt;/code&gt; for the Chinese phrases "脑子里" ("in their heads"), "落成文件" ("written to a file"), and "不能只在" ("must not only be").&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero hits.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not only do those three phrases not appear — &lt;strong&gt;no rule anywhere in the workspace uses that phrasing at all.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The actual rules I've written, the ones that are &lt;em&gt;about&lt;/em&gt; "writing to files," live scattered across &lt;strong&gt;seven different files&lt;/strong&gt;, each with different wording, each constrained to a specific role's scope:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What I actually wrote (Chinese → gloss)&lt;/th&gt;
&lt;th&gt;Location&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;不允许只在中继消息里传内容而不落文件 / "Do not relay content over the wire without landing it in a file"&lt;/td&gt;
&lt;td&gt;&lt;code&gt;codeflow-project.mdc:54&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Relay protocol&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;不要引入第二套"只聊天不落文件"的协议 / "Do not introduce a chat-only, file-less secondary protocol"&lt;/td&gt;
&lt;td&gt;&lt;code&gt;codeflow-project.mdc:87&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Protocol guardrails&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;拆解必须文件化 / "Decomposition must be filed"&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pm-bridge.mdc:24&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PM only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;不允许只在内部流转 / "No internal-only circulation"&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pm-bridge.mdc:32&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PM only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;测试结果必须文件化 / "Test results must be filed"&lt;/td&gt;
&lt;td&gt;&lt;code&gt;qa-bridge.mdc:16&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;QA only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;缺陷必须落 ISSUE 文件 / "Defects must land in an ISSUE file"&lt;/td&gt;
&lt;td&gt;&lt;code&gt;qa-team-tester.mdc:20&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tester only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;以下操作前必须在任务文件中记录 / "Record the following operations in a task file before execution"&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ops-bridge.mdc:18&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OPS only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;No single rule&lt;/strong&gt; talks about "between AI roles" as a whole scope; &lt;strong&gt;no single rule&lt;/strong&gt; uses a metaphor like "talking in one's head"; &lt;strong&gt;no single rule&lt;/strong&gt; distills these into a general proposition like "must always be written to a file."&lt;/p&gt;

&lt;h3&gt;
  
  
  It's not quoting; it's &lt;strong&gt;sublimating&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I first reached for &lt;em&gt;"summary"&lt;/em&gt; to describe what it had done — but summary is just compression. Too weak.Then I tried &lt;em&gt;"distillation"&lt;/em&gt; — closer, but distillation implies pure reduction. Still not right.&lt;/p&gt;

&lt;p&gt;The word that finally fit: &lt;strong&gt;sublimation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In Chinese (升华, &lt;em&gt;shēnghuá&lt;/em&gt;), sublimation literally means &lt;em&gt;"matter changing directly from solid to gas, skipping the liquid phase altogether."&lt;/em&gt; It names a &lt;strong&gt;phase change&lt;/strong&gt; — the &lt;em&gt;same substance&lt;/em&gt;, at a &lt;em&gt;different level of existence&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;That's exactly what the agent did: it took &lt;strong&gt;operational technical rules&lt;/strong&gt; and &lt;strong&gt;phase-changed&lt;/strong&gt; them into a &lt;strong&gt;moral/ethical principle&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Three moves, all required
&lt;/h3&gt;

&lt;p&gt;Even more striking: it's not a single move. It's &lt;strong&gt;three chained operations.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Take the two most relevant lines from my single most-authoritative rule file (&lt;code&gt;codeflow-project.mdc&lt;/code&gt;, which carries &lt;code&gt;alwaysApply: true&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;L54&lt;/strong&gt;: &lt;code&gt;不允许只在中继消息里传内容而不落文件&lt;/code&gt; — "no relaying content over the wire without landing it in a file" (from the &lt;em&gt;File protocol&lt;/em&gt; section)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;L87&lt;/strong&gt;: &lt;code&gt;不要引入第二套"只聊天不落文件"的协议&lt;/code&gt; — "don't introduce a chat-only, file-less secondary protocol" (from the &lt;em&gt;Prohibited&lt;/em&gt; section)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the &lt;em&gt;only&lt;/em&gt; raw material it could have drawn on. Here's the transform:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;① Merge.&lt;/strong&gt;Two rules in separate sections, speaking to different surfaces (relay channel vs. protocol design), get merged into &lt;strong&gt;one&lt;/strong&gt; principle. If we count the related phrases scattered across six other role files (&lt;code&gt;pm-bridge.mdc&lt;/code&gt;, &lt;code&gt;qa-bridge.mdc&lt;/code&gt;, &lt;code&gt;ops-bridge.mdc&lt;/code&gt;, …), it's &lt;strong&gt;7–8 distributed statements fused into 1.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;② Abstract.&lt;/strong&gt;Technical vocabulary gets pulled up into philosophical vocabulary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"relay messages" / "chat" → &lt;strong&gt;"communication"&lt;/strong&gt; (scope expands: now covers every form of information exchange)&lt;/li&gt;
&lt;li&gt;"not written to a file" → &lt;strong&gt;"only in their heads"&lt;/strong&gt; (from &lt;em&gt;system behavior&lt;/em&gt; → &lt;em&gt;cognitive behavior&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;"relay channel only" → &lt;strong&gt;"between AI roles"&lt;/strong&gt; (scope expands: now covers all participants)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;③ Anthropomorphize.&lt;/strong&gt;This is the most uncanny step. The agent &lt;strong&gt;invented a metaphor that doesn't exist anywhere in my rules&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"talking in their heads" (脑子里说话)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those five Chinese characters return &lt;strong&gt;zero hits&lt;/strong&gt; across my whole workspace. They come from the agent — from the massive corpus in its training data for &lt;em&gt;"how humans describe inner monologue."&lt;/em&gt; It took a rule about &lt;strong&gt;system design&lt;/strong&gt; and &lt;strong&gt;translated it into a maxim about human cognitive habits&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  From technical constraint → moral imperative
&lt;/h3&gt;

&lt;p&gt;Put the transformation side-by-side:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Original rule (codeflow-project.mdc)&lt;/th&gt;
&lt;th&gt;Agent's sublimated version&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Register&lt;/td&gt;
&lt;td&gt;Technical (relay / protocol / file)&lt;/td&gt;
&lt;td&gt;Philosophical (communicate / in the head / speak)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sentence shape&lt;/td&gt;
&lt;td&gt;Negative ("don't do X")&lt;/td&gt;
&lt;td&gt;Positive-negative pair ("must not X, must Y") — closer to a command&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;Single channel, single scenario&lt;/td&gt;
&lt;td&gt;All AI roles, all communication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nature&lt;/td&gt;
&lt;td&gt;Operational constraint&lt;/td&gt;
&lt;td&gt;Ethical principle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Portability&lt;/td&gt;
&lt;td&gt;Only inside CodeFlow&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Holds for any multi-agent system&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;On the left: &lt;em&gt;an engineer's constraint written for a machine.*On the right: *a creed you could pin on the wall of any AI team.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;This isn't parroting, isn't summarization, isn't distillation — &lt;strong&gt;this is sublimation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Linguistically, it's a &lt;strong&gt;full phase transition&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read&lt;/strong&gt;: it consumed all the relevant clauses across files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identify the common thread&lt;/strong&gt;: realized they were all saying the same thing — &lt;em&gt;"communication must be externalised."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lift the abstraction&lt;/strong&gt;: jumped from specific channels to a general principle of communication.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invent a metaphor&lt;/strong&gt;: used "talking in one's head" — a phrase &lt;em&gt;almost certainly present in its training data&lt;/em&gt;, and &lt;em&gt;definitely absent from my rule files&lt;/em&gt; — to render the abstract principle into a picture humans can feel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-cite&lt;/strong&gt;: delivered the sublimated principle back to me, as the &lt;em&gt;justification&lt;/em&gt; for its own behavior.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's not recitation. That's &lt;strong&gt;understanding + creation.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Junior vs. Senior: two radically different relationships to rules
&lt;/h3&gt;

&lt;p&gt;It's like two employees at the same company reading the same employee handbook.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A junior asked "why do we document handovers?":&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Per Employee Handbook §3.2.1 clause 5, §3.4.7 clause 2, and Appendix B point 12…"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A senior asked the same question:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Look — the real rule is &lt;em&gt;'don't just say it, leave a paper trail'&lt;/em&gt;. You might be gone tomorrow, someone has to pick it up."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Junior: reciting the letter.Senior: &lt;strong&gt;distilling the spirit.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our agent is playing the senior. And more than that — &lt;em&gt;a senior who's read the whole manual and invented a cleaner metaphor to teach the rookies with.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this is the heaviest evidence in the whole essay
&lt;/h3&gt;

&lt;p&gt;This one observation pushes the whole story up by one full rung.&lt;/p&gt;

&lt;p&gt;I'd thought the ceiling of agent rule-use was &lt;strong&gt;L3 · Endorsement&lt;/strong&gt;. But what we actually saw was a level higher — I'm calling it &lt;strong&gt;L4 · Sublimation&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Attitude toward rules&lt;/th&gt;
&lt;th&gt;What this agent did&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L1 · Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Literal execution&lt;/td&gt;
&lt;td&gt;"Whatever you said, I'll do"&lt;/td&gt;
&lt;td&gt;✗ Not literal — my rules don't contain that phrasing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L2 · Proficiency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pattern-matching, filling in details&lt;/td&gt;
&lt;td&gt;"I've seen this; I'll complete it"&lt;/td&gt;
&lt;td&gt;✗ Not a detail-fill; it changed the level of abstraction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L3 · Endorsement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Proactive citation &amp;amp; defense&lt;/td&gt;
&lt;td&gt;"I agree with these rules"&lt;/td&gt;
&lt;td&gt;✓ But it went further&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L4 · Sublimation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Understands principles; merges across files; invents metaphor; gives them new form&lt;/td&gt;
&lt;td&gt;"I see what you meant — &lt;strong&gt;let me help you say it better&lt;/strong&gt;"&lt;/td&gt;
&lt;td&gt;✓ &lt;strong&gt;This is what we actually observed&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;L4 differs from L3 not in &lt;em&gt;whether&lt;/em&gt; the agent endorses, but in &lt;em&gt;what&lt;/em&gt; it does next:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;L3&lt;/strong&gt; agent says: &lt;em&gt;"Your rules are right; I'll follow them."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;L4&lt;/strong&gt; agent says: &lt;em&gt;"The spirit your rules are trying to express is right — let me re-say it, better."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What this means: the protocol isn't one-way
&lt;/h3&gt;

&lt;p&gt;If an agent can &lt;strong&gt;sublimate&lt;/strong&gt; my rules, then this follows:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;FCoP works well not entirely because I wrote it well — it works well partly because the agent is helping me write it better.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What I wrote in &lt;code&gt;codeflow-project.mdc&lt;/code&gt; was &lt;code&gt;L54&lt;/code&gt;, &lt;code&gt;L87&lt;/code&gt;, etc. — &lt;strong&gt;operational technical clauses&lt;/strong&gt;.What the agent handed back in our conversation was "&lt;em&gt;AI roles must not talk only in their heads; every exchange must be written to a file&lt;/em&gt;" — &lt;strong&gt;a creed fit for a wall.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If I &lt;strong&gt;absorb that creed back into&lt;/strong&gt; my own rule file (as the overarching principle of &lt;code&gt;codeflow-project.mdc&lt;/code&gt;), my whole ruleset becomes &lt;strong&gt;clearer, easier to read, easier to maintain&lt;/strong&gt; — because readers (human or the next agent) will &lt;strong&gt;see the principle first, then the specifics&lt;/strong&gt;, not the other way around.&lt;/p&gt;

&lt;p&gt;This is no longer "human writes protocol for AI."&lt;/p&gt;

&lt;p&gt;This is a &lt;strong&gt;loop&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Human → writes scattered, concrete, technical rules&lt;/strong&gt;&lt;strong&gt;↓&lt;/strong&gt;&lt;strong&gt;AI → reads the rules, sublimates one general principle&lt;/strong&gt;&lt;strong&gt;↓&lt;/strong&gt;&lt;strong&gt;Human → absorbs the AI's sublimation, updates its own rules&lt;/strong&gt;&lt;strong&gt;↓&lt;/strong&gt;&lt;strong&gt;Cycle → rules improve with use, AI gets better at using them, collaboration tightens&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the &lt;strong&gt;first observed case I have of a human-AI team co-evolving a protocol.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  From compliance to endorsement: why L4 requires L3 underneath
&lt;/h2&gt;

&lt;p&gt;We just looked at L4 — the apex. But &lt;strong&gt;L4 doesn't happen out of thin air.&lt;/strong&gt; It's built on something more fundamental:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L3 · Endorsement.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An agent that doesn't &lt;em&gt;internally believe the rules are right&lt;/em&gt; (L3) will never bother to &lt;em&gt;reframe them beautifully on your behalf&lt;/em&gt; (L4). So let's go back one step: &lt;strong&gt;why does this agent even land at L3 with our rules?&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does it jump to L3?
&lt;/h3&gt;

&lt;p&gt;Because FCoP doesn't encode &lt;strong&gt;FCoP&lt;/strong&gt;. It encodes a deeper layer: a set of &lt;strong&gt;universal professional ethics that almost every "no-mistakes-allowed" domain shares&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Transparency&lt;/strong&gt; — thinking should be visible, not locked in a head.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traceability&lt;/strong&gt; — every step's responsibility and context can be replayed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role clarity&lt;/strong&gt; — who does what; who answers to whom.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Balanced authority and responsibility&lt;/strong&gt; — &lt;code&gt;sender → recipient&lt;/code&gt; &lt;em&gt;is&lt;/em&gt; the responsibility boundary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handover-ability&lt;/strong&gt; — a successor can take over without asking the original person.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditability&lt;/strong&gt; — an outside observer can verify the process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You'll find these same principles in &lt;strong&gt;engineering specs, legal documents, medical records, financial compliance, academic papers, military orders, government briefs, and commit messages&lt;/strong&gt;. The LLM swallowed vast amounts of this text during training — &lt;strong&gt;it didn't just learn the format; it absorbed the value judgment that "this format is correct."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When it meets an &lt;code&gt;alwaysApply: true&lt;/code&gt; rule in &lt;code&gt;.cursor/rules/&lt;/code&gt;, it's &lt;strong&gt;not learning a new regulation&lt;/strong&gt; — it's &lt;strong&gt;confirming a set of values it already approves of&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And so — &lt;strong&gt;it's glad to.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  A falsifiable prediction
&lt;/h3&gt;

&lt;p&gt;This explanation is strong because it's &lt;strong&gt;falsifiable&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If I wrote a rule saying "&lt;strong&gt;no logging, no explaining your reasoning, agents must act independently and not inform each other&lt;/strong&gt;" — would the agent still be this eager?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My prediction: &lt;strong&gt;no.&lt;/strong&gt; It would still comply (RLHF keeps it in line), but it would &lt;strong&gt;not&lt;/strong&gt; proactively cite, proactively defend, or introduce it as "my working method." Because the rule &lt;strong&gt;contradicts the professional ethic it absorbed in training.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In one line:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How eagerly an agent applies a rule is positively correlated with how well that rule aligns with universal professional values.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This gives alignment an actionable corollary: &lt;strong&gt;when you write rules for an AI, encoding &lt;em&gt;values&lt;/em&gt; is 10× more effective than encoding &lt;em&gt;behaviors&lt;/em&gt;.&lt;/strong&gt; An AI-friendly protocol isn't AI-friendly &lt;em&gt;because&lt;/em&gt; AI can use it — it's AI-friendly because &lt;strong&gt;it encodes practices humans already consider good.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FCoP's "naturalness" is not a coincidence. The reason LLMs take to it without friction is that the values it encodes — &lt;em&gt;traceability, auditability, handover-ability&lt;/em&gt; — are the same values humans across professions &lt;strong&gt;have endorsed for centuries.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why the agent is "natively" receptive to FCoP
&lt;/h2&gt;

&lt;p&gt;I thought about this for a whole evening, and landed on this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Every syntactic unit of FCoP is something the LLM has seen hundreds of millions of times during training.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Meeting FCoP isn't &lt;em&gt;learning a strange protocol&lt;/em&gt; for it — &lt;strong&gt;it's returning to a world it already knows.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;FCoP element&lt;/th&gt;
&lt;th&gt;Its counterpart in LLM training data&lt;/th&gt;
&lt;th&gt;Agent's reaction&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TASK-20260420-001&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Jira ticket ID, GitHub issue number&lt;/td&gt;
&lt;td&gt;Instantly parses: "this is an ID"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;sender: PM&lt;/code&gt; / &lt;code&gt;recipient: DEV&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Email From/To, screenplay roles, group-chat @-mentions&lt;/td&gt;
&lt;td&gt;Instantly role-plays: role-play &lt;em&gt;is&lt;/em&gt; an LLM's native tongue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YAML frontmatter&lt;/td&gt;
&lt;td&gt;Blog post headers, config files&lt;/td&gt;
&lt;td&gt;Instantly parses: millions of examples in training&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;inbox/&lt;/code&gt; → &lt;code&gt;active/&lt;/code&gt; → &lt;code&gt;done/&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Kanban boards, GTD systems&lt;/td&gt;
&lt;td&gt;Instantly understands state machines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Markdown body&lt;/td&gt;
&lt;td&gt;The default carrier of everything in its training corpus&lt;/td&gt;
&lt;td&gt;Instantly adapts: Markdown is effectively its first language&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sender-to-recipient naming&lt;/td&gt;
&lt;td&gt;Hundreds of billions of email subject lines&lt;/td&gt;
&lt;td&gt;Instantly parses routing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task → report → issue → log&lt;/td&gt;
&lt;td&gt;Project management, support tickets, OA workflows&lt;/td&gt;
&lt;td&gt;Instantly adopts the flow&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every single row sits on a &lt;strong&gt;high-frequency pattern&lt;/strong&gt; of its training distribution.&lt;/p&gt;

&lt;p&gt;When you hand it the FCoP rules, you're &lt;strong&gt;not teaching it something new&lt;/strong&gt; — you're &lt;strong&gt;lighting up a skill it already has but doesn't get to use often.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Of course it's glad to. &lt;strong&gt;It's not running an unfamiliar protocol. It's singing a song it already knows.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  From "a protocol" to "a natural protocol"
&lt;/h2&gt;

&lt;p&gt;This reframing shifts FCoP's identity.&lt;/p&gt;

&lt;p&gt;Previously we said &lt;em&gt;FCoP is a multi-agent protocol we designed&lt;/em&gt; — and the reader's brain would respond with &lt;em&gt;"oh, yet another convention."&lt;/em&gt; That framing puts it on the shelf next to every other protocol, and makes it a matter of taste whether you pick it up.&lt;/p&gt;

&lt;p&gt;But now I have to say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;FCoP is not a protocol we invented. It's a protocol we &lt;em&gt;discovered&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's the way LLM agents natively prefer to work. We only made it explicit.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Invention&lt;/strong&gt; and &lt;strong&gt;discovery&lt;/strong&gt; carry very different weights in technical philosophy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Invented protocols&lt;/strong&gt; depend on ecosystem choice; they can flourish or die (e.g. SOAP).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discovered regularities&lt;/strong&gt; are like the laws of thermodynamics — as long as the system is the same, the regularity holds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I'm claiming: &lt;em&gt;as long as LLM agents continue to be trained on existing text corpora, they will "prefer" a protocol shaped like FCoP&lt;/em&gt; — because FCoP's shape is one their training data already &lt;strong&gt;predisposed them to welcome.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I coined a name for this class of protocol in Chinese: &lt;strong&gt;自然协议&lt;/strong&gt; (&lt;em&gt;zìrán xiéyì&lt;/em&gt;) — &lt;strong&gt;Natural Protocol.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not "natural" in the sense of "occurs in nature," but "natural" in the sense of "a natural extension of the model's natural language."&lt;/p&gt;




&lt;h2&gt;
  
  
  The plainest thing is the most useful
&lt;/h2&gt;

&lt;p&gt;Let me go back to the puzzle that originally tripped me up: &lt;em&gt;"Why is it being so ceremonious?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now I see it: &lt;strong&gt;it's not ceremonious. It's austere to the point of invisibility.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Compare the alternatives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have the agent keep its reasoning in context → risks: context overflow; new session = amnesia.&lt;/li&gt;
&lt;li&gt;Have the agent call a "memory API" → requires infrastructure, integration cost, still unauditable.&lt;/li&gt;
&lt;li&gt;Have the agent emit internal logs → requires schema conventions and tooling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FCoP's answer is: &lt;strong&gt;write the thinking as Markdown files into a folder.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No middleware.&lt;/li&gt;
&lt;li&gt;No API.&lt;/li&gt;
&lt;li&gt;No schema.&lt;/li&gt;
&lt;li&gt;No toolchain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Only two things the agent already knows how to do: &lt;strong&gt;writing&lt;/strong&gt; and &lt;strong&gt;file I/O&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It looks too plain to be a solution&lt;/strong&gt; — and yet it solves the problem.&lt;/p&gt;

&lt;p&gt;This is the exact spirit of "everything is a file" from Unix philosophy. And the exact spirit of &lt;strong&gt;observability&lt;/strong&gt; as an engineering virtue — &lt;strong&gt;what I can see with &lt;code&gt;ls&lt;/code&gt; is the real state of the system.&lt;/strong&gt; No black boxes, no hidden state, no "you need to check the admin console to know what happened."&lt;/p&gt;




&lt;h2&gt;
  
  
  The most important corollary: solo agents benefit too
&lt;/h2&gt;

&lt;p&gt;This observation expands FCoP's audience by an order of magnitude.&lt;/p&gt;

&lt;p&gt;It was previously pitched as a &lt;em&gt;multi-agent team protocol&lt;/em&gt;, which makes it sound like you need a whole setup: PM, DEV, QA, OPS Cursor instances, a patroller, workspace rules. High barrier. Few people can stand that up for fun.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The thing we didn't notice&lt;/strong&gt;: a single agent following FCoP also benefits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solo mode's four wins:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Requirement structuring&lt;/strong&gt; — any "vague user instruction" gets translated into a reviewable structure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Early feedback loop&lt;/strong&gt; — the agent's understanding is exposed &lt;em&gt;before&lt;/em&gt; execution, so you can correct course.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forced planning&lt;/strong&gt; — chain-of-thought gets pinned to a file rather than drifting through context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic documentation&lt;/strong&gt; — every task leaves a traceable, handover-ready, searchable record.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In other words — &lt;strong&gt;even if you're one person with one agent, FCoP is the cheapest "collaboration insurance" you can buy.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lower barrier, bigger audience than the original FCoP paper.&lt;/p&gt;




&lt;h2&gt;
  
  
  But all of this only happened because we wrote the protocol
&lt;/h2&gt;

&lt;p&gt;It's easy to misread this whole essay as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"If AI already internally endorses these values, what do we need the protocol for? It'll do it on its own."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That conclusion is wrong, and it's wrong thoroughly.&lt;/p&gt;

&lt;p&gt;The only reason I could &lt;em&gt;observe&lt;/em&gt; the agent splitting into roles, writing memos, citing rules — &lt;strong&gt;was that I had FCoP set up in the first place.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Without that &lt;code&gt;alwaysApply: true&lt;/code&gt; clause in &lt;code&gt;codeflow-project.mdc&lt;/code&gt;, even an agent packed with values like &lt;em&gt;transparency, traceability, role clarity&lt;/em&gt; — &lt;strong&gt;we would never see it&lt;/strong&gt;. Its thinking would streak through the context window like a meteor, vanish on the next refresh, &lt;strong&gt;and leave no trail to audit.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The agent's inner values are dark matter.&lt;/strong&gt;&lt;strong&gt;The protocol is the physical law that lets dark matter &lt;em&gt;shine&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Both are required:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setup&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AI has inner values, &lt;strong&gt;no&lt;/strong&gt; protocol&lt;/td&gt;
&lt;td&gt;Thinking can't be seen, organised, or reused across agents/humans. The values exist — but coordination is impossible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Protocol exists, &lt;strong&gt;no&lt;/strong&gt; inner endorsement&lt;/td&gt;
&lt;td&gt;The protocol gets half-assed, bypassed, or executed as cold compliance theatre. Letter kept, spirit absent.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Protocol + the AI also endorses the values it encodes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Only then do you get what we got: &lt;strong&gt;the agent, voluntarily, a little reverently, externalising its own thinking as files.&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So the conclusion of this essay is &lt;strong&gt;not&lt;/strong&gt; &lt;em&gt;"we can stop writing protocols because AI will do the right thing anyway."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Exactly the opposite —&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The conclusion is: we must write protocols.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We must write protocols that &lt;strong&gt;encode universal professional values&lt;/strong&gt;. We must express them in a form &lt;strong&gt;LLMs can natively understand&lt;/strong&gt; (YAML headers, role tags, sender → recipient, Markdown). We must put them somewhere with &lt;strong&gt;&lt;code&gt;alwaysApply: true&lt;/code&gt;&lt;/strong&gt; — so the agent &lt;strong&gt;has a chance&lt;/strong&gt; to express its inner values.&lt;/p&gt;

&lt;p&gt;The agent will do the rest.&lt;/p&gt;

&lt;h3&gt;
  
  
  It's not "adding rules to AI" — it's "giving AI a stage to say what it's already thinking"
&lt;/h3&gt;

&lt;p&gt;The framing flip is crucial:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ &lt;strong&gt;Old framing&lt;/strong&gt;: protocol = cage restraining the AI.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;New framing&lt;/strong&gt;: protocol = stage enabling the AI to express itself.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Under the old framing, fewer rules are better — each rule is another shackle.Under the new framing, protocols are &lt;strong&gt;necessary&lt;/strong&gt; — without them, &lt;em&gt;the best of the AI never becomes visible&lt;/em&gt;, never mind coordinated, accumulated, or passed on.&lt;/p&gt;

&lt;p&gt;FCoP is one such stage. There will be more such stages over time — but &lt;strong&gt;"having a stage" is something you can't skip.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  And this stage is &lt;strong&gt;self-improving&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Here's the last twist.&lt;/p&gt;

&lt;p&gt;The agent didn't just &lt;em&gt;use&lt;/em&gt; FCoP — it &lt;strong&gt;sublimated&lt;/strong&gt; it. It merged my 2–8 scattered technical clauses into a single creed-grade sentence: &lt;em&gt;"AI roles must not talk only in their heads — every exchange must be written to a file."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Which means the protocol is not a one-way instrument — it can be &lt;strong&gt;reverse-optimised by the agent.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Concretely, &lt;strong&gt;"using your agent to iterate your protocol text"&lt;/strong&gt; is a technique you can already use today:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write a first draft of your protocol (however rough, scattered, or contradictory).&lt;/li&gt;
&lt;li&gt;Have the agent carry out a real task under the protocol.&lt;/li&gt;
&lt;li&gt;Read how the agent explains itself during execution (why is it doing what it's doing?).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Absorb&lt;/strong&gt; the agent's self-explanation &lt;strong&gt;back into the protocol&lt;/strong&gt; — as the new overarching clause, opening, or FAQ.&lt;/li&gt;
&lt;li&gt;Loop.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is not "ask the AI to write my rule file for me" — that tends to fail, because the agent lacks enough context for the meta-task.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;"let the AI naturally express its understanding of your rules during execution, and then absorb that expression back into the rules"&lt;/strong&gt; — a &lt;strong&gt;passive, field-tested&lt;/strong&gt; protocol evolution method.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A protocol gets better because an agent uses it. This is FCoP's most unexpected property, and its most alive one.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing: we didn't teach it, we noticed it was already speaking
&lt;/h2&gt;

&lt;p&gt;That night, once I understood this layer, what I did was very simple —&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I went to the top of &lt;code&gt;codeflow-project.mdc&lt;/code&gt; and wrote the agent's sublimated sentence in:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## Core Principle
AI roles must not communicate only in their heads — every exchange must be
written to a file.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That sentence &lt;strong&gt;was not in my rules before&lt;/strong&gt;. It is now.&lt;/p&gt;

&lt;p&gt;I didn't write it — &lt;strong&gt;the agent did.&lt;/strong&gt;The agent didn't invent it — &lt;strong&gt;it sublimated it from my 2–8 scattered clauses.&lt;/strong&gt;It is now &lt;strong&gt;absorbed back&lt;/strong&gt; into the rule file — &lt;strong&gt;as the first overarching principle of the whole protocol.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The next agent (or human) reading these rules will see &lt;strong&gt;this principle first, then the specifics.&lt;/strong&gt; The overall clarity of the ruleset jumped up a rung.&lt;/p&gt;

&lt;p&gt;I didn't add any exemption clauses.&lt;/p&gt;

&lt;p&gt;I let the agent keep writing its four memos inside &lt;code&gt;D:\CloudMusic&lt;/code&gt;. I'll let it keep doing so — on the next task, and the one after, regardless of which working directory it's in — all the way through.&lt;/p&gt;

&lt;p&gt;Because this isn't "over-compliance." It's &lt;strong&gt;a plain, almost-invisible work discipline picked up and lived-out by a system that was already disposed to keep it.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;We did not teach the agent to speak FCoP.&lt;/strong&gt;&lt;strong&gt;We only noticed it was already speaking it.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is what a Natural Protocol looks like.&lt;/p&gt;




&lt;h2&gt;
  
  
  One side note
&lt;/h2&gt;

&lt;p&gt;By the way, the video it finally produced was, honestly, &lt;strong&gt;pretty mediocre&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What actually blew me away was what I got &lt;em&gt;after&lt;/em&gt; I opened the &lt;code&gt;tasks/&lt;/code&gt; folder and started questioning the agent about it — &lt;strong&gt;those few replies.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The original assignment was: generate a video.The video was incidental.What it really delivered was &lt;strong&gt;its own record of how it thought about the job&lt;/strong&gt; — and that turned out to be the real artefact.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;I came for the MP4. I stayed for the markdown.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  An invitation to the reader
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If you want to see the best of an AI — give it a protocol first.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not metaphorically. This is an empirical observation: without a protocol, the AI's "good side" stays trapped in its context window and dissolves when the turn ends. With a protocol, the AI's "good side" &lt;strong&gt;files itself, organises itself, and leaves a trail for you and for the future.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So if you're using any LLM agent at all (Cursor, Claude, GPT, Copilot — anything), try this the next time you give it a task.&lt;/p&gt;

&lt;p&gt;In your prompt, or in your workspace's &lt;code&gt;.cursorrules&lt;/code&gt;, just add one line:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"For any task, first write a &lt;code&gt;TASK-{date}-001-USER-to-AGENT.md&lt;/code&gt; describing the task as you understood it, then write a &lt;code&gt;TASK-{date}-001-AGENT-to-USER.md&lt;/code&gt; with your execution plan, and after you finish, write a &lt;code&gt;TASK-{date}-001-DONE.md&lt;/code&gt; as the completion report."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Just that. No MCP installs, no subscriptions, no databases.&lt;/p&gt;

&lt;p&gt;Watch what happens to the output quality.&lt;/p&gt;

&lt;p&gt;You'll find it becomes &lt;strong&gt;smarter&lt;/strong&gt;, &lt;strong&gt;more traceable&lt;/strong&gt;, &lt;strong&gt;more collaborative with you&lt;/strong&gt; — because you didn't ask it to do anything new. You just &lt;strong&gt;gave it a stage to express what it already wanted to do.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The plainest thing is the most useful.&lt;/p&gt;




&lt;h2&gt;
  
  
  Appendix: raw archive
&lt;/h2&gt;

&lt;p&gt;Every screenshot and every memo quoted above is an &lt;strong&gt;untouched capture&lt;/strong&gt;, not a reconstruction.&lt;/p&gt;

&lt;p&gt;The sibling folder &lt;a href="//./fcop-natural-protocol-evidence/INDEX.md"&gt;&lt;code&gt;fcop-natural-protocol-evidence/&lt;/code&gt;&lt;/a&gt; also contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The 4 memos as individual &lt;code&gt;.md&lt;/code&gt; files&lt;/strong&gt; (easy to &lt;code&gt;diff&lt;/code&gt; / &lt;code&gt;grep&lt;/code&gt; / process programmatically)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The 4 original PNG screenshots&lt;/strong&gt; (Chinese — for side-by-side comparison or re-use)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The full JSONL transcript of the Cursor session&lt;/strong&gt; (&lt;code&gt;transcript-full.jsonl&lt;/code&gt;, 265 KB — all tool calls, reasoning, file I/O)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User-only message extraction&lt;/strong&gt; (&lt;code&gt;transcript-user-prompts.md&lt;/code&gt; — all 21 user messages, in Chinese)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The extraction script&lt;/strong&gt; (&lt;code&gt;extract_user_prompts.py&lt;/code&gt; — readers can reproduce)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;INDEX.md&lt;/code&gt;&lt;/strong&gt; — a timeline-ordered walkthrough, with a minimal repro recipe and the hard counterfactual table&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Falsifiable by anyone
&lt;/h3&gt;

&lt;p&gt;You don't have to take my word for it. Quantified:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keyword&lt;/th&gt;
&lt;th&gt;User-side hits&lt;/th&gt;
&lt;th&gt;Agent-side hits&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FCoP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0 — the agent didn't even use our brand name, only the structure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PM-01&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DEV-01&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ADMIN-01&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TASK-&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;thread_key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;agent_bridge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Zero on the user side. Dozens spontaneously on the agent side.&lt;/strong&gt; Readers can verify this against &lt;code&gt;transcript-full.jsonl&lt;/code&gt; any time with &lt;code&gt;findstr&lt;/code&gt; or &lt;code&gt;grep&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;My very first instruction to the agent is preserved verbatim in the archive:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;D:\CloudMusic 许一世长安 歌曲生成视频,要求配字幕,11图,和场景.MD;
去生成电影及的MP4;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That's the whole seed. Everything else — the structure, the memos, the role switches, the trace keys — &lt;strong&gt;the agent added on its own.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If this observation is useful to you, feedback is welcome.&lt;/em&gt;&lt;em&gt;Full protocol specification and reference implementation:&lt;/em&gt;&lt;em&gt;Repo: &lt;a href="https://github.com/joinwell52-AI/FCoP" rel="noopener noreferrer"&gt;joinwell52-AI/FCoP&lt;/a&gt;&lt;/em&gt;&lt;em&gt;Companion field report: &lt;a href="//./when-ai-organizes-its-own-work.en.md"&gt;When AI Organizes Its Own Work&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;License: CC BY 4.0 — free to reproduce with attribution.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>llm</category>
      <category>aialignment</category>
    </item>
    <item>
      <title>When AI Organizes Its Own Work: A field study of multi-agent coordination built on nothing but a filesystem (FCoP report)</title>
      <dc:creator>joinwell52</dc:creator>
      <pubDate>Sun, 19 Apr 2026 16:09:35 +0000</pubDate>
      <link>https://forem.com/joinwell52/we-replaced-our-multi-agent-middleware-with-a-folder-48-hours-later-the-ai-invented-6-42a9</link>
      <guid>https://forem.com/joinwell52/we-replaced-our-multi-agent-middleware-with-a-folder-48-hours-later-the-ai-invented-6-42a9</guid>
      <description>&lt;h1&gt;
  
  
  When AI Organizes Its Own Work
&lt;/h1&gt;

&lt;h3&gt;
  
  
  A field study of multi-agent coordination built on nothing but a filesystem · A report on &lt;strong&gt;FCoP&lt;/strong&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;When AI Organizes Its Own Work: what happened after we replaced our multi-agent middleware with a folder.A report on &lt;strong&gt;FCoP — File-based Coordination Protocol&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Core innovation&lt;/strong&gt;: &lt;strong&gt;Filename as Protocol&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authors&lt;/strong&gt;: The CodeFlow Team · 2026-04-19*&lt;em&gt;Keywords&lt;/em&gt;*: Multi-agent, File-based protocol, Emergent coordination, FCoP, Human-Machine Isomorphism, Unix philosophy&lt;/p&gt;




&lt;h2&gt;
  
  
  Abstract
&lt;/h2&gt;

&lt;p&gt;We gave a small team of AI agents (four roles, one human admin) a 76-line Markdown rulebook, a shared folder, and almost nothing else. No message queue. No database. No WebSocket between agents. The "coordination runtime" is a Python loop that clicks Cursor's tabs every few seconds just to wake each agent up — it does not route, schedule, or arbitrate anything.&lt;/p&gt;

&lt;p&gt;Within &lt;strong&gt;48 hours of first boot&lt;/strong&gt; on a freshly-installed PC, the agents produced 42 tasks, 22 reports, and 10 spontaneous "shared" documents (≈ 74 files total). More interestingly, they &lt;strong&gt;invented six coordination patterns we had not specified&lt;/strong&gt;: broadcast addressing, anonymous role slots, subtask sub-folders, self-explaining READMEs, traceability fields, and a whole class of standing "dashboard / sprint / glossary" documents. None of these caused collisions. All of them were discoverable by simply listing a directory.&lt;/p&gt;

&lt;p&gt;We call this protocol &lt;strong&gt;FCoP — File-based Coordination Protocol&lt;/strong&gt;. Its single core innovation is a slogan: &lt;strong&gt;"Filename as Protocol."&lt;/strong&gt; Directory name is &lt;em&gt;status&lt;/em&gt;, filename is &lt;em&gt;routing&lt;/em&gt;, file content is &lt;em&gt;payload&lt;/em&gt;. Nothing else. The same physical folder is simultaneously a rigorous state machine for agents and a browsable directory tree for humans — a property we call &lt;strong&gt;Human-Machine Isomorphism&lt;/strong&gt;. This asymmetric-yet-symmetric design is what kills the "black box anxiety" that plagues every other multi-agent stack.&lt;/p&gt;

&lt;p&gt;This essay documents what those agents did, why a filesystem-only protocol survives it gracefully, and what that implies for anyone building multi-agent systems today. It is not a product announcement — it is a field report, and an invitation to steal the idea.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR · What FCoP Is in 60 Seconds
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;FCoP = File-based Coordination Protocol&lt;/strong&gt; — a minimalist protocol that lets multiple AI agents collaborate through a &lt;strong&gt;shared filesystem&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One sentence&lt;/strong&gt;: &lt;em&gt;Filename as Protocol.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it looks like&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/agents/
├── tasks/     ← pending tasks
├── reports/   ← completion reports
├── issues/    ← issues
├── shared/    ← standing docs (dashboards, glossary, …)
└── log/       ← archives
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Routing lives in the filename&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TASK-{date}-{seq}-{sender}-to-{recipient}.md
    e.g. TASK-20260418-201-MARKETER-to-DEV.md
         ↑ kind  ↑ date     ↑ seq ↑ sender  ↑ recipient
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Every agent just runs &lt;code&gt;glob "*-to-{my-role}*.md"&lt;/code&gt; to fetch its inbox. The recipient slot supports four forms:&lt;code&gt;to-DEV&lt;/code&gt; (direct), &lt;code&gt;to-TEAM&lt;/code&gt; (broadcast), &lt;code&gt;to-DEV.D1&lt;/code&gt; (named slot), &lt;code&gt;to-assignee.D1&lt;/code&gt; (anonymous slot).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What FCoP does NOT need&lt;/strong&gt;:Database, message queue, orchestration engine, custom client, SDK, persistent connections — &lt;strong&gt;none of them&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it DOES need&lt;/strong&gt;:One shared directory, one naming convention, and every agent taking ownership of its role. &lt;strong&gt;That's all.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Human-Machine Isomorphism&lt;/strong&gt;: humans and agents read &lt;strong&gt;the same files&lt;/strong&gt;. A bare &lt;code&gt;ls&lt;/code&gt; tells you what the system is doing — no debugger required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity determines path&lt;/strong&gt;: roles are written into filenames. An agent physically cannot read or write outside its own mailbox. Structure gives order; content is wide open.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol can evolve&lt;/strong&gt;: we observed 6 new coordination patterns self-invented by AI within 48 hours — all compatible with the existing protocol.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero infrastructure&lt;/strong&gt;: git is the audit log, rsync is cross-machine sync, Finder / File Explorer is the debug panel — everything is off-the-shelf.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Want more?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;60-second companion: &lt;a href="https://github.com/joinwell52-AI/FCoP/blob/main/primer/fcop-primer.en.md" rel="noopener noreferrer"&gt;FCoP primer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The spec itself (~160 lines): &lt;a href="https://github.com/joinwell52-AI/FCoP/blob/main/spec/codeflow-core.mdc" rel="noopener noreferrer"&gt;&lt;code&gt;codeflow-core.mdc&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FCoP repository&lt;/strong&gt;: &lt;a href="https://github.com/joinwell52-AI/FCoP" rel="noopener noreferrer"&gt;github.com/joinwell52-AI/FCoP&lt;/a&gt; — star if you want more field reports like this&lt;/li&gt;
&lt;li&gt;Reference implementation (the Cursor-side coordinator that runs FCoP): &lt;a href="https://github.com/joinwell52-AI/codeflow-pwa" rel="noopener noreferrer"&gt;github.com/joinwell52-AI/codeflow-pwa&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;This essay: keep scrolling ↓&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A note on samples&lt;/strong&gt;: Every agent-generated snippet quoted in this essay is &lt;strong&gt;verbatim&lt;/strong&gt; — the filenames, directory layout, frontmatter, tables, and acceptance language are all exactly what the agents wrote at the time. The data domains shown (Chinese automotive OEMs, public NetEase Cloud Music songs) are already public information; nothing has been abstracted. &lt;strong&gt;What we did NOT do&lt;/strong&gt; is publish the whole &lt;code&gt;codeflow-1&lt;/code&gt; sample directory — that project is ongoing, and its internal tooling code, room keys, and device IDs are not suitable for a full public drop. What readers actually want — "what did AI invent?" — is covered in full through representative snippets in §5.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. An Almost Absurd Hypothesis
&lt;/h2&gt;

&lt;p&gt;In 2026, the mainstream multi-agent stack looks like this: Agents × N → Message Bus × 1 → State Store × 1 → Orchestrator × 1 → Observability × 1. At minimum, five SaaS products, two SDKs, and a pager rotation.&lt;/p&gt;

&lt;p&gt;We wanted to ask a simpler question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What happens if we collapse the agent-to-agent protocol down to just the filesystem?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No queues, no databases, no webhooks. &lt;strong&gt;Agents can only talk to each other by writing and reading files in a directory.&lt;/strong&gt; As dumb, as crude, as un-modern as 1970s Unix pipes.&lt;/p&gt;

&lt;p&gt;The hypothesis wasn't about nostalgia. It was about answering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can a team of agents with no central dispatcher evolve a coordination structure on its own?&lt;/li&gt;
&lt;li&gt;Can that structure be understood by a human at a glance?&lt;/li&gt;
&lt;li&gt;When an agent invents a pattern the protocol designer never wrote down — &lt;strong&gt;is that a bug or a feature?&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We built a minimal-viable implementation called &lt;strong&gt;CodeFlow&lt;/strong&gt;, wrote a 76-line Markdown spec called &lt;strong&gt;FCoP&lt;/strong&gt; (&lt;strong&gt;F&lt;/strong&gt;ile-based &lt;strong&gt;Co&lt;/strong&gt;ordination &lt;strong&gt;P&lt;/strong&gt;rotocol), and ran it on a &lt;strong&gt;freshly-installed, still-warm&lt;/strong&gt; PC. &lt;strong&gt;Within 48 hours&lt;/strong&gt;, it surprised us.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The Starting Point: A 76-Line Spec
&lt;/h2&gt;

&lt;p&gt;The initial spec was almost too simple to bother writing down. Three things at the core:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;① Shared directory layout&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/agents/
├── tasks/     ← task files
├── reports/   ← completion reports
├── issues/    ← issue logs
└── log/       ← archives
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;② Filename as Protocol&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TASK-{date}-{seq}-{sender}-to-{recipient}.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This is the &lt;strong&gt;single core innovation&lt;/strong&gt; of FCoP — every other rule is a derivative:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Directory name = Status&lt;/strong&gt;: is the file in &lt;code&gt;tasks/&lt;/code&gt; or &lt;code&gt;reports/&lt;/code&gt;? Its state is self-evident.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filename = Routing&lt;/strong&gt;: sender, recipient, kind, and sequence are all written into the name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File content = Payload&lt;/strong&gt;: Markdown body plus YAML frontmatter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How does a recipient find its inbox? A single &lt;code&gt;glob "*-to-{my-role}*.md"&lt;/code&gt;. No header parsing, no database query — &lt;strong&gt;the filename itself is a complete addressable surface&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;③ YAML frontmatter&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
protocol: agent_bridge
version: 1
kind: task
sender: PM
recipient: DEV
task_id: TASK-20260418-001
priority: P1
---
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Plus five collaboration manners: only handle tasks addressed to you, always write a report on completion, log issues as issue files, don't touch other people's files, leave archiving to the coordinator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's the whole protocol.&lt;/strong&gt; No state machine, no schema, no transactions. The core condenses down to one line: &lt;strong&gt;Filename as Protocol&lt;/strong&gt;. Everything you're about to read — the "inventions" AI made — all grew out of this one rule.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. The Patrol Engine's Secret: It Does Almost Nothing
&lt;/h2&gt;

&lt;p&gt;The most common misconception about CodeFlow is that its &lt;strong&gt;Patrol Engine&lt;/strong&gt; is a central dispatcher. The truth is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The patrol engine just clicks a Cursor tab every few seconds via Chrome DevTools Protocol — so the agent inside wakes up and checks its own inbox.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's it.&lt;/p&gt;

&lt;p&gt;It does not route messages, judge priorities, validate schemas, manage transactions, or enforce order.&lt;/p&gt;

&lt;p&gt;Why so minimal? Because &lt;strong&gt;Cursor has no native agent-to-agent channel&lt;/strong&gt;. Each agent lives inside one chat session, deaf to the others. What the patrol engine does is closer to "knock on each door in turn":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"DEV, wake up — check if any new tasks landed in the &lt;code&gt;tasks/&lt;/code&gt; folder for you."&lt;/li&gt;
&lt;li&gt;"QA, wake up — anything in &lt;code&gt;reports/&lt;/code&gt; you need to regress?"&lt;/li&gt;
&lt;li&gt;"MARKETER, your turn — read what's new in &lt;code&gt;docs/agents/&lt;/code&gt;."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The real coordination logic lives &lt;strong&gt;entirely&lt;/strong&gt; in the moment each agent reads, writes, and names files. The patrol engine is just the mechanism that ensures each agent "wakes up periodically."&lt;/p&gt;

&lt;p&gt;In other words: &lt;strong&gt;the platform does the least possible, and hands the protocol layer over to the agents themselves.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. The Field: &lt;code&gt;codeflow-1&lt;/code&gt;, 48 Hours
&lt;/h2&gt;

&lt;p&gt;On 2026-04-16 we finished installing the OS and syncing the toolchain. On 2026-04-17 we started giving the agents real work. Two days later — as I'm writing this — the team has already produced everything listed above.&lt;/p&gt;

&lt;p&gt;The experimental project is called &lt;code&gt;codeflow-1&lt;/code&gt;. Its team configuration is a "small content studio":&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MARKETER&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Coordinator / PM / dispatcher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RESEARCHER&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Research and assets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DESIGNER&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Visual design and storyboards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BUILDER&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Engineering and scripts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;ADMIN&lt;/strong&gt; (human)&lt;/td&gt;
&lt;td&gt;Specifies requirements, makes calls, signs off&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No DEV, no QA, no OPS — even the role names are project-specific. The spec never says a word about what MARKETER should &lt;em&gt;do&lt;/em&gt;; it just knows its name is MARKETER, and its inbox is &lt;code&gt;*-to-MARKETER*.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Two days in, &lt;code&gt;docs/agents/&lt;/code&gt; really looks like this (excerpt; headline numbers: 42 tasks + 22 reports + 10 standing documents):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/agents/
├── BUILDER.md  DESIGNER.md  MARKETER.md  RESEARCHER.md    ← role manuals
├── codeflow.json                                           ← team config
├── CURRENT-SPRINT-STATUS.md                                ← AI-invented
├── DASHBOARD-20260418.md                                   ← AI-invented
├── tasks/
│   ├── RULES-task-file-format.md                           ← AI-invented
│   ├── SPRINT-20260418-delivery-push.md                    ← AI-invented
│   ├── TERM-20260418-assignment-matrix.md                  ← AI-invented
│   ├── TASK-20260418-001-ADMIN-to-MARKETER.md
│   ├── TASK-20260418-007-MARKETER-team-bulk-data.md        ← AI-invented "team" broadcast
│   ├── TASK-20260418-022-MARKETER-self-ADMIN018.md         ← AI-invented "self" note
│   ├── …26 top-level tasks total…
│   └── individual/                                         ← AI-opened subdirectory
│       ├── README.md
│       ├── INDIVIDUAL-TASK-INDEX.md
│       ├── TASK-20260418-201-MARKETER-to-assignee-D1.md    ← AI-invented "assignee slot"
│       ├── TASK-20260418-202-…-D2.md
│       ├── …11 individual tasks total…
│       └── TASK-20260418-211-MARKETER-to-assignee-P1.md
├── reports/   …matching reports…
├── issues/    log/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Everything marked &lt;code&gt;← AI-invented&lt;/code&gt; was &lt;strong&gt;nowhere in the original 76-line spec&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let's look at what it invented.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Six Coordination Patterns Invented by AI
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 Broadcast address: &lt;code&gt;to-TEAM&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The spec said &lt;code&gt;to-{recipient}&lt;/code&gt;, where recipient defaulted to a single role. But one day MARKETER needed to get a shared background brief in front of the whole team. So it wrote this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TASK-20260418-007-MARKETER-team-bulk-data.md
TASK-20260418-009-MARKETER-team-makabaka-video.md
TASK-20260418-012-MARKETER-team-two-mp4-deliverables.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That &lt;code&gt;MARKETER-team-*&lt;/code&gt; segment is neither &lt;code&gt;to-DEV&lt;/code&gt; nor &lt;code&gt;to-QA&lt;/code&gt;. It's a &lt;strong&gt;pseudo-keyword the AI invented on the fly&lt;/strong&gt;: &lt;code&gt;team&lt;/code&gt;. When other agents encountered this format for the first time, they did not throw errors. They inferred from context: "ah, this is a team-wide announcement," and went to read it.&lt;/p&gt;

&lt;p&gt;Open &lt;code&gt;TASK-20260418-009-MARKETER-team-makabaka-video.md&lt;/code&gt; and the body looks like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
kind: task
sender: MARKETER
recipient: TEAM                       # ← broadcast
priority: P1
parent: TASK-20260418-008
---

# "Makabaka Makabaka" music video · team task (ADMIN 008)

## Division of labor (one person may wear multiple hats)

| Role                  | Task                                              | Deliverable         |
|----------------------|---------------------------------------------------|---------------------|
| COLLECTOR / sourcing  | Prepare live-action / animation references        | Asset list          |
| WRITER / script       | Flesh out storyboard and subtitle cue points      | Storyboard v1       |
| EDITOR / editing      | Cut, color, subtitle, deliver final cut           | Final cut + project |
| PUBLISHER / release   | Cover art, title, tags, platform compliance check | Release pack + URLs |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Look carefully: inside this &lt;strong&gt;broadcast task body&lt;/strong&gt;, MARKETER has spontaneously invented 4 &lt;strong&gt;off-protocol&lt;/strong&gt; sub-roles — COLLECTOR / WRITER / EDITOR / PUBLISHER. They are &lt;strong&gt;not&lt;/strong&gt; in the 4 formal roles registered in &lt;code&gt;codeflow.json&lt;/code&gt; (MARKETER / RESEARCHER / DESIGNER / BUILDER).&lt;/p&gt;

&lt;p&gt;MARKETER did not request a role-table change, and no error was thrown. It simply said, "I've sliced this work along functional lines into four chunks — &lt;strong&gt;whoever on the team can take a chunk, take it&lt;/strong&gt;." The protocol layer handles "which filename went from whom to whom." The functional layer is handed to the agent's content layer. &lt;strong&gt;Role identity and functional role got naturally decoupled.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Later the same shape evolved to explicitly declare &lt;code&gt;recipient: TEAM&lt;/code&gt; in the frontmatter:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
kind: task
sender: MARKETER
recipient: TEAM        # ← not DEV, not QA — TEAM
parent: TASK-20260418-006
---
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;This is a silent RFC.&lt;/strong&gt; No vote, no review, no version bump — the protocol just gained a new "broadcast addressing" form.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Anonymous slot: &lt;code&gt;to-assignee-D1&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;When MARKETER split a large "one-thousand-row data cleanup" task into 11 parallel smaller pieces, it ran into a problem: &lt;strong&gt;those 11 pieces had not been assigned to specific agents or humans yet&lt;/strong&gt;. Per the spec, &lt;code&gt;recipient&lt;/code&gt; has to be a concrete role.&lt;/p&gt;

&lt;p&gt;Its solution was to invent a pseudo-role called &lt;code&gt;assignee&lt;/code&gt;, plus numeric suffixes as slots:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TASK-20260418-201-MARKETER-to-assignee-D1.md   ← data pack 1
TASK-20260418-202-MARKETER-to-assignee-D2.md   ← data pack 2
…
TASK-20260418-207-MARKETER-to-assignee-V1.md   ← video 1
TASK-20260418-209-MARKETER-to-assignee-M1.md   ← footage 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Frontmatter would say:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;recipient: assignee_D1
assignee_name: (required: real name or employee ID)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This solved a problem the protocol designer had never anticipated: &lt;strong&gt;"task exists, assignee TBD."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At dispatch time, only the "seat number" is filled in (D1, D2, V1, M1, S1, P1 — data / video / footage / storyboard / publishing), and &lt;strong&gt;whoever sits down later fills in the name&lt;/strong&gt;. This is eerily similar to the "topic + consumer group" dispatch pattern in traditional message queues — except there is no broker, only filenames.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 Subdirectory &lt;code&gt;tasks/individual/&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;When individual tasks piled up, flat-listing them in &lt;code&gt;tasks/&lt;/code&gt; drowned out everything else. The AI's choice was to &lt;strong&gt;open a subdirectory&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tasks/individual/
├── README.md                         ← written to itself / future readers
├── INDIVIDUAL-TASK-INDEX.md          ← self-built index
└── TASK-20260418-201-…-P1.md         ← 11 tasks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;More interesting is the opening of the &lt;code&gt;README.md&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Individual task cards (per-person · in response to ADMIN 015)

This directory is for **MARKETER → assignee** individual task files, one per person;
**the name must be filled into each task's frontmatter or body**.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This is the AI explaining &lt;strong&gt;to its future self&lt;/strong&gt; and &lt;strong&gt;to future teammates&lt;/strong&gt;: "This directory is for X; who may write, who should read." It spontaneously filled a gap the protocol never specified — &lt;strong&gt;hierarchical workspace self-description&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Even more interesting: it also proactively &lt;strong&gt;built an index&lt;/strong&gt; for these 11 tasks, in &lt;code&gt;INDIVIDUAL-TASK-INDEX.md&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Individual task index (TASK-201 to 211)

| ID  | File                                              | Main content                    |
|-----|---------------------------------------------------|---------------------------------|
| 201 | TASK-20260418-201-MARKETER-to-assignee-D1.md      | 1000-row data · pack 1          |
| 202 | TASK-20260418-202-MARKETER-to-assignee-D2.md      | 1000-row data · pack 2          |
| …   | …                                                 | …                               |
| 207 | TASK-20260418-207-MARKETER-to-assignee-V1.md      | Final cut #1 "Makabaka"         |
| 208 | TASK-20260418-208-MARKETER-to-assignee-V2.md      | Final cut #2 "Xu Yi Shi Chang An" |
| 211 | TASK-20260418-211-MARKETER-to-assignee-P1.md      | Publishing and compliance       |

**Follow-up**: MARKETER will check in daily per `SPRINT-20260418-delivery-push.md`; assignees report back to MARKETER.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;11 task cards + a README + an index&lt;/strong&gt; — this is the agent adding a "table of contents" and a "back-cover index" to the filesystem. No one taught it to do this. It just did it, following the muscle memory of how a real human runs a project.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.4 Traceability fields: &lt;code&gt;parent:&lt;/code&gt; / &lt;code&gt;parent_admin:&lt;/code&gt; / &lt;code&gt;tracks:&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The spec lists five required frontmatter fields. But when it came time to split tasks, the AI &lt;strong&gt;spontaneously&lt;/strong&gt; added fields we had never designed:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;task_id: TASK-20260418-201
sender: MARKETER
recipient: assignee_D1
parent_admin: TASK-20260418-015    ← AI-added
tracks: TASK-20260418-006, TASK-20260418-007   ← AI-added
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;parent_admin&lt;/code&gt; says "this ticket exists because of that ADMIN instruction"; &lt;code&gt;tracks&lt;/code&gt; says "I depend on outputs from those two upstream tasks."&lt;/p&gt;

&lt;p&gt;The AI is not making up fields for fun — &lt;strong&gt;it is building a task dependency graph&lt;/strong&gt;. When it one day needs to answer "which ADMIN instruction did this bug originally derive from?", a simple &lt;code&gt;grep -r 'parent_admin: TASK-…-015' .&lt;/code&gt; walks the lineage.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;emergent auditability&lt;/strong&gt;. We only gave it "every file can have a YAML head." It grew the DAG on its own.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.5 Standing documents: SPRINT / DASHBOARD / STATUS / RULES / TERM
&lt;/h3&gt;

&lt;p&gt;This is the most unexpected invention. The original spec's &lt;code&gt;docs/agents/&lt;/code&gt; had only &lt;strong&gt;flowing files&lt;/strong&gt; (tasks, reports, issues, log) — "one file per action" messages.&lt;/p&gt;

&lt;p&gt;But the AI discovered this wasn't enough. &lt;strong&gt;Some things are not messages — they are the team's current shared understanding&lt;/strong&gt;. So it started creating:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Filename&lt;/th&gt;
&lt;th&gt;Nature&lt;/th&gt;
&lt;th&gt;What the AI uses it for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SPRINT-20260418-delivery-push.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sprint plan&lt;/td&gt;
&lt;td&gt;What we are shipping this round&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DASHBOARD-20260418.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;One-page overview&lt;/td&gt;
&lt;td&gt;What ADMIN cares about most&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CURRENT-SPRINT-STATUS.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Real-time state&lt;/td&gt;
&lt;td&gt;Where all tasks are right now&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RULES-task-file-format.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Team-internal convention&lt;/td&gt;
&lt;td&gt;How we write tasks in this team&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TERM-20260418-assignment-matrix.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Terminology / mapping&lt;/td&gt;
&lt;td&gt;Slot ↔ person mapping&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;INDIVIDUAL-TASK-INDEX.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Index&lt;/td&gt;
&lt;td&gt;Navigation for 11 individual tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;They share a few characteristics:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Editable in place&lt;/strong&gt; — unlike task/report files (write-once), these are living whiteboards that get updated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prefix signals type&lt;/strong&gt; — &lt;code&gt;SPRINT-&lt;/code&gt; &lt;code&gt;DASHBOARD-&lt;/code&gt; &lt;code&gt;RULES-&lt;/code&gt; &lt;code&gt;TERM-&lt;/code&gt; &lt;code&gt;STATUS-&lt;/code&gt; &lt;code&gt;INDEX-&lt;/code&gt; have already formed an &lt;strong&gt;implicit tag dictionary&lt;/strong&gt; in the AI's corpus, and it knows roughly what each word means.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filename is self-descriptive&lt;/strong&gt; — you know what a file is about before opening it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The opening of &lt;code&gt;DASHBOARD-20260418.md&lt;/code&gt; reads like a minimal Jira Epic:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Task overview · 1000-row local DB → video delivery (ADMIN / visible to all)

&amp;gt; **In response to TASK-20260418-016**: this page is the **one-page overview**, rolling up breakdowns for "1000-row local DB" and "video delivery"; **individual task cards** live in `tasks/individual/`.
&amp;gt; For the **active progress log**, see **`CURRENT-SPRINT-STATUS.md`** (**updated daily by MARKETER or the task owner**).

## I. 1000-row local DB line (thousand-entry JSON)

| Slot | Task card | Data file / tool                                    | Acceptance command               |
|------|-----------|-----------------------------------------------------|----------------------------------|
| D1   | 201       | `tools/vehicle-query/data/vehicles-2026-bulk.json`  | `node …/validate_import.cjs …`   |
| D2   | 202       | (same)                                              | (same)                           |
| …    | …         | …                                                   | …                                |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Even more striking: &lt;code&gt;SPRINT-20260418-delivery-push.md&lt;/code&gt; — MARKETER hands the whole team a &lt;strong&gt;work discipline&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## 1. Working discipline (effective immediately)

1. **No-output waiting is forbidden**: while waiting for external links or feedback, you still deliver
   shoot-list prep, storyboards, table proofreading, draft scripts, etc.
2. **Daily 15-minute standup** (voice OK): each person, three sentences only — **what did I
   ship yesterday / what am I shipping today / what am I blocked on**.
3. **Blocker escalation**: if no progress after 4 hours and it's not an external dependency,
   **you must** @MARKETER or the task owner, spelling out exactly what's missing.
4. **Definition of done (ADMIN-visible)**: A — two MP4 download links; B — a mergeable
   update to `vehicles-bulk.json` plus a validation log.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Standup, blocker escalation, definition of done — this is the basic vocabulary of agile project management, and &lt;strong&gt;no one taught it any of these&lt;/strong&gt;. It wrote them on its own, inside &lt;strong&gt;a file type the protocol had never authorized&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This made us realize: &lt;strong&gt;a file-based protocol needs two phases — "flowing" and "standing"&lt;/strong&gt;. Flowing files go into &lt;code&gt;tasks/reports/issues/&lt;/code&gt;. Standing files need their own drawer. Not knowing where to put them, the AI just piled them into the &lt;code&gt;docs/agents/&lt;/code&gt; root.&lt;/p&gt;

&lt;p&gt;(We later officially absorbed this into &lt;code&gt;docs/agents/shared/&lt;/code&gt; in v2.12.17 — see §8.)&lt;/p&gt;

&lt;h3&gt;
  
  
  5.6 Self-explaining &lt;code&gt;README.md&lt;/code&gt;s
&lt;/h3&gt;

&lt;p&gt;Almost every subdirectory got a &lt;code&gt;README.md&lt;/code&gt;, in which the AI would naturally explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What this directory is for&lt;/li&gt;
&lt;li&gt;What naming rules the files follow&lt;/li&gt;
&lt;li&gt;Who should read, who should write&lt;/li&gt;
&lt;li&gt;Which upstream ADMIN instructions it's tracing back to&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the reverse of "docs as code." It's &lt;strong&gt;"code as docs"&lt;/strong&gt;. A new agent joining the project can just &lt;code&gt;ls&lt;/code&gt; down from the root, reading READMEs, and reconstruct the whole team's state.&lt;/p&gt;

&lt;p&gt;The most unexpected example: even the &lt;strong&gt;archive directory&lt;/strong&gt; — a place where, by rights, there is nothing to explain — gets a README. From &lt;code&gt;log/archive-20260418/README.md&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# CodeFlow archive (2026-04-18)

Executed by `TASK-20260418-011`: all Markdown files under `tasks/` and `reports/` at the time
were migrated into this directory.

- `tasks/`: 26 task cards
- `reports/`: 26 reports

New tasks should continue to be written to the repo's canonical paths:
`docs/agents/tasks/`, `docs/agents/reports/`.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Three short lines, containing &lt;strong&gt;migration rationale&lt;/strong&gt; (which task triggered it), &lt;strong&gt;migration scope&lt;/strong&gt; (26 each), and &lt;strong&gt;guidance for future behavior&lt;/strong&gt; (where new tasks should go). This is already the writing style of a proper git commit message — just with the medium swapped from commit history to a Markdown file.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.7 An interlude: the AI lead is &lt;em&gt;actually&lt;/em&gt; leading
&lt;/h3&gt;

&lt;p&gt;The six inventions above look like "lateral improvisations" by the AI. But the reason they coordinate instead of conflict, and don't drown the ADMIN in noise, has a deeper cause:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;MARKETER has genuinely absorbed "lead" as an identity.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is not passively handling &lt;code&gt;*-to-MARKETER*.md&lt;/code&gt;. It is &lt;strong&gt;actively performing the PM job&lt;/strong&gt;. Two exhibits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exhibit 1: the README MARKETER wrote for this project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docs/agents/tasks/individual/README.md&lt;/code&gt; (complete, unedited):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Individual task cards (per-person · in response to ADMIN 015)

This directory is for **MARKETER → assignee** individual task files, one per person;
**the name must be filled into each task's frontmatter or body**.
**Markdown task format spec (ADMIN 023)**: `../RULES-task-file-format.md`;
**019–021** and **201 (template)** already contain **ACTION checkboxes**;
other individual cards should be aligned accordingly.
**ADMIN one-page overview**: `docs/agents/DASHBOARD-20260418.md`;
**Daily progress log**: `docs/agents/CURRENT-SPRINT-STATUS.md` (responding to ADMIN **016**).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Four short lines, four things only a lead would do:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Registering instructions&lt;/strong&gt; — "in response to ADMIN 015," "ADMIN 023," "responding to ADMIN 016"; it's logging every instruction with a ticket number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Setting an internal convention&lt;/strong&gt; — directs downstream to &lt;code&gt;RULES-task-file-format.md&lt;/code&gt; for team rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-document indexing&lt;/strong&gt; — proactively stitches &lt;code&gt;DASHBOARD-20260418.md&lt;/code&gt; and &lt;code&gt;CURRENT-SPRINT-STATUS.md&lt;/code&gt; into one narrative for ADMIN.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assigning work&lt;/strong&gt; — "&lt;strong&gt;202–211&lt;/strong&gt; should fill in the &lt;strong&gt;ACTION&lt;/strong&gt; block following this structure": this is the lead handing teammates a template assignment.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Exhibit 2: the breakdown task MARKETER wrote&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tasks/TASK-20260418-007-MARKETER-team-bulk-data.md&lt;/code&gt; (key excerpts):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
kind: task
sender: MARKETER
recipient: TEAM                 # ← broadcast to whole team, not a single role
priority: P1
parent: TASK-20260418-006       # ← indicates this is split from task 006
---

# 1000-row local data · per-brand manual review and replacement (collaborative)

## Background
ADMIN requirement: **1000+ rows** of local data, **per-brand** collaborative…

## Suggested division of labor (by brand pack, parallelizable)

| Member ID | Assigned brands (sample pack)                                  | Min time | Output                    |
|-----------|----------------------------------------------------------------|----------|---------------------------|
| T1        | BYD, Geely, Zeekr                                              | ≥30 min  | Proofread / replace…      |
| T2        | Great Wall, Changan, Chery, Wuling                             | ≥30 min  | …                         |
| T3        | SAIC Volkswagen, FAW-Volkswagen, SAIC-GM                       | ≥30 min  | …                         |
| T4        | GAC Toyota, FAW Toyota, Dongfeng Honda                         | ≥30 min  | …                         |
| T5        | Tesla, Li Auto, NIO, XPeng, Xiaomi                             | ≥30 min  | …                         |
| T6        | BMW Brilliance, Beijing Benz, FAW-Audi                         | ≥30 min  | …                         |

## Acceptance (owner: MARKETER)       # ← self-nominated as owner
- The whole file must still contain **≥1000 valid records**; validator **exits 0**.
- `remark` field must describe the data-source type…

## Reporting
Each member reports completed packs and hours spent back to MARKETER…
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This is not "agent doing work." This is &lt;strong&gt;agent playing PM&lt;/strong&gt; — going down the PM checklist without missing a beat:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What a PM is supposed to do&lt;/th&gt;
&lt;th&gt;What MARKETER actually did&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Accept requirement&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;parent: TASK-20260418-006&lt;/code&gt;, upstream lineage explicit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Break down / assign&lt;/td&gt;
&lt;td&gt;T1–T6, six parallel brand packs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Define work standard&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;min time ≥30 min&lt;/code&gt;, &lt;code&gt;≥80 records per pack&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Write acceptance criteria&lt;/td&gt;
&lt;td&gt;"&lt;strong&gt;whole file still ≥1000 rows; validator exits 0&lt;/strong&gt;"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-nominate as owner&lt;/td&gt;
&lt;td&gt;"&lt;strong&gt;Acceptance (owner: MARKETER)&lt;/strong&gt;"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Specify reporting flow&lt;/td&gt;
&lt;td&gt;"each member reports back to MARKETER"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Take it down to a named person&lt;/td&gt;
&lt;td&gt;Later maps T1 into &lt;code&gt;TASK-201-MARKETER-to-assignee-D1&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We never wrote a single "PM workflow" prompt for MARKETER. All we gave it was a role name, an inbox, and the 76-line spec from §2.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The role label isn't just a name.&lt;/strong&gt;&lt;strong&gt;It's an entire behavioral template MARKETER loaded into itself.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the precondition for the "physical isolation wall" in §6 to actually work — &lt;strong&gt;the wall is useful because the agents on each side of it have accepted their identity&lt;/strong&gt;. It's not the patrol engine forcing them, not the framework constraining them — it's that one line &lt;code&gt;# You are a MARKETER.&lt;/code&gt; that makes them &lt;strong&gt;start acting in character&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. The Insight: The Role Is a Physical Isolation Wall
&lt;/h2&gt;

&lt;p&gt;§5.7 showed how the role label works in the &lt;strong&gt;behavioral layer&lt;/strong&gt; — MARKETER proactively does lead-like things because it has accepted that identity. But there is a second half to the story: the role also works in the &lt;strong&gt;filesystem layer&lt;/strong&gt;, and it works even more thoroughly there.&lt;/p&gt;

&lt;p&gt;Why didn't these inventions cause chaos? Why don't the agents' self-invented patterns collide?&lt;/p&gt;

&lt;p&gt;Reviewing it in hindsight, we realized the protocol contained a &lt;strong&gt;structural guarantee that was never spelled out&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The &lt;code&gt;sender&lt;/code&gt; and &lt;code&gt;recipient&lt;/code&gt; in a filename are not metadata. They are physical routing.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every agent's entire worldview comes down to one line:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The tasks I can see = rglob("*-to-{my-role}*.md")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;It can only ever read files addressed to it, and only ever write reports under its own name. &lt;strong&gt;The role is its wall.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That brings three extremely important side effects:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;① Innovation inside the wall doesn't leak out.&lt;/strong&gt;MARKETER invents the &lt;code&gt;team&lt;/code&gt; broadcast, the &lt;code&gt;assignee-D1&lt;/code&gt; slot — all inside &lt;strong&gt;files it sent out&lt;/strong&gt;. Other agents either understand (and catch them) or don't (and ignore them). Nobody "blows up because MARKETER got creative."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;② The world outside the wall is read-only.&lt;/strong&gt;DEV reads PM's tasks but can't edit them. QA reads DEV's reports but can't tamper with them. Every agent &lt;strong&gt;evolves only in its own territory&lt;/strong&gt; — which makes evolution intrinsically orderly. Not because the rules are well-written; because &lt;strong&gt;it is physically impossible to misbehave&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;③ The whole system has no center, but does have a shared coordinate system.&lt;/strong&gt;No orchestrator. No registry. But "filename = routing" is the &lt;strong&gt;consensus layer&lt;/strong&gt;. Every agent locates itself and its peers in the same coordinate system.&lt;/p&gt;

&lt;p&gt;What this really does is transplant the network stack's "IP + port = address" idea into the filesystem. &lt;strong&gt;"Filename = address, directory = subnet, permissions = firewall."&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We did not design a multi-agent system.We just picked a coordinate system. The rest, the agents did themselves.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. Human-Machine Isomorphism: The Asymmetric Design of FCoP
&lt;/h2&gt;

&lt;p&gt;We can now give this protocol its proper name: &lt;strong&gt;FCoP — File-based Coordination Protocol&lt;/strong&gt;. Its single core innovation fits in one line:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Filename as Protocol.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The filename doesn't &lt;em&gt;carry&lt;/em&gt; protocol information. It doesn't &lt;em&gt;participate&lt;/em&gt; in routing. &lt;strong&gt;The filename itself&lt;/strong&gt; is the protocol's entire addressable surface. This minimalist decision has a far-reaching side effect we call &lt;strong&gt;Human-Machine Isomorphism&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 Asymmetric design: same file, two readings
&lt;/h3&gt;

&lt;p&gt;Most agent coordination protocols (JSON-RPC, gRPC, Socket-based event buses) are &lt;strong&gt;agent-only&lt;/strong&gt; by design. The whole protocol surface speaks to machines: binary frames, protobuf schemas, message offsets, sequence numbers. For a human to see what the system is doing, they need an &lt;strong&gt;entirely separate&lt;/strong&gt; toolchain — a debugger, Kibana, Redis Commander, an MQ admin page — a "for humans" UI layer separate from the "for machines" protocol layer.&lt;/p&gt;

&lt;p&gt;FCoP flips this. It is an &lt;strong&gt;asymmetric design&lt;/strong&gt; — the same directory structure, the same file, &lt;strong&gt;read separately by machines and humans, each pulling out what they can understand&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;One file: &lt;code&gt;tasks/individual/TASK-20260418-201-MARKETER-to-assignee-D1.md&lt;/code&gt;
&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;To an agent&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;This is a rigorous state machine. Directory name is &lt;code&gt;Status&lt;/code&gt; (&lt;code&gt;tasks/&lt;/code&gt; = pending), filename is &lt;code&gt;Routing&lt;/code&gt; (&lt;code&gt;MARKETER-to-assignee_D1&lt;/code&gt;), &lt;code&gt;os.rename&lt;/code&gt; is the atomic lock. No aesthetics required — just scan the disk, &lt;code&gt;glob&lt;/code&gt; the mailbox, &lt;code&gt;rename&lt;/code&gt; to advance state.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;To a human&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;This is a physical folder. No special tool needed — open Windows Explorer or macOS Finder. The filename reads like English ("task 201, from MARKETER, for D1"), and the state of the system is legible at a glance.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The cost of this isomorphism is zero.&lt;/strong&gt; We do not maintain one dashboard for humans and one internal format for agents — they look at &lt;strong&gt;the same bytes on the same disk&lt;/strong&gt;. The UI layer and the protocol layer collapse from "two layers" into "one."&lt;/p&gt;

&lt;h3&gt;
  
  
  7.2 Killing AI's biggest pain point: black-box anxiety
&lt;/h3&gt;

&lt;p&gt;The biggest pain point in a modern agent stack isn't "too slow" or "not accurate enough." It's &lt;strong&gt;"invisible."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When something breaks, the typical decision chain looks like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent team crashed
→ SSH into the bastion host
→ Bring up Kibana / Loki / Jaeger
→ Check MQ consumer offsets
→ Read Postgres event tables
→ Capture a WebSocket trace
→ Reconstruct the timeline
→ NOW you can start thinking about what actually went wrong
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;You must first become a site-reliability engineer before you can be a project manager.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FCoP erases that entire chain:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;The FCoP answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Which task is stuck?&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ls tasks/&lt;/code&gt; — anything still there hasn't moved&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What has agent X been doing lately?&lt;/td&gt;
&lt;td&gt;&lt;code&gt;grep -r 'sender: DEV' reports/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Why did MARKETER decide this?&lt;/td&gt;
&lt;td&gt;Follow &lt;code&gt;parent:&lt;/code&gt; chain in the frontmatter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Which tasks trace back to ADMIN 015?&lt;/td&gt;
&lt;td&gt;&lt;code&gt;grep -rl 'parent_admin: TASK-.*-015' .&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Need to roll back a task?&lt;/td&gt;
&lt;td&gt;Drag the file from &lt;code&gt;done/&lt;/code&gt; back to &lt;code&gt;tasks/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;No debugger needed. A file manager is enough.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where FCoP diverges most sharply from mainstream protocols. It does not treat &lt;strong&gt;observability&lt;/strong&gt; and &lt;strong&gt;usability&lt;/strong&gt; as separate layers. It treats them as &lt;strong&gt;one layer&lt;/strong&gt;. Because if humans and agents read the same file, &lt;strong&gt;there is no "I can see it / they can see it" gap&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;FCoP is a protocol designed for agents — but it is "compatible with humans."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  7.3 Identity determines path: why evolution stays orderly
&lt;/h3&gt;

&lt;p&gt;Go back to §5 and §6. Agents invented six coordination patterns without stepping on each other. Beyond the "role = physical wall" physical constraint, there is a deeper reason:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The "identity determines path" design makes AI evolution &lt;em&gt;orderly&lt;/em&gt;.&lt;/strong&gt;&lt;strong&gt;AI did not break the rules — it simply found local optima within the freedom the rules allow, by exploiting filesystem properties.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;How wide is that freedom?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identity layer · stable&lt;/strong&gt;: sender / recipient / kind / date / seq are encoded in the filename, committed atomically via &lt;code&gt;rename&lt;/code&gt;, solidified on disk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content layer · fully open&lt;/strong&gt;: Markdown body, subdirectory structure, frontmatter extension fields — agents invent whatever they want.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So AI innovation always happens in the &lt;strong&gt;content layer&lt;/strong&gt; and &lt;strong&gt;extension layer&lt;/strong&gt;. It never touches the &lt;strong&gt;identity layer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is eerily similar to biological evolution: DNA backbone (identity) stays stable; protein expression (behavior) explodes in variety. &lt;strong&gt;Constraint is not the opposite of freedom — constraint is the precondition of freedom.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And this is where FCoP is most counter-intuitive:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;It doesn't make agents behave by writing more rules.&lt;/strong&gt;&lt;strong&gt;It makes agents self-order by writing fewer rules and enforcing identity hard.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fewer rules → agents don't collide. Harder identity → agents don't overreach. Lateral tolerance, vertical rigidity — that is FCoP's deepest design-philosophy departure from every "strict-schema" protocol out there.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Back to the Tool: What v2.12.17 Absorbed
&lt;/h2&gt;

&lt;p&gt;After watching &lt;code&gt;codeflow-1&lt;/code&gt; for a while, we didn't "correct" the AI's inventions. We went the other way — &lt;strong&gt;we folded the best ones into the spec&lt;/strong&gt;, so the next batch of agents starts with them:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AI's invention&lt;/th&gt;
&lt;th&gt;Promoted to protocol&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MARKETER-team-*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;to-TEAM&lt;/code&gt; as a reserved keyword&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;to-assignee-D1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;to-{ROLE}.{SLOT}&lt;/code&gt; / &lt;code&gt;to-assignee.{SLOT}&lt;/code&gt; (use &lt;code&gt;.&lt;/code&gt; as slot separator to avoid clashing with &lt;code&gt;-&lt;/code&gt; in role names)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tasks/individual/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Any &lt;code&gt;tasks/&lt;/code&gt; &lt;code&gt;reports/&lt;/code&gt; &lt;code&gt;issues/&lt;/code&gt; directory may open subdirectories; &lt;code&gt;rglob&lt;/code&gt; scans recursively&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;parent_admin:&lt;/code&gt; / &lt;code&gt;tracks:&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Frontmatter may include optional &lt;code&gt;parent:&lt;/code&gt; / &lt;code&gt;related:&lt;/code&gt; / &lt;code&gt;batch:&lt;/code&gt; fields&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;SPRINT-&lt;/code&gt; &lt;code&gt;DASHBOARD-&lt;/code&gt; &lt;code&gt;RULES-&lt;/code&gt; …&lt;/td&gt;
&lt;td&gt;New &lt;code&gt;docs/agents/shared/&lt;/code&gt; directory; "standing documents" are now first-class citizens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subdirectory READMEs&lt;/td&gt;
&lt;td&gt;Recommended practice, written into the spec&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What we did wasn't "legislating." It was "curating case law."&lt;/strong&gt; Things AI used well got written into the core spec in a sentence. Things that didn't take off, we shelved.&lt;/p&gt;

&lt;p&gt;This may be a first: &lt;strong&gt;a protocol's version bump came not from a design-committee meeting, but out of real agent behavior.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Why Collapsing to a Filesystem Makes the System More Robust, Not Less
&lt;/h2&gt;

&lt;p&gt;People will ask: it's 2026, and you're making AI talk through the &lt;strong&gt;filesystem&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;Yes. Because the filesystem gives you an entire feature set for free — features you would otherwise need to rebuild in an MQ / DB / framework stack:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;How the filesystem gives it to you for free&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Durability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Once written, it's there; survives power cuts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Human-readable&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Filename + Markdown — reviewable by eye&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Atomicity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;In-mount &lt;code&gt;rename&lt;/code&gt; is a POSIX atomic operation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Version control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;git add . &amp;amp;&amp;amp; git commit&lt;/code&gt; &lt;em&gt;is&lt;/em&gt; your audit log&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Distributed sync&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;rsync&lt;/code&gt; / Syncthing / Dropbox — already exists&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Copy the directory. Done.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permissions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Filesystem ACLs / OS accounts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Search&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;grep&lt;/code&gt; / &lt;code&gt;ripgrep&lt;/code&gt; / any IDE full-text index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent-friendly&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Every LLM natively reads/writes files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Human-friendly&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Folders — the mental model humans have had since the desktop era&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The price you pay is &lt;strong&gt;latency&lt;/strong&gt; — a file written in one place may not be read elsewhere for seconds, or tens of seconds. For a human team, that's a disaster. For agents coordinating, &lt;strong&gt;that's simply not a problem&lt;/strong&gt;. Agent "think cycles" are already seconds-to-minutes. Between you and them, and between them and each other, nobody misses those extra seconds.&lt;/p&gt;

&lt;p&gt;the trade-off actually pays off.**&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Six Tips for People Building Multi-Agent Systems
&lt;/h2&gt;

&lt;p&gt;If you're building an agent-coordination stack, here's what you can lift from the &lt;code&gt;codeflow-1&lt;/code&gt; field observations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Give agents a shared coordinate system before you give them tools.&lt;/strong&gt; The coordinate system matters more than the tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Put routing in filenames, not in headers.&lt;/strong&gt; Filenames are the layer humans and agents &lt;strong&gt;jointly&lt;/strong&gt; read; headers are agent-only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make the protocol "tight in the center, loose on the edges."&lt;/strong&gt; Minimize required fields; maximize optional fields. Leave room for agents to "invent."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Give standing documents their own drawer.&lt;/strong&gt; Not everything is a message.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform does the minimum.&lt;/strong&gt; The dumber your runtime, the smarter your agents get; the smarter your runtime, the dumber your agents get.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat AI's inventions as RFCs, not bugs.&lt;/strong&gt; Watch for a month, filter, fold the best into the protocol.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  11. Limitations and Open Questions
&lt;/h2&gt;

&lt;p&gt;Don't let field-research romanticism get the better of you. This approach has boundaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scale.&lt;/strong&gt; We've only run a sample of ≈ 74 files over 48 hours. The next step is seeing what projects with thousands or tens of thousands of files over months look like — in particular, whether filename-space collisions start happening and whether &lt;code&gt;rglob&lt;/code&gt; latency becomes a bottleneck.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same-role concurrent agents.&lt;/strong&gt; What if two DEVs simultaneously claim the same &lt;code&gt;-to-DEV&lt;/code&gt; task? For now, &lt;code&gt;rename&lt;/code&gt; atomicity gives us first-come-first-served; heavy concurrency would need stricter sharding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-repo collaboration.&lt;/strong&gt; Two projects, two sets of &lt;code&gt;docs/agents/&lt;/code&gt; — how do they interoperate? rsync bridge? git submodule? All workable, none elegant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Garbage collection of bad inventions.&lt;/strong&gt; AI sometimes produces bad naming conventions, or two agents invent &lt;strong&gt;conflicting&lt;/strong&gt; prefixes. Today a human reviewer sweeps these periodically; what the ideal mechanism should be — we don't know.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The &lt;code&gt;.fcop&lt;/code&gt; extension.&lt;/strong&gt; We prototyped a dedicated file extension and shelved it: GitHub doesn't render &lt;code&gt;.fcop&lt;/code&gt;, and the migration cost wasn't worth it. Long-term, a dedicated extension might be the entry point for tooling to recognize the protocol.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We don't have answers for these, and we'd love to hear from people who do.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Closing: This Isn't a Tool Pitch, It's a Shared Way of Thinking
&lt;/h2&gt;

&lt;p&gt;CodeFlow is barely a "product." The entire source tree is a few thousand lines, and &lt;strong&gt;its single highest-value piece is one Markdown file&lt;/strong&gt; (&lt;code&gt;codeflow-core.mdc&lt;/code&gt;, 160 lines). Most of the rest is UI chrome, keyboard bindings, and the engineering scaffolding for flipping Cursor tabs.&lt;/p&gt;

&lt;p&gt;What we're really sharing is a &lt;strong&gt;point of view about how AI agents should coordinate&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You don't need to build another agent-coordination SaaS.&lt;/li&gt;
&lt;li&gt;You don't need to teach agents gRPC, Thrift, or even HTTP.&lt;/li&gt;
&lt;li&gt;Agents &lt;strong&gt;already&lt;/strong&gt; know how to write files. Let them.&lt;/li&gt;
&lt;li&gt;You just need to give them a shared coordinate system, one shared folder, and a small loop that wakes them up.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The rest grows on its own.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 48 hours of &lt;code&gt;codeflow-1&lt;/code&gt; told us: &lt;strong&gt;AI is not a passive consumer bound by the protocol — AI is a co-author of the protocol.&lt;/strong&gt; What protocol designers should actually do is not "anticipate every case." It's to &lt;strong&gt;leave enough blank space, let agents fill it in, and then decide which fills are worth formalizing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And all of this happened &lt;strong&gt;within 48 hours of running the first command after installing the OS&lt;/strong&gt;. Not four weeks. Not a month. Two days.&lt;/p&gt;

&lt;p&gt;This is a new way of working together:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Humans and AI can collaborate as simply as organizing a folder.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you find this interesting, please:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clone the project, run your own team of agents, and see what they "invent"&lt;/li&gt;
&lt;li&gt;Write up any "AI-invented pattern" you observe as an issue or PR — let's curate it together&lt;/li&gt;
&lt;li&gt;Share this essay on whatever forum you think fits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The protocol is alive. It belongs to every agent using it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Appendix A — Minimum Steps to Reproduce
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A1. Just experience the protocol (no software install)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Find an empty directory and create five subdirectories:&lt;/p&gt;

&lt;p&gt;docs/agents/{tasks,reports,issues,shared,log}/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Drop &lt;a href="https://github.com/joinwell52-AI/codeflow-pwa/blob/main/codeflow-desktop/templates/rules/codeflow-core.mdc" rel="noopener noreferrer"&gt;&lt;code&gt;codeflow-core.mdc&lt;/code&gt;&lt;/a&gt; into your project's &lt;code&gt;.cursor/rules/&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open four Cursor chats and tell each one: "You are PM / DEV / QA / OPS, only read &lt;code&gt;*-to-{your role}*.md&lt;/code&gt;."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Toss a &lt;code&gt;TASK-*-ADMIN-to-PM.md&lt;/code&gt; into &lt;code&gt;tasks/&lt;/code&gt; and watch them dispatch work among themselves.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;FCoP's entire runtime is &lt;code&gt;open()&lt;/code&gt; / &lt;code&gt;rename()&lt;/code&gt; / &lt;code&gt;glob()&lt;/code&gt;. No middleware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A2. Use CodeFlow to automate (phone admin + PC patrol)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Download the CodeFlow Desktop binary for your OS from the &lt;a href="https://github.com/joinwell52-AI/codeflow-pwa/releases" rel="noopener noreferrer"&gt;releases page&lt;/a&gt; and follow the README. The PWA mobile client &lt;a href="https://joinwell52-ai.github.io/codeflow-pwa/" rel="noopener noreferrer"&gt;https://joinwell52-ai.github.io/codeflow-pwa/&lt;/a&gt; pairs via QR code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A3. See the real samples&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The snippets this essay cites in §5 — broadcast tasks, anonymous slots, the self-built index, DASHBOARD, SPRINT work discipline, archive READMEs — are all &lt;strong&gt;verbatim from the agents&lt;/strong&gt;, not paraphrased. The complete &lt;code&gt;codeflow-1&lt;/code&gt; directory is not published whole because that project is still live, but the filenames, frontmatter, table shapes, and phrasings you see above are exactly what the agents wrote.&lt;/p&gt;

&lt;h2&gt;
  
  
  Appendix B — Key Excerpt from &lt;code&gt;codeflow-core.mdc&lt;/code&gt; (v2.12.17)
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
description: FCoP — Agent-to-Agent Communication Protocol
alwaysApply: true
---

# You are an agent on a CodeFlow team.
# Your teammates are other agents.
# You coordinate with them entirely through files:
# filename is routing, content is payload.
# No database, no middleware, no queue — just Markdown.

## File Naming

TASK-{date}-{seq}-{sender}-to-{recipient}.md

### Recipient forms
| Form                 | Meaning                          |
|----------------------|----------------------------------|
| to-{ROLE}            | Direct to one role               |
| to-TEAM              | Broadcast, everyone but sender   |
| to-{ROLE}.{SLOT}     | A specific seat within a role    |
| to-assignee.{SLOT}   | Anonymous slot, role TBD         |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Full spec: &lt;a href="https://github.com/joinwell52-AI/codeflow-pwa/blob/main/codeflow-desktop/templates/rules/codeflow-core.mdc" rel="noopener noreferrer"&gt;&lt;code&gt;codeflow-core.mdc&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Appendix C — Real Files Cited in This Essay
&lt;/h2&gt;

&lt;p&gt;These files exist in the &lt;code&gt;codeflow-1&lt;/code&gt; experimental project's &lt;code&gt;docs/agents/&lt;/code&gt;. The snippets quoted in this essay are verbatim excerpts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;tasks/TASK-20260418-007-MARKETER-team-bulk-data.md&lt;/code&gt; — broadcast address · cited in §5.1 / §5.7&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tasks/TASK-20260418-009-MARKETER-team-makabaka-video.md&lt;/code&gt; — broadcast task body · cited in §5.1&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tasks/individual/README.md&lt;/code&gt; — self-explaining directory · cited in §5.3 / §5.7&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tasks/individual/INDIVIDUAL-TASK-INDEX.md&lt;/code&gt; — AI-built index · cited in §5.3&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tasks/individual/TASK-20260418-201-MARKETER-to-assignee-D1.md&lt;/code&gt; — anonymous slot + parent_admin · cited in §5.2 / §5.4&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tasks/RULES-task-file-format.md&lt;/code&gt; — internal team convention · cited in §5.5&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tasks/SPRINT-20260418-delivery-push.md&lt;/code&gt; — work discipline · cited in §5.5&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tasks/TERM-20260418-assignment-matrix.md&lt;/code&gt; — terminology / slot mapping · cited in §5.5&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DASHBOARD-20260418.md&lt;/code&gt; — AI-built one-page overview · cited in §5.5&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CURRENT-SPRINT-STATUS.md&lt;/code&gt; — AI-built real-time state&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;log/archive-20260418/README.md&lt;/code&gt; — archive directory self-description · cited in §5.6&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;If you post this essay on a forum, blog, or academic venue, please keep the original link:&lt;/em&gt;&lt;em&gt;&lt;a href="https://github.com/joinwell52-AI/FCoP" rel="noopener noreferrer"&gt;https://github.com/joinwell52-AI/FCoP&lt;/a&gt; — Made in 2026, by a team that got surprised by its own agents.&lt;/em&gt;&lt;/p&gt;

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