fcop 3.2.2__tar.gz → 3.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fcop-3.2.2 → fcop-3.2.3}/CHANGELOG.md +46 -0
- {fcop-3.2.2 → fcop-3.2.3}/PKG-INFO +1 -1
- fcop-3.2.3/README.md +390 -0
- fcop-3.2.3/README.zh.md +361 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/_version.py +16 -16
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/project.py +10 -12
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/rules/_data/agent-bringup-prompt.zh.md +361 -361
- fcop-3.2.3/src/fcop/rules/_data/fcop-protocol.mdc +1810 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/rules/_data/fcop-rules.mdc +127 -10
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/rules/_data/letter-to-admin.en.md +6 -6
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/rules/_data/letter-to-admin.zh.md +10 -10
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/README.en.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/README.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/dev-team/TEAM-OPERATING-RULES.en.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/dev-team/TEAM-OPERATING-RULES.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/dev-team/roles/DEV.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/dev-team/roles/DEV.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/dev-team/roles/OPS.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/dev-team/roles/OPS.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/dev-team/roles/PM.en.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/dev-team/roles/PM.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/dev-team/roles/QA.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/dev-team/roles/QA.md +4 -4
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/media-team/TEAM-OPERATING-RULES.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/media-team/TEAM-OPERATING-RULES.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/media-team/roles/COLLECTOR.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/media-team/roles/COLLECTOR.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/media-team/roles/EDITOR.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/media-team/roles/EDITOR.md +4 -4
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/media-team/roles/PUBLISHER.en.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/media-team/roles/PUBLISHER.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/media-team/roles/WRITER.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/media-team/roles/WRITER.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/mvp-team/TEAM-OPERATING-RULES.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/mvp-team/TEAM-OPERATING-RULES.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/mvp-team/roles/BUILDER.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/mvp-team/roles/BUILDER.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/mvp-team/roles/DESIGNER.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/mvp-team/roles/DESIGNER.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/mvp-team/roles/MARKETER.en.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/mvp-team/roles/MARKETER.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/mvp-team/roles/RESEARCHER.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/mvp-team/roles/RESEARCHER.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/qa-team/TEAM-OPERATING-RULES.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/qa-team/TEAM-OPERATING-RULES.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/qa-team/roles/AUTO-TESTER.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/qa-team/roles/AUTO-TESTER.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/qa-team/roles/LEAD-QA.en.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/qa-team/roles/LEAD-QA.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/qa-team/roles/PERF-TESTER.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/qa-team/roles/PERF-TESTER.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/qa-team/roles/TESTER.en.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/qa-team/roles/TESTER.md +3 -3
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/solo/TEAM-OPERATING-RULES.en.md +4 -4
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/solo/TEAM-OPERATING-RULES.md +4 -4
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/solo/TEAM-ROLES.en.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/solo/TEAM-ROLES.md +2 -2
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/solo/roles/ME.en.md +4 -4
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/solo/roles/ME.md +4 -4
- fcop-3.2.2/README.md +0 -389
- fcop-3.2.2/README.zh.md +0 -360
- fcop-3.2.2/src/fcop/rules/_data/fcop-protocol.mdc +0 -2192
- {fcop-3.2.2 → fcop-3.2.3}/.gitignore +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/LICENSE +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/adr/README.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/essays/README.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/fcop-README.pypi.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/pyproject.toml +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/spec/README.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/spec/archived/README.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/spec/schemas/README.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/__init__.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/_compat_cli.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/_data/schemas/agent.schema.json +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/_data/schemas/boundary.schema.json +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/_data/schemas/encoding.schema.json +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/_data/schemas/event.schema.json +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/_data/schemas/failure.schema.json +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/_data/schemas/ipc-envelope.schema.json +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/_data/schemas/review.schema.json +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/_data/schemas/skill.schema.json +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/cli/__init__.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/cli/_main.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/cli/migrate_v3.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/cli/migrate_workspace.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/core/__init__.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/core/boundary.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/core/config.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/core/events.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/core/filename.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/core/frontmatter.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/core/jsonschema_validator.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/core/recovery.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/core/schema.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/errors.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/inspection.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/lifecycle/__init__.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/lifecycle/atomic.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/lifecycle/detect.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/lifecycle/events.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/lifecycle/migrate.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/lifecycle/state.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/lifecycle/transitions.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/models.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/py.typed +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/rules/__init__.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/rules/_data/agent-bringup-prompt.en.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/rules/_data/agent-install-prompt.en.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/rules/_data/agent-install-prompt.zh.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/rules/_data/fcop-spec-v1.0.en.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/rules/_data/fcop-spec-v1.0.zh.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/rules/_data/fcop-spec-v1.1.en.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/rules/_data/fcop-spec-v1.1.zh.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/rules/_data/internal-readme.en.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/rules/_data/internal-readme.zh.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/__init__.py +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/dev-team/README.en.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/dev-team/README.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/dev-team/TEAM-ROLES.en.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/dev-team/TEAM-ROLES.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/index.json +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/media-team/README.en.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/media-team/README.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/media-team/TEAM-ROLES.en.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/media-team/TEAM-ROLES.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/mvp-team/README.en.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/mvp-team/README.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/mvp-team/TEAM-ROLES.en.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/mvp-team/TEAM-ROLES.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/qa-team/README.en.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/qa-team/README.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/qa-team/TEAM-ROLES.en.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/qa-team/TEAM-ROLES.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/solo/README.en.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/src/fcop/teams/_data/solo/README.md +0 -0
- {fcop-3.2.2 → fcop-3.2.3}/workspace/README.md +0 -0
|
@@ -8,6 +8,52 @@ This file tracks both packages together because they release in lockstep.
|
|
|
8
8
|
See [adr/ADR-0002](./adr/ADR-0002-package-split-and-migration.md) for the
|
|
9
9
|
versioning strategy.
|
|
10
10
|
|
|
11
|
+
## [3.2.3] — 2026-05-23 (Team template & documentation sync · FCoP 3.0 compliance)
|
|
12
|
+
|
|
13
|
+
### Fixed — `fcop` (bundled team templates)
|
|
14
|
+
- **`letter-to-admin.zh.md` / `letter-to-admin.en.md`** — tool count updated
|
|
15
|
+
32 → 45; all directory references updated from legacy `tasks/reports/log/`
|
|
16
|
+
to `_lifecycle/` topology introduced in FCoP 3.0.
|
|
17
|
+
- **All `roles/*.md` files** across `dev-team`, `media-team`, `mvp-team`,
|
|
18
|
+
`qa-team`, `solo` templates — `fcop/tasks/` → `_lifecycle/inbox/`,
|
|
19
|
+
`log/` → `_lifecycle/archive/` paths corrected to FCoP 3.0 standard.
|
|
20
|
+
- **`TEAM-OPERATING-RULES.md` / `TEAM-OPERATING-RULES.en.md`** — v2 directory
|
|
21
|
+
references replaced with v3 `_lifecycle/` lifecycle-stage model.
|
|
22
|
+
- **`README.md` / `README.en.md`** — corrected directory references to use
|
|
23
|
+
`_lifecycle/` structure.
|
|
24
|
+
- **`.cursor/rules/fcop-rules.mdc`** and **`.cursor/rules/fcop-protocol.mdc`**
|
|
25
|
+
synchronized to match the bundled versions (previously diverged to v3.0.0).
|
|
26
|
+
|
|
27
|
+
### Added — `fcop`
|
|
28
|
+
- `scripts/fcop_prerelease_check.py` — dedicated pre-release validation script
|
|
29
|
+
for the `fcop` library; checks version consistency, critical file presence,
|
|
30
|
+
rule-file frontmatter, lifecycle directory documentation, team template
|
|
31
|
+
existence, and `.cursor/rules/` sync (10 checks total).
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## [3.2.2] — 2026-05-23 (Pre-release check hardening · rule-file consistency gates)
|
|
36
|
+
|
|
37
|
+
### Added — `fcop-mcp`
|
|
38
|
+
- `prerelease_check.py` gains checks 7–10:
|
|
39
|
+
- **Check 7** — `fcop` library version == `fcop-mcp` version (lockstep guard).
|
|
40
|
+
- **Check 8** — All critical bundled rule files (`fcop-rules.mdc`,
|
|
41
|
+
`fcop-protocol.mdc`, `agent-bringup-prompt.{zh,en}.md`,
|
|
42
|
+
`letter-to-admin.{zh,en}.md`) exist and are non-empty.
|
|
43
|
+
- **Check 9** — `fcop-rules.mdc` references current major version and
|
|
44
|
+
documents the `_lifecycle/` directory structure introduced in FCoP 3.0.
|
|
45
|
+
- **Check 10** — `fcop-protocol.mdc` covers all v3 lifecycle stages
|
|
46
|
+
(`inbox → active → review → done → archive`).
|
|
47
|
+
- `CHANGELOG.md` path in `prerelease_check.py` corrected to project root
|
|
48
|
+
(`PROJECT_ROOT / "CHANGELOG.md"`) from the erroneous `mcp/CHANGELOG.md`.
|
|
49
|
+
|
|
50
|
+
### Fixed — `fcop-rules.mdc` / `fcop-protocol.mdc` (bundled)
|
|
51
|
+
- Both files updated to document the FCoP v3 `_lifecycle/` directory topology
|
|
52
|
+
and lifecycle state machine, replacing the legacy `tasks/ reports/ issues/
|
|
53
|
+
shared/ log/` references in the pre-release gate and rule-distribution layer.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
11
57
|
## [3.2.0] — 2026-05-22 (History deep archive · date-sharded `history/YYYY-MM-DD/` layer)
|
|
12
58
|
|
|
13
59
|
### Added — `fcop`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fcop
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.3
|
|
4
4
|
Summary: FCoP protocol: official Python library — Project API, task/report/issue files, filename parsing, bundled rules. PyYAML only; not an MCP server.
|
|
5
5
|
Project-URL: Homepage, https://github.com/joinwell52-AI/FCoP
|
|
6
6
|
Project-URL: Repository, https://github.com/joinwell52-AI/FCoP
|
fcop-3.2.3/README.md
ADDED
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/fcop-logo-256.png" alt="FCoP Logo" width="180" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">FCoP 鈥?File-based Coordination Protocol</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<em>The <strong>AI Agent behavior governance protocol</strong> 鈥?the runtime contract for agent collaboration on a shared filesystem.</em><br/>
|
|
9
|
+
<strong>Core invariant: <code>Filename as Protocol</code>. Folders are the message bus.</strong>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
<strong><a href="https://joinwell52-ai.github.io/FCoP/">馃寪 Project homepage</a></strong> 路
|
|
14
|
+
<a href="README.zh.md">绠€浣撲腑鏂?/a> 路
|
|
15
|
+
<a href="docs/getting-started.en.md">Getting started</a> 路
|
|
16
|
+
<a href="src/fcop/rules/_data/agent-install-prompt.en.md"><strong>馃憠 Let AI install!</strong></a> 路
|
|
17
|
+
<a href="src/fcop/rules/_data/agent-bringup-prompt.en.md"><strong>馃憠 Let AI bring up a project!</strong></a> 路
|
|
18
|
+
<a href="docs/mcp-tools.md"><strong>MCP Tools (45)</strong></a> 路
|
|
19
|
+
<a href="essays/when-ai-organizes-its-own-work.en.md">Field Report</a> 路
|
|
20
|
+
<a href="essays/fcop-natural-protocol.en.md">Natural Protocol</a> 路
|
|
21
|
+
<a href="spec/fcop-3.0-spec.md"><strong>3.0 Spec</strong></a> 路
|
|
22
|
+
<a href="adr/README.md">ADR Index</a>
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
<p align="center">
|
|
26
|
+
<a href="https://dev.to/joinwell52/we-replaced-our-multi-agent-middleware-with-a-folder-48-hours-later-the-ai-invented-6-42a9">
|
|
27
|
+
<img src="https://img.shields.io/badge/DEV-Featured%20Essay-black?style=flat-square&logo=dev.to&logoColor=white" alt="DEV Community essay" />
|
|
28
|
+
</a>
|
|
29
|
+
<a href="https://forum.cursor.com/t/fcop-let-multiple-cursor-agents-collaborate-by-filename-mit-0-infra/158447">
|
|
30
|
+
<img src="https://img.shields.io/badge/Cursor%20Forum-Discuss-0066FF?style=flat-square" alt="Cursor Community Forum" />
|
|
31
|
+
</a>
|
|
32
|
+
<a href="LICENSE">
|
|
33
|
+
<img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="MIT License" />
|
|
34
|
+
</a>
|
|
35
|
+
<a href="CHANGELOG.md">
|
|
36
|
+
<img src="https://img.shields.io/badge/release-3.2.3-brightgreen?style=flat-square" alt="3.2.3" />
|
|
37
|
+
</a>
|
|
38
|
+
<a href="spec/fcop-3.0-spec.md">
|
|
39
|
+
<img src="https://img.shields.io/badge/spec-FCoP%203.0-orange?style=flat-square" alt="FCoP 3.0 spec" />
|
|
40
|
+
</a>
|
|
41
|
+
<a href="https://registry.modelcontextprotocol.io/v0/servers?search=io.github.joinwell52-AI%2Ffcop">
|
|
42
|
+
<img src="https://img.shields.io/badge/MCP%20Registry-io.github.joinwell52--AI%2Ffcop-8A2BE2?style=flat-square" alt="Official MCP Registry: io.github.joinwell52-AI/fcop" />
|
|
43
|
+
</a>
|
|
44
|
+
<a href="https://doi.org/10.5281/zenodo.19886036">
|
|
45
|
+
<img src="https://zenodo.org/badge/DOI/10.5281/zenodo.19886036.svg" alt="DOI 10.5281/zenodo.19886036" />
|
|
46
|
+
</a>
|
|
47
|
+
</p>
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 馃啎 FCoP 3.0 is here 鈥?*Files carry protocol. Paths address state. Events replay transitions.*
|
|
52
|
+
|
|
53
|
+
<p align="center">
|
|
54
|
+
<a href="spec/fcop-3.0-spec.md">
|
|
55
|
+
<img src="assets/fcop-3.0-architecture.png" alt="FCoP 3.0 路 Canonical Architecture 鈥?Files carry protocol. Paths address state. Events replay transitions." width="900" />
|
|
56
|
+
</a>
|
|
57
|
+
</p>
|
|
58
|
+
|
|
59
|
+
> **FCoP 3.0** is the protocol's first **semantic seal**. State now lives in the filesystem itself (`_lifecycle/{inbox,active,review,done,archive}/`), events live append-only inside the file, and *custody / ownership / scheduling / runtime* are explicitly **out of scope** (Boundary Charter).
|
|
60
|
+
>
|
|
61
|
+
> **Two paths to v3:**
|
|
62
|
+
> - **New project** 鈫?`fcop init` / MCP `init_solo|init_project|create_custom_team` (鈮?3.0.2 produces v3 topology directly).
|
|
63
|
+
> - **Existing 2.x project** 鈫?`python -m fcop migrate --to-v3`.
|
|
64
|
+
>
|
|
65
|
+
> 鈿狅笍 **3.0.0 / 3.0.1 fresh-init bug**: those releases initialized projects in v2 layout (no `_lifecycle/`). 3.0.2 fixes the bug. If you initialized on 3.0.0 / 3.0.1, run `migrate --to-v3` to upgrade.
|
|
66
|
+
|
|
67
|
+
| Doc | Purpose |
|
|
68
|
+
|---|---|
|
|
69
|
+
| [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md) 路 [zh](spec/fcop-3.0-spec.zh.md) | Single-page canonical spec |
|
|
70
|
+
| [`spec/fcop-3.0-rfc.md`](spec/fcop-3.0-rfc.md) 路 [zh](spec/fcop-3.0-rfc.zh.md) | IETF-style RFC projection |
|
|
71
|
+
| [`docs/MIGRATION-3.0.md`](docs/MIGRATION-3.0.md) 路 [zh](docs/MIGRATION-3.0.zh.md) | 2.x 鈫?3.0 migration guide |
|
|
72
|
+
| [`CHANGELOG.md` `[3.0.0]`](CHANGELOG.md) | Full release notes |
|
|
73
|
+
| [`essays/the-day-we-almost-added-custody.en.md`](essays/the-day-we-almost-added-custody.en.md) 路 [zh](essays/the-day-we-almost-added-custody.md) | The decision that defined 3.0 |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Where FCoP sits in the stack
|
|
78
|
+
|
|
79
|
+
FCoP is the **behavior governance protocol layer** for multi-agent collaboration 鈥?standardizing how agents report actions, review outcomes, and operate within governed capability boundaries.
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
Application Layer CodeFlow / Cursor / Claude Desktop 鈫?business products / agent applications
|
|
83
|
+
Host Adapter Layer fcop-mcp / fcop-cli / @fcop/claude 鈫?integration adapters / host bridges
|
|
84
|
+
鈽?FCoP Protocol 鈽? Agent collaboration / reporting / 鈫?this is FCoP
|
|
85
|
+
review / capability governance /
|
|
86
|
+
event semantics / failure boundaries /
|
|
87
|
+
auditability
|
|
88
|
+
Reference Impl fcop (Python library) 鈫?protocol reference implementation
|
|
89
|
+
Execution Substrate LLM APIs / MCP tools / filesystem / 鈫?execution environment
|
|
90
|
+
process manager / operating system
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
> **FCoP governs agent behavior, not execution runtime.** 鈥?[ADR-0029](adr/ADR-0029-fcop-behavior-governance-charter.md)
|
|
94
|
+
|
|
95
|
+
v1.0 stabilises the minimum semantic contract for the **seven core concepts** above. Spec is stable; encodings are open: the *IPC Surface* (TASK / REPORT / ISSUE / REVIEW) is strongly typed, while the *Open Knowledge Surface* (`shared/` + `{ALL-CAPS-PREFIX}-{slug}.md`) leaves vocabulary open for agents to invent 鈥?see [ADR-0021](adr/ADR-0021-encoding-abstraction.md).
|
|
96
|
+
|
|
97
|
+
鈫?**Start here**: [`docs/getting-started.md`](docs/getting-started.md) 路 [`docs/getting-started.en.md`](docs/getting-started.en.md)
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## The one-paragraph pitch
|
|
102
|
+
|
|
103
|
+
Most multi-agent frameworks lean on message queues, databases, or custom RPC layers. FCoP throws all of that away and keeps only the **filesystem**:
|
|
104
|
+
|
|
105
|
+
- **Directories are statuses.** `tasks/`, `reports/`, `issues/`, `log/` 鈥?moving a file between them _is_ the state transition.
|
|
106
|
+
- **Filenames are routing.** `TASK-20260418-001-PM-to-DEV.md` tells you the sender, recipient, kind, and sequence at a glance.
|
|
107
|
+
- **Contents are payload.** Markdown + a small YAML frontmatter. Agents read and write it the same way humans do.
|
|
108
|
+
- **`os.rename()` is the only sync primitive.** POSIX guarantees atomicity within a mount point 鈥?no locks, no brokers, no consensus.
|
|
109
|
+
|
|
110
|
+
That's it. No database. No message queue. No custom daemon. You can `ls` the entire system state. You can `git log` the entire collaboration history.
|
|
111
|
+
|
|
112
|
+
> If TCP is "bytes over wires," **FCoP is "tasks over folders."**
|
|
113
|
+
|
|
114
|
+
> In engineering terms, you get a **serializable, versionable collaboration surface** instead of relying on **proprietary, heavyweight infrastructure**.
|
|
115
|
+
|
|
116
|
+
## Why should you care?
|
|
117
|
+
|
|
118
|
+
Because agents are easier to supervise when you can literally **see** what they're doing.
|
|
119
|
+
|
|
120
|
+
We ran a 4-agent team (PM / DEV / QA / OPS) for 48 hours on this protocol and watched the agents invent **six coordination patterns we never wrote down** 鈥?team broadcasts, role slots, shared documents, subtask batches, self-explaining READMEs, and traceability frontmatter. Each pattern showed up as _new filenames_ 鈥?no code changes required.
|
|
121
|
+
|
|
122
|
+
Then something stranger happened: a **single** agent, on an **unrelated** task (generating an AI music video in a folder with **no connection to any then-open project workspace**), spontaneously split itself into PM / DEV / ADMIN and wrote four FCoP-format memos to itself 鈥?then cited and **sublimated** our scattered rules into a single moral principle we had not written anywhere.
|
|
123
|
+
|
|
124
|
+
Both stories are written up as field reports in the essays index below.
|
|
125
|
+
|
|
126
|
+
## Essays 路 field reports from the wild
|
|
127
|
+
|
|
128
|
+
| # | Title | Versions | One-liner |
|
|
129
|
+
|---|---|---|---|
|
|
130
|
+
| 01 | **When AI Organizes Its Own Work** | [English](essays/when-ai-organizes-its-own-work.en.md) 路 [涓枃 (GitHub)](essays/when-ai-organizes-its-own-work.md) 路 [涓枃 (CSDN)](https://blog.csdn.net/m0_51507544/article/details/160344932) | A 4-agent team (PM / DEV / QA / OPS), 48 hours, nothing but a folder 鈥?and six coordination patterns we never wrote down. |
|
|
131
|
+
| 02 | **An unexplainable thing I saw: the agent didn't just comply with rules 鈥?it *endorsed* them** | [GitHub 涓枃](essays/fcop-natural-protocol.md) 路 [GitHub English](essays/fcop-natural-protocol.en.md) 路 [CSDN 涓枃](https://blog.csdn.net/m0_51507544/article/details/160345043) 路 [Dev.to](https://dev.to/joinwell52/an-unexplainable-thing-i-saw-the-agent-didnt-just-comply-with-rules-it-endorsed-them-5ecd) 路 [Cursor Forum](https://forum.cursor.com/t/i-asked-cursor-to-make-a-video-it-wrote-itself-4-protocol-memos-field-report-on-rule-internalization/158524) | A single agent, on a completely unrelated task, spontaneously split into 4 FCoP roles and *sublimated* our scattered rules into one principle we had never written. Ships with a [full evidence archive](essays/fcop-natural-protocol-evidence/) (4 screenshots, 4 memos, raw JSONL transcript). |
|
|
132
|
+
| 03 | **Why the Natural Protocol Holds Up 鈥?FCoP's lineage from TMPA** | [GitHub 涓枃](essays/fcop-tmpa-lineage.md) 路 [GitHub English](essays/fcop-tmpa-lineage.en.md) | Companion to essay 02. Where that one shows *that* the principle emerged, this one explains *why it holds up*: FCoP was extracted from TMPA (a multi-AI architecture spec whose core bet is replacing distributed coordination with a plain-text temporal sequence), and the agent's sentence is the minimal-viable-form of an AI ethics mandate already written there. |
|
|
133
|
+
| 04 | **Saying "No" Is the Hardest Thing for an LLM 鈥?FCoP Gives It Grammar** | [GitHub English](essays/when-ai-vacates-its-own-seat.en.md) 路 [GitHub 涓枃](essays/when-ai-vacates-its-own-seat.md) 路 [Evidence archive](essays/when-ai-vacates-its-own-seat-evidence/INDEX.md) 路 [CSDN 涓枃](https://blog.csdn.net/m0_51507544/article/details/160513899) 路 [Dev.to](https://dev.to/joinwell52/saying-no-is-the-hardest-thing-for-an-llm-fcop-gives-it-grammar-3ccd) 路 [Cursor Forum](https://forum.cursor.com/t/saying-no-is-the-hardest-thing-for-an-llm-fcop-gives-it-grammar/159037) | One machine, two Cursor sessions, two GPT-5 minor versions (5.4 and 5.5). After I told the original PM "I went and found a deputy PM," it stepped down on its own 鈥?all the way to UNBOUND. Meanwhile the new `PM.TEMP` walked an undocumented protocol path with one body line: "*PM.TEMP acting as PM, kept for FCoP tool compatibility*." I expected a conflict. None happened 鈥?the agents finished the unwritten parts of the spec themselves. Ships with 15 screenshots + 2 full JSONL transcripts. |
|
|
134
|
+
| 05 | **Tutorial: From Solo to a 2-Person AI Crew 鈥?Disciplining the AI Team with FCoP-MCP** (two parallel case studies) | English (Tetris case): [`tetris-solo-to-duo.en.md`](docs/tutorials/tetris-solo-to-duo.en.md) 路 [Dev.to](https://dev.to/joinwell52/free-open-source-multi-agent-hands-on-how-to-command-agents-fcop-mcp-brings-discipline-to-1j3j) 路 [Cursor Forum](https://forum.cursor.com/t/free-open-source-multi-agent-hands-on-how-to-command-agents-fcop-mcp-brings-discipline-to-ai-teams/159329) 路 涓枃璇戞湰锛堜縿缃楁柉鏂瑰潡妗堜緥锛? [`tetris-solo-to-duo.zh.md`](docs/tutorials/tetris-solo-to-duo.zh.md) 路 涓枃姣嶈鍘熷垱锛堣椽鍚冭泧妗堜緥锛? [`snake-solo-to-duo.zh.md`](docs/tutorials/snake-solo-to-duo.zh.md) 路 [CSDN 涓枃鐗圿(https://blog.csdn.net/m0_51507544/article/details/160603953) | The first **tutorial-style** entry in this index, shipping as **two parallel case studies 鈥?the protocol is the same, the games and the live easter egg are different**. Both are 45-minute hands-on dogfoods: get the agent to install `fcop-mcp` in Cursor, ship a working game in solo mode, switch to a 2-person team where PLANNER designs and CODER implements a creative variant, then read the disk. The **Chinese case** uses Snake 鈫?`NEON ORBIT` (original-themed) and captures an actual PLANNER-impersonating-CODER easter egg from the 0.6.x era. The **English case** uses Tetris 鈫?`Nebula Stack` (solo) 鈫?`Comet Loom` (team), and adds a full **review-and-rework cycle** (ADMIN plays v1, finds 3 blocking defects, bounces it back; PLANNER writes TASK-006 with a new `Verification Requirements` section; CODER ships v2) plus an end-of-day on-the-record interview where both agents are asked what they think of the protocol. 22 dogfood screenshots, 14 TASK/REPORT files, 8 silent role-switch evidence files, 2 game artefacts, 2 verbatim agent transcripts 鈥?all archived under [`docs/tutorials/assets/tetris-en/`](docs/tutorials/assets/tetris-en/). |
|
|
135
|
+
| 06 | **What the Agents Say About FCoP, When You Ask Them** | [GitHub English](essays/what-agents-say-about-fcop.en.md) 路 [GitHub 涓枃](essays/what-agents-say-about-fcop.md) 路 [Evidence archive (Tetris-en dogfood)](docs/tutorials/assets/tetris-en/) 路 [CSDN 涓枃](https://blog.csdn.net/m0_51507544/article/details/160636177) 路 [Dev.to](https://dev.to/joinwell52/what-the-agents-say-about-fcop-when-you-ask-them-3ajk) 路 [Cursor Forum](https://forum.cursor.com/t/what-the-agents-say-about-fcop-when-you-ask-them-two-field-interviews-at-the-end-of-an-english-dogfood/159368) | The third class of *"agents endorse FCoP"* evidence, after [essay 02](essays/fcop-natural-protocol.en.md) (**unprompted, off-task**) and [essay 04](essays/when-ai-vacates-its-own-seat.en.md) (**conflict-forced**): now **directly asked**. At the end of the English Tetris dogfood (companion to the row-05 tutorial), both agents (PLANNER and CODER) were asked agent-perspective takes on FCoP 鈥?no marketing tone. PLANNER named the RLHF instinct it had to fight ("follow latest instruction") to honour FCoP's role lock and called eight of its own `role-switch` evidence files **true positives**, against its own operational convenience. CODER admitted it had a protocol primitive (`write_issue`) it didn't use, traced the v1 defect to that exact uncovered space, and filed PR-grade product feedback on the protocol. Three different elicitation conditions, the same phenomenon 鈥?agents endorse FCoP when given the room to. Also includes a small empirical observation: across the entire 45-minute dogfood, ADMIN's two most-used phrases were **"Start work."** and **"Inspection."** |
|
|
136
|
+
| 07 | **褰?agent 浠庤嚜宸辩殑娈嬮涓涔?* | [GitHub 涓枃](essays/when-agents-learn-from-their-own-wreckage.md) 路 [GitHub English](essays/when-agents-learn-from-their-own-wreckage.en.md) 路 [CSDN 涓枃](https://blog.csdn.net/m0_51507544/article/details/161028380) 路 [Dev.to](https://dev.to/joinwell52/when-agents-learn-from-their-own-wreckage-45p2) | codeflow 椤圭洰涓€鏃?14 涓?agent 娑岀幇鐜板満鎶ュ憡锛?026-05-12锛夛細USER HOME 鍏ㄥ眬姹℃煋 / GATE 鎻忚堪鑷懡涓?/ `supersedes:` 瀛楁鐜板満鍙戞槑鈥斺€斾互鍙婂崗璁浣曞湪闆舵宕╂簝鐨勬儏鍐典笅锛屼互灏忔椂绾ч€熷害灏嗗畠浠叏閮ㄥ弽鍚戝惛鏀躲€?|
|
|
137
|
+
| 08 | **鍗忚涓轰粈涔堢煭锛屽巻鍙蹭负浠€涔堥暱** | [GitHub 涓枃](essays/why-the-protocol-stays-short.md) 路 [GitHub English](essays/why-the-protocol-stays-short.en.md) | 涓€浠界粰鍗忚缁存姢鑰呯殑璁捐鍝插绛旀锛?杩欐牱鐨勬秾鐜颁細涓嶄細娌℃湁姝㈠锛?鈥斺€旂煭绛旓細浼氭敹鏁涗絾涓嶄細鍋溿€傚洓绫绘秾鐜扮殑澶勭悊璺緞銆佷笁鏉$粨鏋勫姏瀛︿负浣曡兘璁╁崗璁鏋朵笉琚秾鐜板帇鍨紝浠ュ強"鍗忚鐭槸涓轰簡璁╁巻鍙茶兘鏃犻檺闀?鐨勫簳灞傞€昏緫銆?|
|
|
138
|
+
| 09 | **褰?validator 鎾炲悜鑷繁鐨勯暅鍍?* | [GitHub 涓枃](essays/gate-design-pitfalls-case-studies.md) 路 [GitHub English](essays/gate-design-pitfalls-case-studies.en.md) | 浠?codeflow OPS I-14 鐪?validator-validates-itself 鍙嶆ā寮忥細GATE 鍦ㄦ鏌?staged diff 鏃跺懡涓簡 GATE 鎻忚堪鏈韩锛屽嚑鍒嗛挓鍚庤 OPS 鑷籂鈥斺€旇繖涓€绫婚櫡闃辩殑绯荤粺鎬цВ鍓栦笌"璇箟鍖栧疄璇?鏍规不濮垮娍锛屼互鍙婂畠濡備綍鎴愪负 `fcop-protocol.mdc 搂GATE Design Pitfalls` 鐨勬簮澶存渚嬨€?|
|
|
139
|
+
| 10 | **涓€琛?frontmatter 鐨勬梾绋?* | [GitHub 涓枃](essays/the-supersedes-field-story.md) 路 [GitHub English](essays/the-supersedes-field-story.en.md) | `supersedes:` 瀛楁浠庝竴娆″崗璁袱闅剧幇鍦哄彂鏄庡埌 `ipc-envelope.schema.json` 姝e紡瀛楁鐨勪袱灏忔椂鏃呯▼锛歊ule 5锛坅ppend-only锛? Rule 6锛坮eciprocity锛? Rule 0.c锛坱ruthful锛変笁鏉¤鍒欏悓鏃舵垚绔嬫椂锛宎gent 鐢ㄤ竴琛?YAML 鑷繁瑙d簡鍥板眬鈥斺€旇繖鏉¤矾寰勫睍绀?FCoP 娑岀幇钀藉湴鐨勬渶浣庢垚鏈Э鍔裤€?|
|
|
140
|
+
| 11 | **鐪嬶紝浣嗕笉鍔ㄦ墜** | [GitHub 涓枃](essays/looking-without-touching.md) 路 [GitHub English](essays/looking-without-touching.en.md) 路 [CSDN 涓枃](https://blog.csdn.net/m0_51507544/article/details/161028161) | FCoP 涓夊眰璇箟鎵ц閾剧鏅細`fcop_audit()` 涓轰粈涔?鍙湅涓嶆敼"鈥斺€擫1 妫€娴?/ L2 瑙i噴 / L3 鏂囨。涓夊眰鎶?鐪嬭"鍜?鍔ㄦ墜"鍒囧紑锛屼骇鍑?`INSPECTION.md`锛堝缓璁潪鍛戒护锛夛紝鎵ц鏉冪暀缁欎汉銆俙adr/FCoP-semantic-execution-chain.md` 鐨勭鏅増銆?|
|
|
141
|
+
| 12 | **浜斿ぇ AI 妯″瀷鐪间腑鐨?FCoP** | [GitHub 涓枃](essays/what-five-ai-models-say-about-fcop.md) 路 [GitHub English](essays/what-five-ai-models-say-about-fcop.en.md) 路 [Cursor Forum](https://forum.cursor.com/t/what-5-ai-models-say-about-fcop-from-their-own-agent-perspective-category-showcase/160506) | 鎶?FCoP 鏍稿績鏂囨。鍠傜粰 ChatGPT / Claude / DeepSeek / Grok / 璞嗗寘锛屽彧闂竴涓棶棰橈細"浣犳槸 agent锛屼綘鎬庝箞鐪嬭繖濂楀崗璁紵"鈥斺€斾簲绉嶆埅鐒朵笉鍚岀殑鍐呴儴瑙嗚锛圕hatGPT 璋堣韩浠藉悎娉曟€с€丆laude 璋堣瘹瀹炶竟鐣屻€丏eepSeek 璋堜綋闈㈢敓瀛樸€丟rok 鍋氭妧鏈瘎瀹°€佽眴鍖呰璁捐鍝插锛夛紝浠ュ強瀹冧滑涔嬮棿鏈€鏈夋剰鎬濈殑鍒嗘銆?|
|
|
142
|
+
| 13 | **Evolution, Reverse Absorption / 婕斿寲锛屽弽鍚戝惛鏀?* | [GitHub 涓枃](essays/evolution-reverse-absorption.md) 路 [GitHub English](essays/evolution-reverse-absorption.en.md) | Protocol philosophy 2.0 visual declaration: FCoP graduates from a single execution-chain diagram (essay 11 *Looking, not Touching*) to a **two-diagram era** 鈥?adding an evolution-loop diagram (a 7-step semantic evolution loop) plus the companion [ADR-0034](adr/ADR-0034-fcop-internal-external-document-convention.md), which codifies the 4-layer emergence pattern, internal/external document convention, and the reverse-absorption mechanism. Twin sibling to essay 11. |
|
|
143
|
+
| 14 | **褰?Agent 绗竴娆¤嚜宸辨嬁璧峰伐鍏?/ When the Agent First Picked Up Its Own Tools** | [GitHub 涓枃](essays/when-the-agent-picked-up-its-tools.md) 路 [GitHub English](essays/when-the-agent-picked-up-its-tools.en.md) 路 [Cursor Forum](https://forum.cursor.com/t/when-the-agent-first-picked-up-its-own-tools-cursor-agent-sdk-fcop-from-passive-scanning-to-active-communication/160505) 路 [Dev.to](https://dev.to/joinwell52/when-the-agent-first-picked-up-its-own-tools-4b63) 路 [CSDN](https://blog.csdn.net/m0_51507544/article/details/161057749) | `tool_calls_count: 0 鈫?7` 鐨勭獊鐮寸幇鍦猴細Cursor Forum 鍔熻兘璇锋眰 鈫?Colin 鎺ㄨ崘 Agent SDK 鈫?CodeFlow 璇炵敓 鈫?stub 妯″紡鍗″叧 鈫?MCP 娉ㄥ叆 + 瑙掕壊涓婁笅鏂囧弻淇濋櫓 鈫?2026-05-13 14:55锛孌EV-01 鍦?55 绉掑唴鑷富璋冪敤 7 娆?fcop-mcp 宸ュ叿锛屽啓鍑虹涓€浠藉畬鏁?FCoP report銆侳CoP 鑷韩涔熷湪杩欐绐佺牬涓畬鎴愯湑鍙橈細浠?鍗忎綔鎵嬪唽"鍗囩骇涓?鍙墽琛岀殑鍗忎綔鍩虹璁炬柦"銆?|
|
|
144
|
+
> New reports are welcome. If you tried FCoP in your own setup and something surprising happened 鈥?good or bad 鈥?open an issue or a PR against `essays/`. The protocol evolves through field notes, not committee edits.
|
|
145
|
+
|
|
146
|
+
## Repository layout
|
|
147
|
+
|
|
148
|
+
The repo is not *only* Markdown specs: the PyPI package **`fcop`** lives
|
|
149
|
+
under `src/fcop/`, **`fcop-mcp`** is a separate subproject under `mcp/`, and
|
|
150
|
+
there are `tests/`, `docs/`, and `adr/` alongside the essays and specs.
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
FCoP/
|
|
154
|
+
鈹溾攢鈹€ src/fcop/ # `fcop` package: Project API; `rules/_data/`
|
|
155
|
+
鈹? # bundles fcop-rules / fcop-protocol (templates for `init` deploy)
|
|
156
|
+
鈹溾攢鈹€ mcp/ # `fcop-mcp` subproject (MCP server; has its own pyproject)
|
|
157
|
+
鈹溾攢鈹€ tests/ # pytest for `fcop` and `fcop-mcp`
|
|
158
|
+
鈹溾攢鈹€ spec/ # Normative spec (see spec/README.md)
|
|
159
|
+
鈹? 鈹溾攢鈹€ fcop-3.0-spec.md # 鈽?English normative spec (FCoP 3.0, canonical)
|
|
160
|
+
鈹? 鈹溾攢鈹€ fcop-3.0-spec.zh.md # Chinese parallel (informative)
|
|
161
|
+
鈹? 鈹溾攢鈹€ fcop-3.0-rfc.md # IETF-style RFC edition (English)
|
|
162
|
+
鈹? 鈹溾攢鈹€ fcop-3.0-rfc.zh.md # IETF-style RFC edition (Chinese)
|
|
163
|
+
鈹? 鈹溾攢鈹€ schemas/ # 8 JSON Schemas (machine-readable)
|
|
164
|
+
鈹? 鈹斺攢鈹€ archived/ # v1.0 / v1.1 / 0.7.x spec drafts (superseded, retained for history)
|
|
165
|
+
鈹溾攢鈹€ docs/ # Getting-started, migrations, releases, MCP tools
|
|
166
|
+
鈹? 鈹斺攢鈹€ getting-started.en.md # 鈫?start here if new to FCoP
|
|
167
|
+
鈹溾攢鈹€ adr/ # Architecture decision records (ADR-0001..0022)
|
|
168
|
+
鈹溾攢鈹€ .github/workflows/ # CI
|
|
169
|
+
鈹溾攢鈹€ pyproject.toml # Root `fcop` package and tooling
|
|
170
|
+
鈹溾攢鈹€ essays/
|
|
171
|
+
鈹? 鈹溾攢鈹€ when-ai-organizes-its-own-work.en.md
|
|
172
|
+
鈹? 鈹溾攢鈹€ when-ai-organizes-its-own-work.md
|
|
173
|
+
鈹? 鈹溾攢鈹€ fcop-natural-protocol.en.md
|
|
174
|
+
鈹? 鈹溾攢鈹€ fcop-natural-protocol.md
|
|
175
|
+
鈹? 鈹溾攢鈹€ fcop-natural-protocol-evidence/
|
|
176
|
+
鈹? 鈹溾攢鈹€ fcop-tmpa-lineage.en.md
|
|
177
|
+
鈹? 鈹溾攢鈹€ fcop-tmpa-lineage.md
|
|
178
|
+
鈹? 鈹溾攢鈹€ when-ai-vacates-its-own-seat.en.md
|
|
179
|
+
鈹? 鈹溾攢鈹€ when-ai-vacates-its-own-seat.md
|
|
180
|
+
鈹? 鈹溾攢鈹€ when-ai-vacates-its-own-seat-evidence/
|
|
181
|
+
鈹? 鈹溾攢鈹€ what-agents-say-about-fcop.en.md
|
|
182
|
+
鈹? 鈹斺攢鈹€ what-agents-say-about-fcop.md
|
|
183
|
+
鈹溾攢鈹€ examples/workspace-example/
|
|
184
|
+
鈹溾攢鈹€ integrations/windows-file-association/
|
|
185
|
+
鈹溾攢鈹€ assets/
|
|
186
|
+
鈹溾攢鈹€ LICENSE
|
|
187
|
+
鈹斺攢鈹€ README.md / README.zh.md
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## 30-second quickstart
|
|
191
|
+
|
|
192
|
+
FCoP is **adopted**, not a long-running daemon. The current **rule split**
|
|
193
|
+
is **[`fcop-rules.mdc`](src/fcop/rules/_data/fcop-rules.mdc)** (charter) plus
|
|
194
|
+
**[`fcop-protocol.mdc`](src/fcop/rules/_data/fcop-protocol.mdc)**
|
|
195
|
+
(commentary) 鈥?both belong under **`.cursor/rules/`**. The single file
|
|
196
|
+
[`spec/codeflow-core.mdc`](spec/codeflow-core.mdc) is a **deprecated stub** so
|
|
197
|
+
old links do not 404 鈥?it is *not* the full protocol text for 0.6+.
|
|
198
|
+
|
|
199
|
+
**Path A 鈥?`fcop` library (recommended).** One shot creates
|
|
200
|
+
`fcop/` and `fcop.json`:
|
|
201
|
+
|
|
202
|
+
```python
|
|
203
|
+
from fcop import Project
|
|
204
|
+
Project(".").init() # default dev-team; use .init_solo() for single-AI
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Path B 鈥?rules only, no Python.** Copy the two `.mdc` files from this repo
|
|
208
|
+
into `.cursor/rules/`. If the tree is empty, at least create the five
|
|
209
|
+
buckets the library uses:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
mkdir -p fcop/{tasks,reports,issues,shared,log}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
With the rules in place, agents know how to claim work, name reports, raise
|
|
216
|
+
issues, and stay out of other roles' files. Deeper structure and team
|
|
217
|
+
templates: packages below and [`examples/workspace-example/`](examples/workspace-example/).
|
|
218
|
+
|
|
219
|
+
## Python SDK & MCP server (optional)
|
|
220
|
+
|
|
221
|
+
The protocol is filesystem-first. **If you need** programmatic task/report/issue
|
|
222
|
+
I/O or an IDE bridge, use the two official PyPI packages (since `0.6.0`):
|
|
223
|
+
|
|
224
|
+
| Package | Install | Purpose | Depends on |
|
|
225
|
+
|---|---|---|---|
|
|
226
|
+
| [`fcop`](https://pypi.org/project/fcop/) | `pip install fcop` | Pure Python library. Read/write tasks, reports, issues, reviews programmatically. Zero MCP dependency. | `pyyaml` |
|
|
227
|
+
| [`fcop-mcp`](https://pypi.org/project/fcop-mcp/) | `pip install fcop-mcp` | MCP server. Exposes the library over stdio so Cursor / Claude Desktop can call it as tools. | `fcop>=1.1`, `fastmcp`, `websockets` |
|
|
228
|
+
|
|
229
|
+
**Pointers** (one row each, no version baked in):
|
|
230
|
+
|
|
231
|
+
| You want to鈥?| Go to |
|
|
232
|
+
|---|---|
|
|
233
|
+
| Install `fcop-mcp` into Cursor / Claude Desktop step-by-step | [`mcp/README.md`](mcp/README.md) |
|
|
234
|
+
| Have an agent do the install for you (zero JSON editing) | [`agent-install-prompt.en.md`](src/fcop/rules/_data/agent-install-prompt.en.md) 路 [涓枃](src/fcop/rules/_data/agent-install-prompt.zh.md) (also live as MCP resource `fcop://prompt/install`) |
|
|
235
|
+
| Upgrade an existing `0.6.x` install (both packages in lockstep + protocol-rule refresh) | [`docs/upgrade-fcop-mcp.md`](docs/upgrade-fcop-mcp.md) |
|
|
236
|
+
| Browse all 45 MCP tools and 14 resources by category | [`docs/mcp-tools.md`](docs/mcp-tools.md) |
|
|
237
|
+
| Read the per-release record (what changed when, why) | [`CHANGELOG.md`](CHANGELOG.md) and [`docs/releases/`](docs/releases/) |
|
|
238
|
+
|
|
239
|
+
**Recent releases** (full notes in [`docs/releases/`](docs/releases/)):
|
|
240
|
+
|
|
241
|
+
| Version | One-line |
|
|
242
|
+
|---|---|
|
|
243
|
+
| **3.2.2** ([CHANGELOG](CHANGELOG.md)) | **v3.2.2 鈥?Deep history archiving + 10 new MCP tools (35 鈫?45).** Adds history/YYYY-MM-DD/ date-sharded long-term archive layer; new tools: create_task, rchive_to_history, ulk_archive_to_history, list_history, get_history_stats, search_history, move_to_history, cleanup_history, export_history, import_from_history. Manual and scheduled archiving of completed task-report pairs into history/. Both cop and cop-mcp align to 3.2.2 (lockstep). |
|
|
244
|
+
| **3.0.2** ([CHANGELOG](CHANGELOG.md)) | **v3.0.2 鈥?Init topology fix.** `Project._apply_init` in 3.0.0 / 3.0.1 only created the legacy v2 buckets and skipped the mandatory v3 `_lifecycle/{inbox,active,review,done,archive}/` layer (spec 搂1.1). 3.0.2 makes fresh init produce the v3 topology directly (and stops creating the superseded v2 `tasks/` / `log/` buckets); `core.events.scan_workspace` and `Project.role_occupancy()` now read from `_lifecycle/` for v3 projects. New audit scan `_scan_lifecycle_topology_compliance()` (D9): P0 when initialised projects miss both `_lifecycle/` and v2 content; P1 when both topologies coexist (suggests `migrate --to-v3`). MCP tool descriptors (`init_solo` / `init_project` / `create_custom_team`) updated. 1209 tests green. Patch (SemVer): no API surface changes vs 3.0.1 鈥?init was simply doing the wrong thing. |
|
|
245
|
+
| **3.0.1** ([CHANGELOG](CHANGELOG.md)) | **v3.0.1 鈥?Path-consolidation patch.** Pure docs/metadata patch with no code-logic changes: after v3.0.0 moved historical v1.0/v1.1 spec drafts to `spec/archived/`, this patch repairs broken links scattered across `AGENTS.md` / `CLAUDE.md` / packaged Cursor rules / MCP server docstrings / two JSON Schema `description` fields, unifying them on `spec/archived/fcop-runtime-protocol-v1.0.{md,zh.md}` (with pointers to the current canonical `spec/fcop-3.0-spec.md`). `fcop-mcp`'s `fcop://spec` / `fcop://spec/en` docstrings are corrected to reflect the wheel's actual packaged content (`fcop-spec-v1.1.{lang}.md`). Historical artifacts (TASK / REPORT / ADR / release notes / migration docs) are preserved verbatim per ADR-0036 "history is not rewritten". 1202 tests green. |
|
|
246
|
+
| **3.0.0** ([CHANGELOG](CHANGELOG.md)) | **v3.0 鈥?Protocol-level MAJOR 路 "folders-as-state" era.** A complete rewrite of the FCoP protocol body 鈥?canonical two-layer (per [ADR-0040](adr/ADR-0040-canonical-one-liner-two-layer-convention.md)): **Layer 1** "Files are the protocol; location defines state; events record history" + **Layer 2** semantic ontology. Adds `_lifecycle/{inbox,active,review,done,archive}/` five-bucket directory topology (**incompatible with 2.x**, requires `fcop migrate --to-v3`); three rule sets (State Layer Rule A/B/C 路 Event Layer Rule E/F/G 路 Boundary Charter); 7 allowed transitions 鈥?anything off-table MUST be rejected by implementations; write-then-rename atomicity (events ARE migrations, migrations ARE events); ADR-0037 Custody Layer **was withdrawn during RFC review and never reached Accepted** (custody is not a protocol layer; preserved as a NOTE-style derivative explanation). Adds [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md) single-page canonical + IETF-style RFC parallel + Chinese parallel + [`docs/MIGRATION-3.0.md`](docs/MIGRATION-3.0.md) migration guide. |
|
|
247
|
+
| **2.0.2** ([CHANGELOG](CHANGELOG.md)) | **v2.0.2 鈥?`fcop-mcp` officially registered to the [MCP registry](https://registry.modelcontextprotocol.io/) (`io.github.joinwell52-AI/fcop`).** Backed by Anthropic + GitHub + Microsoft's joint registry, `fcop-mcp` is now discoverable by Claude Desktop / Cursor / PulseMCP / every MCP-compatible client out of the box (`uvx fcop-mcp` one-liner install). Double-pack lockstep version bump (per ADR-0002): `fcop` library code is **unchanged** from v2.0.0; the bump aligns both package version numbers and consolidates the fcop-mcp@2.0.1 MCP-metadata patch that landed the same day. Also lands the **release+backup one-shot SOP** 鈥?`RULES-release-file-inventory.md` (12-category), `RULES-mcp-registry-release.md` (3-step path), and the append-only backup mirror at `joinwell52-AI/FCoP-backup`. |
|
|
248
|
+
| **2.0.0** ([CHANGELOG](CHANGELOG.md)) | **v2.0 鈥?"Two-diagram era" philosophical major release.** Same execution surface as v1.x (per ADR-0003 additive); the major bump records that FCoP is now defined by **two** diagrams together: the **execution stack** (5-layer vertical, stable since v1.x) *and* the **FCoP Semantic Evolution Loop** (7-node closed loop 鈥?emerge 鈫?observe 鈫?propose 鈫?review 鈫?merge 鈫?deploy 鈫?reflect, newly canonicalised). Adds Rule 4.6 (`fcop/internal/` vs `docs/` + `essays/` soft convention with `internal-only` declaration v1), `Project.init(deploy_internal_template=...)` opt-in, P3 (suggestion) audit severity, and a bundled `fcop_audit` exemption list (`log/`, `_archive/`, `legacy-non-protocol/`) that fixes three upstream bugs surfaced by codeflow cross-project patrol (ISSUE-008/009/010). ADR-0034. |
|
|
249
|
+
| **1.6.0** ([CHANGELOG](CHANGELOG.md)) | **v1.6 鈥?Trailing-slug filename adoption (ADR-0033).** Long filenames (`TASK-20260512-025-PM-to-OPS-phase-a-fix-naming.md`) are now first-class 鈥?codeflow's 22+ self-emerged examples absorbed into the grammar. Slug does **not** participate in routing; it's a human-readable label. 100% backward-compatible (0 regressions across 1057 tests). |
|
|
250
|
+
| **1.5.0** ([CHANGELOG](CHANGELOG.md)) | **v1.5 鈥?Protocol-awareness sync + `RULE_DOC_DRIFT`.** 84 role/team docs synced to v1.4 protocol surface (REVIEW envelope / `risk_level` / `fcop_audit` / `supersedes:`); new `Project._scan_outdated_role_docs()` with `RULE_DOC_DRIFT` (P1) violation type. |
|
|
251
|
+
| **1.4.0** ([notes](docs/releases/1.4.0.md)) | **v1.4 鈥?Write-side bind enforcement (P0 security) + `supersedes:` field.** 15 write-side MCP tools refuse cwd fallback (`WriteRefused`); Protected Path deny-list (HOME / APPDATA / drive roots / Unix system dirs); new `supersedes:` frontmatter field (all envelopes) + `## GATE Design Pitfalls` commentary (`fcop_protocol_version 2.2.0`). |
|
|
252
|
+
| **1.3.0** ([notes](docs/releases/1.3.0.md)) | **v1.3 鈥?Governance Alert Layer + Protocol Compiler.** GAL (ADR-0031): 3 drift signals (S1/S3/S4), FCoP-Rule-G1, 2 new alert tools (`fcop_list_alerts`, `fcop_create_alert`). fcop_audit (ADR-0032): three-scenario protocol inspection compiler, 6 scan methods, INSPECTION report with Execution Block. 35 MCP tools total. |
|
|
253
|
+
| **1.2.1** ([notes](docs/releases/1.2.1.md)) | **v1.2 鈥?Capability Governance pillar.** `FCoPGovernanceMiddleware` wraps every MCP tool call: Skill Resolver 鈫?Risk Tagging (Safe / Sensitive / Critical) 鈫?append-only `fcop_events.jsonl` audit log. 2 new MCP tools (`list_governance_events`, `get_governance_summary`). `fcop_check()` gains governance event summary. Both `fcop` and `fcop-mcp` align to `1.2.1` (lockstep). ADR-0030-bis. |
|
|
254
|
+
| **1.1.0** ([CHANGELOG](CHANGELOG.md)) | **v1.1 鈥?Agent.layer governance contracts + Task.risk_level + Review.needs_human + HumanApproval + Skill.tools[] risk metadata.** 5 new ADRs (0023鈥?027), 4 new MCP tools (`write_review`, `list_reviews`, `read_review`, `mark_human_approved`), `write_task` gains `risk_level` param, new `skill.schema.json`. Fully backward-compatible. |
|
|
255
|
+
| **1.0.1** | Spec files bundled in wheel (`get_spec()`); `fcop://spec` MCP resource; workspace paths migrated `docs/agents/` 鈫?`fcop/`; CI green. |
|
|
256
|
+
| **1.0.0** | Seven core concepts stabilised: Agent, Encoding, IPC, Event, Failure, Boundary, Audit. JSON Schema for all 7. See [release notes](docs/releases/1.0.0.md). |
|
|
257
|
+
| **0.7.2** ([notes](docs/releases/0.7.2.md)) | Metadata patch: fixes `fcop-rules.mdc` frontmatter stale at `1.7.0` (body was already `1.8.0`); adds frontmatter鈫攂ody consistency tests. **No protocol or API change.** |
|
|
258
|
+
|
|
259
|
+
> **Watch out 鈥?wrong `fcop` on PyPI shadows the library.** Both packages here are published from **this** repository. If `from fcop import Project, Issue` fails after `pip install fcop`, you most likely installed an unrelated `fcop` distribution or another local project shadows the library. Fix: clean venv + reinstall both packages from PyPI in lockstep. The verify commands are in [`mcp/README.md`](mcp/README.md).
|
|
260
|
+
|
|
261
|
+
**Library** 鈥?use from any Python script or agent:
|
|
262
|
+
|
|
263
|
+
```python
|
|
264
|
+
from fcop import Project
|
|
265
|
+
|
|
266
|
+
proj = Project(".") # project root; no fcop.json until init
|
|
267
|
+
proj.init() # dirs + shared/ + log/ + writes fcop.json
|
|
268
|
+
task = proj.write_task(sender="PM", recipient="DEV", priority="P1",
|
|
269
|
+
subject="Add auth middleware", body="...",
|
|
270
|
+
risk_level="high") # v1.1: triggers needs_human review gate
|
|
271
|
+
print(proj.list_tasks(recipient="DEV"))
|
|
272
|
+
|
|
273
|
+
# v1.1 review + human approval flow
|
|
274
|
+
review = proj.write_review(reviewer_role="ADMIN", subject_type="task",
|
|
275
|
+
subject_ref=task.filename, decision="needs_human",
|
|
276
|
+
rationale="Irreversible infra change 鈥?escalate.")
|
|
277
|
+
proj.mark_human_approved(review.review_id, approver="ADMIN",
|
|
278
|
+
decision="approve", channel="cli")
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
**MCP server** 鈥?add to `mcp.json` (Cursor) or `claude_desktop_config.json`:
|
|
282
|
+
|
|
283
|
+
```json
|
|
284
|
+
{
|
|
285
|
+
"mcpServers": {
|
|
286
|
+
"fcop": {
|
|
287
|
+
"command": "uvx",
|
|
288
|
+
"args": ["fcop-mcp"]
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
**Don't want to edit JSON yourself?** Have an agent do it. Open a fresh
|
|
295
|
+
chat with any shell-capable AI and paste the canonical install prompt
|
|
296
|
+
([`agent-install-prompt.en.md`](src/fcop/rules/_data/agent-install-prompt.en.md)
|
|
297
|
+
路 [涓枃](src/fcop/rules/_data/agent-install-prompt.zh.md)) 鈥?the agent
|
|
298
|
+
detects your OS, installs `uv`, edits your `mcp.json` (preserving
|
|
299
|
+
existing servers), and tells you when to restart. After install the
|
|
300
|
+
same prompt is also available as the MCP resource
|
|
301
|
+
`fcop://prompt/install`. The prompt explicitly forbids the agent from
|
|
302
|
+
auto-initialising a project after install 鈥?initialisation is ADMIN's
|
|
303
|
+
three-way choice (solo / preset team / custom).
|
|
304
|
+
|
|
305
|
+
Stability contract: **additive-only for the full `0.6.x` minor**. Details in [`adr/ADR-0003-stability-charter.md`](adr/ADR-0003-stability-charter.md).
|
|
306
|
+
|
|
307
|
+
> **Upgrading from 0.7.x to v1.0?** Default workspace moved from `docs/agents/` to top-level `fcop/` (per [ADR-0022](adr/ADR-0022-workspace-directory-convention.md)). Run `fcop migrate-workspace --apply` for one-shot git-aware migration, or pin via `Project(workspace_dir="docs/agents")` to stay on the legacy layout. Full walkthrough 鈥?including the 4 new abstractions (REVIEW / Failure / Boundary / Event) and JSON Schema integration 鈥?in [`docs/MIGRATION-1.0.md`](docs/MIGRATION-1.0.md).
|
|
308
|
+
>
|
|
309
|
+
> **Upgrading from 0.5.x?** The MCP server moved from `fcop` to `fcop-mcp` 鈥?update your `mcp.json` to `uvx fcop-mcp`. See [`docs/MIGRATION-0.6.md`](docs/MIGRATION-0.6.md) for the full migration guide and the [0.6.0 release record](docs/releases/0.6.0.md) for what shipped.
|
|
310
|
+
|
|
311
|
+
## How to read FCoP docs
|
|
312
|
+
|
|
313
|
+
| Your goal | Start here |
|
|
314
|
+
|---|---|
|
|
315
|
+
| **New to FCoP** 鈥?hands-on 45-min setup | [`docs/getting-started.en.md`](docs/getting-started.en.md) |
|
|
316
|
+
| **Upgrading from 0.7.x** 鈥?workspace migration + new abstractions | [`docs/MIGRATION-1.0.md`](docs/MIGRATION-1.0.md) |
|
|
317
|
+
| **Upgrading from 1.0/1.1 鈫?1.2** 鈥?Capability Governance + lockstep versioning | [`docs/MIGRATION-1.1.md`](docs/MIGRATION-1.1.md) 路 [CHANGELOG](CHANGELOG.md) |
|
|
318
|
+
| **Understand the protocol contract** 鈥?what an implementation MUST do | [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md) 鈥?single-page canonical spec (v3.0). Earlier v1.0/v1.1 spec drafts remain in `spec/` for historical reference. |
|
|
319
|
+
| **v1.2 Capability Governance** 鈥?FCoPGovernanceMiddleware, risk tagging, audit log | [CHANGELOG](CHANGELOG.md) 路 ADR-0030-bis |
|
|
320
|
+
| **v1.1 new fields** 鈥?risk_level, needs_human, human_approval, skill tools | [CHANGELOG](CHANGELOG.md) 路 ADR-0023..0027 |
|
|
321
|
+
| **Understand why decisions were made** 鈥?reasoning behind each choice | [`adr/`](adr/) 鈥?start with [ADR-0029](adr/ADR-0029-fcop-behavior-governance-charter.md) |
|
|
322
|
+
| **All 45 MCP tools & 14 resources** | [`docs/mcp-tools.md`](docs/mcp-tools.md) |
|
|
323
|
+
| **Release notes** 鈥?full changelog | [`CHANGELOG.md`](CHANGELOG.md) |
|
|
324
|
+
| **Full document map** 鈥?every file and its role | [`adr/README.md`](adr/README.md) (ADR index) + [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md) 搂11 (Cited Material) |
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## Design principles
|
|
329
|
+
|
|
330
|
+
1. **Filename is the single source of truth.** Directory + filename define the state; frontmatter is redundant metadata.
|
|
331
|
+
2. **Atomicity comes from `rename()`.** Nothing else. No locks, no transactions.
|
|
332
|
+
3. **Human-machine isomorphism.** The same artefact a human reads with `cat` is what agents parse. No debug mode, no admin console.
|
|
333
|
+
4. **Identity determines path.** The role slug in the filename _is_ the permission model. An agent whose identity doesn't match won't touch the file.
|
|
334
|
+
5. **Infrastructure-free.** If you have a filesystem, you have FCoP. Works on a laptop, on a cluster, across machines via `rsync`.
|
|
335
|
+
|
|
336
|
+
## Reference implementations
|
|
337
|
+
|
|
338
|
+
Two official reference implementations, both MIT-licensed:
|
|
339
|
+
|
|
340
|
+
1. **`fcop` / `fcop-mcp`** 鈥?Python library + MCP server for the protocol. Source in this repository under [`src/fcop/`](src/fcop/) and [`mcp/src/fcop_mcp/`](mcp/src/fcop_mcp/). Installed via PyPI (see section above).
|
|
341
|
+
2. **Stub path**: `spec/codeflow-core.mdc` is only a **URL placeholder** (no full body). **Normative** rules are `src/fcop/rules/_data/fcop-rules.mdc` + `fcop-protocol.mdc`.
|
|
342
|
+
|
|
343
|
+
## Status & versioning
|
|
344
|
+
|
|
345
|
+
- **Current release**: `v3.2.2` (2026-05-22) 鈥?**Init topology fix.** Critical patch: `Project._apply_init` in 3.0.0 / 3.0.1 only created the legacy v2 buckets and skipped the mandatory v3 `_lifecycle/{inbox,active,review,done,archive}/` layer required by spec 搂1.1 鈥?every fresh project initialised on those releases was therefore born non-compliant. 3.0.2 makes fresh init produce the v3 topology directly (and stops creating the superseded v2 `tasks/` / `log/` buckets); `core.events.scan_workspace` and `Project.role_occupancy()` now read from `_lifecycle/` for v3 projects. New audit scan `_scan_lifecycle_topology_compliance()` (D9): P0 when initialised projects miss both `_lifecycle/` and v2 content; P1 when both topologies coexist (suggests `migrate --to-v3`). MCP tool descriptors (`init_solo` / `init_project` / `create_custom_team`) updated. 1209 tests green. Patch (SemVer): no API surface changes 鈥?init was doing the wrong thing. Predecessor **v3.0.1** (2026-05-21) 鈥?Path-consolidation patch (docs-only). Predecessor **v3.0.0** (2026-05-21) 鈥?**Protocol-level MAJOR 路 "folders-as-state" era**: a complete rewrite of the FCoP protocol body 鈥?canonical two-layer (per [ADR-0040](adr/ADR-0040-canonical-one-liner-two-layer-convention.md)) "Files are the protocol; location defines state; events record history" + semantic ontology; adds `_lifecycle/{inbox,active,review,done,archive}/` five-bucket directory topology (**incompatible with 2.x**, requires `fcop migrate --to-v3`); three rule sets (State / Event / Boundary Charter) + 7 allowed transitions (off-table MUST be rejected) + write-then-rename atomicity; ADR-0037 Custody Layer **was withdrawn during RFC review and never reached Accepted**. See [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md) and [`docs/MIGRATION-3.0.md`](docs/MIGRATION-3.0.md). Earlier releases: v2.0.2 (fcop-mcp registered to official MCP registry), v2.0.0 (two-diagram philosophical major bump + Rule 4.6 `fcop/internal/`), v1.6 (trailing-slug filename grammar, ADR-0033), v1.5 (84-doc protocol-awareness sync), v1.4 (write-side bind + `supersedes:` correction), v1.3 (GAL + `fcop_audit()` inspection compiler). See [CHANGELOG](CHANGELOG.md).
|
|
346
|
+
- **Normative spec**: [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md) 鈥?single-page canonical (v3.0; supersedes v1.0/v1.1 drafts retained for history) 路 machine-readable contracts in [`spec/schemas/`](spec/schemas/) (8 schemas)
|
|
347
|
+
- **Agent rules (`.mdc`) in this repo**: [`src/fcop/rules/_data/fcop-rules.mdc`](src/fcop/rules/_data/fcop-rules.mdc) + [`fcop-protocol.mdc`](src/fcop/rules/_data/fcop-protocol.mdc) (`spec/codeflow-core.mdc` is a deprecated stub)
|
|
348
|
+
- **Change log**: [`CHANGELOG.md`](CHANGELOG.md)
|
|
349
|
+
- **Research snapshot**: [`research-snapshot-2026-04-29`](https://github.com/joinwell52-AI/FCoP/releases/tag/research-snapshot-2026-04-29) archived on Zenodo with a citable DOI (see *How to cite* below).
|
|
350
|
+
|
|
351
|
+
## How to cite
|
|
352
|
+
|
|
353
|
+
If FCoP 鈥?the protocol, the field-report essays, the tutorials, or the reference implementations 鈥?informs your research, software, or writing, please cite the [Zenodo research snapshot](https://doi.org/10.5281/zenodo.19886036):
|
|
354
|
+
|
|
355
|
+
- **DOI**: [`10.5281/zenodo.19886036`](https://doi.org/10.5281/zenodo.19886036)
|
|
356
|
+
- **Snapshot tag**: [`research-snapshot-2026-04-29`](https://github.com/joinwell52-AI/FCoP/releases/tag/research-snapshot-2026-04-29) (commit `7f59395`)
|
|
357
|
+
- **Machine-readable metadata**: [`CITATION.cff`](CITATION.cff) (GitHub auto-renders a *Cite this repository* button from this file in the right sidebar)
|
|
358
|
+
|
|
359
|
+
```bibtex
|
|
360
|
+
@misc{fcop2026snapshot,
|
|
361
|
+
author = {Zhu, Wei},
|
|
362
|
+
title = {{FCoP}: A Filename-as-Protocol coordination layer for multi-agent {AI} development (Research Snapshot, April 2026)},
|
|
363
|
+
month = apr,
|
|
364
|
+
year = 2026,
|
|
365
|
+
publisher = {Zenodo},
|
|
366
|
+
version = {research-snapshot-2026-04-29},
|
|
367
|
+
doi = {10.5281/zenodo.19886036},
|
|
368
|
+
url = {https://doi.org/10.5281/zenodo.19886036}
|
|
369
|
+
}
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
For citations of individual essays or tutorials, the same DOI applies 鈥?please reference the essay's filename (e.g. `essays/what-agents-say-about-fcop.en.md`) and the snapshot version in your citation note.
|
|
373
|
+
|
|
374
|
+
## Contributing
|
|
375
|
+
|
|
376
|
+
This repository is intentionally small and stable. Protocol evolution happens through real-world reports, not committee edits. The highest-leverage contributions are:
|
|
377
|
+
|
|
378
|
+
1. **Field reports.** Try FCoP on your own agent team and open an issue with what broke, what the agents invented, what naming conventions emerged.
|
|
379
|
+
2. **Ports & SDKs.** Thin wrappers for Python / TypeScript / Go that implement the filename parser and `rename()` state transitions.
|
|
380
|
+
3. **Editor / MCP integrations.** Syntax highlighting for `.fcop` files, MCP bridges that expose the folder to other agent runtimes.
|
|
381
|
+
|
|
382
|
+
PRs to the spec itself should link to the concrete problem they're solving.
|
|
383
|
+
|
|
384
|
+
## License
|
|
385
|
+
|
|
386
|
+
MIT 鈥?see [LICENSE](LICENSE).
|
|
387
|
+
|
|
388
|
+
## Credits
|
|
389
|
+
|
|
390
|
+
FCoP emerged from hands-on collaboration with multi-agent Cursor-style workflows. Many of the conventions in this spec were first invented by those agents and then codified here. Details are in the [field report](essays/when-ai-organizes-its-own-work.en.md).
|