@lifeaitools/rdc-skills 0.24.41 → 0.25.0
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.
- package/.claude/settings.json +15 -15
- package/.claude-plugin/marketplace.json +21 -21
- package/.claude-plugin/plugin.json +1518 -1371
- package/.github/workflows/publish.yml +34 -34
- package/.github/workflows/self-test.yml +58 -58
- package/CHANGELOG.md +310 -310
- package/LICENSE +21 -21
- package/MANIFEST.md +221 -221
- package/README.md +375 -376
- package/README.sandbox.md +3 -3
- package/assets/watcher/viewer.html +164 -164
- package/bin/rdc-skills-mcp.mjs +316 -316
- package/commands/build.md +183 -183
- package/commands/collab.md +180 -180
- package/commands/deploy.md +152 -152
- package/commands/design.md +31 -31
- package/commands/edit.md +28 -28
- package/commands/fixit.md +150 -124
- package/commands/handoff.md +173 -173
- package/commands/help.md +95 -95
- package/commands/overnight.md +220 -220
- package/commands/plan.md +158 -158
- package/commands/preplan.md +131 -131
- package/commands/prototype.md +145 -145
- package/commands/release.md +49 -49
- package/commands/report.md +99 -99
- package/commands/review.md +120 -120
- package/commands/self-test.md +113 -113
- package/commands/status.md +86 -86
- package/commands/watch.md +98 -98
- package/commands/workitems.md +137 -137
- package/git-sha.json +1 -1
- package/guides/agent-bootstrap.md +295 -295
- package/guides/agents/backend.md +104 -104
- package/guides/agents/content.md +94 -94
- package/guides/agents/cs2.md +56 -56
- package/guides/agents/data.md +87 -87
- package/guides/agents/design.md +77 -77
- package/guides/agents/frontend.md +92 -92
- package/guides/agents/infrastructure.md +81 -81
- package/guides/agents/setup.md +281 -281
- package/guides/agents/verify.md +151 -151
- package/guides/agents/viz.md +106 -106
- package/guides/backend.md +146 -146
- package/guides/content.md +147 -147
- package/guides/cs2.md +190 -190
- package/guides/data.md +123 -123
- package/guides/design.md +116 -116
- package/guides/engineering-behavior.md +43 -43
- package/guides/escalation-protocol.md +125 -125
- package/guides/frontend.md +151 -151
- package/guides/history-md-spec.md +297 -297
- package/guides/infrastructure.md +179 -179
- package/guides/lessons-learned-spec.md +145 -151
- package/guides/output-contract.md +108 -108
- package/guides/publish-md-spec.md +289 -289
- package/guides/rdc-skills-startup.md +30 -30
- package/guides/verify.md +11 -11
- package/hooks/check-cwd.js +31 -31
- package/hooks/check-rdc-environment.js +164 -164
- package/hooks/check-services.js +6 -6
- package/hooks/check-stale-work-items.js +19 -19
- package/hooks/foreground-process-gate.js +128 -128
- package/hooks/gate-watchdog-selfcheck.js +257 -257
- package/hooks/hook-logger.js +25 -25
- package/hooks/lib/run-evidence-gate.mjs +241 -241
- package/hooks/no-stop-open-epics.js +127 -127
- package/hooks/post-tool-batch-gate.js +203 -203
- package/hooks/post-work-check.js +21 -21
- package/hooks/postcompact-log.js +13 -13
- package/hooks/precompact-log.js +13 -13
- package/hooks/rate-limit-retry.js +46 -46
- package/hooks/rdc-invocation-marker.js +157 -157
- package/hooks/rdc-output-contract-gate.js +94 -94
- package/hooks/require-work-item-on-commit.js +294 -294
- package/hooks/restart-brief.js +19 -19
- package/hooks/run-hidden-hook.ps1 +47 -47
- package/hooks/task-completed-gate.js +274 -274
- package/hooks/work-item-exit-gate.js +944 -944
- package/lib/catalog.mjs +236 -236
- package/lib/cloud-rewrite.mjs +155 -155
- package/package.json +57 -57
- package/rules/work-items-rpc.md +520 -520
- package/scaffold/templates/HISTORY.md.template +39 -39
- package/scaffold/templates/PUBLISH.md.template +21 -21
- package/scaffold/templates/brochure-studio-default.html +70 -70
- package/scripts/acceptance.mjs +502 -502
- package/scripts/fixtures/guides/bad-guide.md +15 -15
- package/scripts/fixtures/guides-clean/good-guide.md +16 -16
- package/scripts/install-rdc-skills.js +1289 -1289
- package/scripts/install.ps1 +202 -202
- package/scripts/install.sh +132 -132
- package/scripts/lib/assertions.mjs +287 -287
- package/scripts/lib/manifest-schema.mjs +754 -754
- package/scripts/lib/runner.mjs +465 -465
- package/scripts/lib/sandbox.mjs +435 -435
- package/scripts/prepack.mjs +32 -32
- package/scripts/rdc-brochure.mjs +482 -482
- package/scripts/rdc-design-cli.mjs +134 -134
- package/scripts/rebuild-mcp.mjs +107 -107
- package/scripts/self-test.mjs +1460 -1460
- package/scripts/stamp-git-sha.mjs +29 -29
- package/scripts/test-guide-validator.mjs +196 -196
- package/scripts/test-rdc-hooks.mjs +145 -145
- package/scripts/uninstall.ps1 +77 -77
- package/scripts/uninstall.sh +69 -69
- package/scripts/update.ps1 +43 -43
- package/scripts/update.sh +43 -43
- package/scripts/validate-place-histories.js +461 -461
- package/scripts/validate-publish-manifests.js +502 -424
- package/scripts/watch-init.mjs +100 -100
- package/skills/brochure/SKILL.md +107 -107
- package/skills/build/SKILL.md +563 -563
- package/skills/channel-formatter/SKILL.md +538 -533
- package/skills/co-develop/SKILL.md +196 -196
- package/skills/collab/SKILL.md +239 -239
- package/skills/convert/SKILL.md +167 -140
- package/skills/deploy/SKILL.md +541 -541
- package/skills/design/SKILL.md +211 -211
- package/skills/design/reference/ownership.md +16 -16
- package/skills/design/reference/rampa.md +92 -92
- package/skills/design/reference/studio-model.md +153 -153
- package/skills/edit/SKILL.md +98 -98
- package/skills/fixit/SKILL.md +203 -165
- package/skills/fs-mcp/SKILL.md +148 -148
- package/skills/handoff/SKILL.md +236 -236
- package/skills/help/SKILL.md +143 -143
- package/skills/housekeeping/SKILL.md +160 -219
- package/skills/lifeai-brochure-author/SKILL.md +340 -340
- package/skills/onramp/SKILL.md +248 -0
- package/skills/overnight/SKILL.md +251 -251
- package/skills/plan/SKILL.md +345 -345
- package/skills/preplan/SKILL.md +90 -90
- package/skills/prototype/SKILL.md +150 -150
- package/skills/rdc-brochurify/SKILL.md +245 -245
- package/skills/rdc-extract-verifier-rules/SKILL.md +191 -191
- package/skills/release/SKILL.md +140 -140
- package/skills/report/SKILL.md +100 -100
- package/skills/review/SKILL.md +152 -152
- package/skills/rpms-filemap/SKILL.cloud.md +111 -111
- package/skills/rpms-filemap/SKILL.md +111 -111
- package/skills/self-test/SKILL.md +132 -132
- package/skills/status/SKILL.md +99 -99
- package/skills/terminal-config/SKILL.md +62 -62
- package/skills/tests/MATRIX.md +54 -54
- package/skills/tests/README.md +47 -47
- package/skills/tests/onramp.test.json +87 -0
- package/skills/tests/rdc-brochure.test.json +34 -34
- package/skills/tests/rdc-build.test.json +36 -36
- package/skills/tests/rdc-channel-formatter.test.json +45 -45
- package/skills/tests/rdc-co-develop.test.json +29 -29
- package/skills/tests/rdc-collab.test.json +29 -29
- package/skills/tests/rdc-convert.test.json +35 -35
- package/skills/tests/rdc-deploy.test.json +30 -30
- package/skills/tests/rdc-design.test.json +27 -27
- package/skills/tests/rdc-edit.test.json +29 -29
- package/skills/tests/rdc-fixit.test.json +36 -36
- package/skills/tests/rdc-fs-mcp.test.json +36 -36
- package/skills/tests/rdc-handoff.test.json +28 -28
- package/skills/tests/rdc-help.test.json +29 -29
- package/skills/tests/rdc-housekeeping.test.json +28 -32
- package/skills/tests/rdc-lifeai-brochure-author.test.json +35 -35
- package/skills/tests/rdc-overnight.test.json +37 -37
- package/skills/tests/rdc-plan.test.json +27 -27
- package/skills/tests/rdc-preplan.test.json +31 -31
- package/skills/tests/rdc-prototype.test.json +28 -28
- package/skills/tests/rdc-rdc-brochurify.test.json +23 -23
- package/skills/tests/rdc-rdc-extract-verifier-rules.test.json +34 -34
- package/skills/tests/rdc-release.test.json +29 -29
- package/skills/tests/rdc-report.test.json +28 -28
- package/skills/tests/rdc-review.test.json +29 -29
- package/skills/tests/rdc-rpms-filemap.test.json +28 -28
- package/skills/tests/rdc-self-test.test.json +24 -24
- package/skills/tests/rdc-status.test.json +29 -29
- package/skills/tests/rdc-terminal-config.test.json +29 -29
- package/skills/tests/rdc-watch.test.json +24 -24
- package/skills/tests/rdc-workitems.test.json +27 -27
- package/skills/watch/SKILL.md +97 -97
- package/skills/workitems/SKILL.md +151 -151
- package/tests/acceptance.test.mjs +59 -59
- package/tests/channel-formatter.contract.test.mjs +251 -251
- package/tests/curl-surface.test.mjs +289 -289
- package/tests/harness-gates.test.mjs +325 -325
- package/tests/help-surface.test.mjs +61 -61
- package/tests/install-rdc-skills.test.mjs +49 -49
- package/tests/manifest-contract-fields.test.mjs +78 -78
- package/tests/mcp.test.mjs +271 -271
- package/tests/rdc-brochure.test.mjs +125 -125
- package/tests/require-work-item-on-commit.test.mjs +162 -162
- package/tests/run-evidence-gate.test.mjs +82 -82
- package/tests/skill-test-matrix.test.mjs +66 -66
- package/tests/validate-skills.js +27 -27
- package/tests/work-item-exit-gate-l2.test.mjs +368 -368
- package/tests/work-item-exit-gate-l3.test.mjs +197 -197
- package/RELEASE.md +0 -42
- package/tests/housekeeping-lessons-triage.test.mjs +0 -49
- package/tests/lessons-pipeline-contract.test.mjs +0 -26
- package/tests/release-contract.test.mjs +0 -16
package/skills/fs-mcp/SKILL.md
CHANGED
|
@@ -1,148 +1,148 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: rdc:fs-mcp
|
|
3
|
-
description: "Usage `rdc:fs-mcp <task>` — Use the File System MCP bridge for live repo reads, safe writes, cloud-to-local ingest, and GitHub-branch imports into a dirty local monorepo. Use when Claude.ai, Cowork, or CLI agents need fs_read/fs_write/fs_import_git_files guidance."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
> **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
|
|
7
|
-
> Checklist-only output. No tool-call narration. No raw MCP/JSON/log dumps.
|
|
8
|
-
> One checklist upfront, updated in place, shown again at end with a 1-line verdict.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
# rdc:fs-mcp — File System MCP Bridge
|
|
12
|
-
|
|
13
|
-
## When to Use
|
|
14
|
-
- Claude.ai, Cowork, or another remote surface needs live access to `{PROJECT_ROOT}` through the File System MCP.
|
|
15
|
-
- You need to read, search, or list current local repo files without relying on GitHub freshness.
|
|
16
|
-
- You need to write a small/scratch file through FS MCP.
|
|
17
|
-
- You need to move a larger cloud file into the local repo.
|
|
18
|
-
- Claude.ai created a durable new docs/corpus file on a GitHub branch and local dev needs to import it into a dirty monorepo.
|
|
19
|
-
|
|
20
|
-
## Arguments
|
|
21
|
-
- `rdc:fs-mcp read` — choose the right read/search/list tool.
|
|
22
|
-
- `rdc:fs-mcp write` — choose direct write, chunked write, append, or URL ingest.
|
|
23
|
-
- `rdc:fs-mcp import-git` — import named files from a GitHub branch/commit into local dev.
|
|
24
|
-
- `rdc:fs-mcp status` — inspect mounts and repo state before deciding.
|
|
25
|
-
|
|
26
|
-
## Procedure
|
|
27
|
-
|
|
28
|
-
### 1. Identify the file intent
|
|
29
|
-
|
|
30
|
-
Classify the file before writing:
|
|
31
|
-
|
|
32
|
-
| Intent | Default path | Default action |
|
|
33
|
-
|---|---|---|
|
|
34
|
-
| Live repo read | Existing repo path | `fs_read`, `fs_grep`, `fs_glob`, `fs_list` |
|
|
35
|
-
| Small scratch or relay file | `.rdc/relay/`, `.codex/tmp/`, agreed temp path | `fs_write` |
|
|
36
|
-
| Large text file from the current chat | Target path | `fs_write_chunk` |
|
|
37
|
-
| Cloud-hosted file | Target path | `fs_ingest_url` |
|
|
38
|
-
| Durable new docs/corpus file from Claude.ai | Actual target path in `docs/**`, `.rdc/plans/**`, `.claude/context/**` | GitHub branch commit, then `fs_import_git_files` |
|
|
39
|
-
| Existing file update | Existing repo path | Prefer patch/review workflow; do not overwrite unless explicitly requested |
|
|
40
|
-
|
|
41
|
-
### 2. Read/search from live local FS
|
|
42
|
-
|
|
43
|
-
Use FS MCP first for local state:
|
|
44
|
-
|
|
45
|
-
```text
|
|
46
|
-
fs_read CLAUDE.md
|
|
47
|
-
fs_glob docs/**/*.md
|
|
48
|
-
fs_grep "bridge mode" docs/
|
|
49
|
-
fs_list .rdc/relay/from-claude-code/
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
Use GitHub for remote branch/file history, PRs, and durable publication. Use FS for the current local worktree.
|
|
53
|
-
|
|
54
|
-
### 3. Choose the safest write surface
|
|
55
|
-
|
|
56
|
-
Use direct FS writes only when the payload is small and the destination is clear:
|
|
57
|
-
|
|
58
|
-
```text
|
|
59
|
-
fs_write path=".rdc/relay/from-claude-ai/<timestamp>-topic.md"
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
Use chunked writes for larger text:
|
|
63
|
-
|
|
64
|
-
```text
|
|
65
|
-
fs_write_chunk upload_id="<stable-id>" path="docs/plans/foo.md" chunk_index=0 total_chunks=3 content="..."
|
|
66
|
-
fs_write_chunk upload_id="<stable-id>" path="docs/plans/foo.md" chunk_index=1 total_chunks=3 content="..."
|
|
67
|
-
fs_write_chunk upload_id="<stable-id>" path="docs/plans/foo.md" chunk_index=2 total_chunks=3 content="..."
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Use URL ingest when the file already exists in cloud storage:
|
|
71
|
-
|
|
72
|
-
```text
|
|
73
|
-
fs_ingest_url url="https://..." path="docs/source/file.md" expected_sha256="<optional>"
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### ⛔ Ingest discipline (lesson 2026-06-16-collab-claudeai-fs-ingest-race-and-preview-pollution)
|
|
77
|
-
|
|
78
|
-
- **Prefer synchronous `fs_write` over `fs_ingest_url` for commit-bound bytes.**
|
|
79
|
-
`fs_ingest_url` can return before the bytes have landed on disk; a `git add`
|
|
80
|
-
immediately after races the download and silently stages nothing. If you MUST
|
|
81
|
-
use `fs_ingest_url` for content you will commit, `fs_stat`-poll the target path
|
|
82
|
-
until size/hash is stable BEFORE staging or committing.
|
|
83
|
-
- **A silent `git add` skip is NOT gitignore.** If `git add <path>` adds nothing
|
|
84
|
-
and the file is not obviously ignored, do not assume `.gitignore` — confirm with
|
|
85
|
-
`git check-ignore -v <path>`. No output means it is NOT ignored, so the real
|
|
86
|
-
cause is a missing/empty/racing file, not an ignore rule.
|
|
87
|
-
- **Never ingest claude.ai preview / Artifacts URLs.** URLs like
|
|
88
|
-
`*.claude.ai/.../preview` or Artifact render endpoints serve a wrapped,
|
|
89
|
-
data-omelette-injected document (host chrome, sanitizer rewrites, injected
|
|
90
|
-
markers) — not the clean source bytes. Ingesting them pollutes the repo. Get
|
|
91
|
-
the durable source via the GitHub-branch import path (§4) instead.
|
|
92
|
-
|
|
93
|
-
Use guarded append when appending to a known file:
|
|
94
|
-
|
|
95
|
-
```text
|
|
96
|
-
fs_stat path="docs/plans/foo.md"
|
|
97
|
-
fs_append path="docs/plans/foo.md" content="\n..." expected_sha256="<hash from fs_stat>"
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### 4. Import durable new files from GitHub instead of large FS writes
|
|
101
|
-
|
|
102
|
-
When Claude.ai creates a durable new docs/corpus file, publish it to a GitHub branch first, then ask FS MCP to import the exact file path.
|
|
103
|
-
|
|
104
|
-
Required Claude.ai handoff shape:
|
|
105
|
-
|
|
106
|
-
```json
|
|
107
|
-
{
|
|
108
|
-
"repo": "<owner>/<repo>",
|
|
109
|
-
"remote": "origin",
|
|
110
|
-
"ref": "claude-ai/docs-upload-123",
|
|
111
|
-
"paths": ["docs/plans/foo.md"],
|
|
112
|
-
"mode": "new_only",
|
|
113
|
-
"commit": true,
|
|
114
|
-
"message": "docs(plans): add foo"
|
|
115
|
-
}
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
Then call:
|
|
119
|
-
|
|
120
|
-
```text
|
|
121
|
-
fs_import_git_files remote="origin" ref="claude-ai/docs-upload-123" paths=["docs/plans/foo.md"] mode="new_only" commit=true message="docs(plans): add foo"
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
This tool must fetch only, restore only named paths, optionally commit only those paths, and never push.
|
|
125
|
-
|
|
126
|
-
### 5. Safety rules
|
|
127
|
-
|
|
128
|
-
- Never run or request `git pull` for the dirty monorepo.
|
|
129
|
-
- Never checkout a whole branch into the local worktree.
|
|
130
|
-
- For durable docs/corpus, save to the actual target path, not an upload folder, when the target is known.
|
|
131
|
-
- Use upload/incoming folders only when the final destination is unknown.
|
|
132
|
-
- Default to `new_only` for Git imports.
|
|
133
|
-
- Refuse overwrites unless the user explicitly asks for overwrite/update behavior.
|
|
134
|
-
- Stage only imported paths when committing.
|
|
135
|
-
- Never push from FS import unless the user explicitly asks for a push-capable workflow.
|
|
136
|
-
|
|
137
|
-
### 6. Completion report
|
|
138
|
-
|
|
139
|
-
Report:
|
|
140
|
-
|
|
141
|
-
```text
|
|
142
|
-
FS MCP: <read/write/import> complete
|
|
143
|
-
Paths: <paths>
|
|
144
|
-
Source ref/commit: <if Git import>
|
|
145
|
-
Local commit: <if committed>
|
|
146
|
-
Verification: <fs_stat/hash or import result>
|
|
147
|
-
Blocked/conflicts: <none or list>
|
|
148
|
-
```
|
|
1
|
+
---
|
|
2
|
+
name: rdc:fs-mcp
|
|
3
|
+
description: "Usage `rdc:fs-mcp <task>` — Use the File System MCP bridge for live repo reads, safe writes, cloud-to-local ingest, and GitHub-branch imports into a dirty local monorepo. Use when Claude.ai, Cowork, or CLI agents need fs_read/fs_write/fs_import_git_files guidance."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
> **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
|
|
7
|
+
> Checklist-only output. No tool-call narration. No raw MCP/JSON/log dumps.
|
|
8
|
+
> One checklist upfront, updated in place, shown again at end with a 1-line verdict.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# rdc:fs-mcp — File System MCP Bridge
|
|
12
|
+
|
|
13
|
+
## When to Use
|
|
14
|
+
- Claude.ai, Cowork, or another remote surface needs live access to `{PROJECT_ROOT}` through the File System MCP.
|
|
15
|
+
- You need to read, search, or list current local repo files without relying on GitHub freshness.
|
|
16
|
+
- You need to write a small/scratch file through FS MCP.
|
|
17
|
+
- You need to move a larger cloud file into the local repo.
|
|
18
|
+
- Claude.ai created a durable new docs/corpus file on a GitHub branch and local dev needs to import it into a dirty monorepo.
|
|
19
|
+
|
|
20
|
+
## Arguments
|
|
21
|
+
- `rdc:fs-mcp read` — choose the right read/search/list tool.
|
|
22
|
+
- `rdc:fs-mcp write` — choose direct write, chunked write, append, or URL ingest.
|
|
23
|
+
- `rdc:fs-mcp import-git` — import named files from a GitHub branch/commit into local dev.
|
|
24
|
+
- `rdc:fs-mcp status` — inspect mounts and repo state before deciding.
|
|
25
|
+
|
|
26
|
+
## Procedure
|
|
27
|
+
|
|
28
|
+
### 1. Identify the file intent
|
|
29
|
+
|
|
30
|
+
Classify the file before writing:
|
|
31
|
+
|
|
32
|
+
| Intent | Default path | Default action |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| Live repo read | Existing repo path | `fs_read`, `fs_grep`, `fs_glob`, `fs_list` |
|
|
35
|
+
| Small scratch or relay file | `.rdc/relay/`, `.codex/tmp/`, agreed temp path | `fs_write` |
|
|
36
|
+
| Large text file from the current chat | Target path | `fs_write_chunk` |
|
|
37
|
+
| Cloud-hosted file | Target path | `fs_ingest_url` |
|
|
38
|
+
| Durable new docs/corpus file from Claude.ai | Actual target path in `docs/**`, `.rdc/plans/**`, `.claude/context/**` | GitHub branch commit, then `fs_import_git_files` |
|
|
39
|
+
| Existing file update | Existing repo path | Prefer patch/review workflow; do not overwrite unless explicitly requested |
|
|
40
|
+
|
|
41
|
+
### 2. Read/search from live local FS
|
|
42
|
+
|
|
43
|
+
Use FS MCP first for local state:
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
fs_read CLAUDE.md
|
|
47
|
+
fs_glob docs/**/*.md
|
|
48
|
+
fs_grep "bridge mode" docs/
|
|
49
|
+
fs_list .rdc/relay/from-claude-code/
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Use GitHub for remote branch/file history, PRs, and durable publication. Use FS for the current local worktree.
|
|
53
|
+
|
|
54
|
+
### 3. Choose the safest write surface
|
|
55
|
+
|
|
56
|
+
Use direct FS writes only when the payload is small and the destination is clear:
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
fs_write path=".rdc/relay/from-claude-ai/<timestamp>-topic.md"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Use chunked writes for larger text:
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
fs_write_chunk upload_id="<stable-id>" path="docs/plans/foo.md" chunk_index=0 total_chunks=3 content="..."
|
|
66
|
+
fs_write_chunk upload_id="<stable-id>" path="docs/plans/foo.md" chunk_index=1 total_chunks=3 content="..."
|
|
67
|
+
fs_write_chunk upload_id="<stable-id>" path="docs/plans/foo.md" chunk_index=2 total_chunks=3 content="..."
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Use URL ingest when the file already exists in cloud storage:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
fs_ingest_url url="https://..." path="docs/source/file.md" expected_sha256="<optional>"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### ⛔ Ingest discipline (lesson 2026-06-16-collab-claudeai-fs-ingest-race-and-preview-pollution)
|
|
77
|
+
|
|
78
|
+
- **Prefer synchronous `fs_write` over `fs_ingest_url` for commit-bound bytes.**
|
|
79
|
+
`fs_ingest_url` can return before the bytes have landed on disk; a `git add`
|
|
80
|
+
immediately after races the download and silently stages nothing. If you MUST
|
|
81
|
+
use `fs_ingest_url` for content you will commit, `fs_stat`-poll the target path
|
|
82
|
+
until size/hash is stable BEFORE staging or committing.
|
|
83
|
+
- **A silent `git add` skip is NOT gitignore.** If `git add <path>` adds nothing
|
|
84
|
+
and the file is not obviously ignored, do not assume `.gitignore` — confirm with
|
|
85
|
+
`git check-ignore -v <path>`. No output means it is NOT ignored, so the real
|
|
86
|
+
cause is a missing/empty/racing file, not an ignore rule.
|
|
87
|
+
- **Never ingest claude.ai preview / Artifacts URLs.** URLs like
|
|
88
|
+
`*.claude.ai/.../preview` or Artifact render endpoints serve a wrapped,
|
|
89
|
+
data-omelette-injected document (host chrome, sanitizer rewrites, injected
|
|
90
|
+
markers) — not the clean source bytes. Ingesting them pollutes the repo. Get
|
|
91
|
+
the durable source via the GitHub-branch import path (§4) instead.
|
|
92
|
+
|
|
93
|
+
Use guarded append when appending to a known file:
|
|
94
|
+
|
|
95
|
+
```text
|
|
96
|
+
fs_stat path="docs/plans/foo.md"
|
|
97
|
+
fs_append path="docs/plans/foo.md" content="\n..." expected_sha256="<hash from fs_stat>"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 4. Import durable new files from GitHub instead of large FS writes
|
|
101
|
+
|
|
102
|
+
When Claude.ai creates a durable new docs/corpus file, publish it to a GitHub branch first, then ask FS MCP to import the exact file path.
|
|
103
|
+
|
|
104
|
+
Required Claude.ai handoff shape:
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"repo": "<owner>/<repo>",
|
|
109
|
+
"remote": "origin",
|
|
110
|
+
"ref": "claude-ai/docs-upload-123",
|
|
111
|
+
"paths": ["docs/plans/foo.md"],
|
|
112
|
+
"mode": "new_only",
|
|
113
|
+
"commit": true,
|
|
114
|
+
"message": "docs(plans): add foo"
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Then call:
|
|
119
|
+
|
|
120
|
+
```text
|
|
121
|
+
fs_import_git_files remote="origin" ref="claude-ai/docs-upload-123" paths=["docs/plans/foo.md"] mode="new_only" commit=true message="docs(plans): add foo"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
This tool must fetch only, restore only named paths, optionally commit only those paths, and never push.
|
|
125
|
+
|
|
126
|
+
### 5. Safety rules
|
|
127
|
+
|
|
128
|
+
- Never run or request `git pull` for the dirty monorepo.
|
|
129
|
+
- Never checkout a whole branch into the local worktree.
|
|
130
|
+
- For durable docs/corpus, save to the actual target path, not an upload folder, when the target is known.
|
|
131
|
+
- Use upload/incoming folders only when the final destination is unknown.
|
|
132
|
+
- Default to `new_only` for Git imports.
|
|
133
|
+
- Refuse overwrites unless the user explicitly asks for overwrite/update behavior.
|
|
134
|
+
- Stage only imported paths when committing.
|
|
135
|
+
- Never push from FS import unless the user explicitly asks for a push-capable workflow.
|
|
136
|
+
|
|
137
|
+
### 6. Completion report
|
|
138
|
+
|
|
139
|
+
Report:
|
|
140
|
+
|
|
141
|
+
```text
|
|
142
|
+
FS MCP: <read/write/import> complete
|
|
143
|
+
Paths: <paths>
|
|
144
|
+
Source ref/commit: <if Git import>
|
|
145
|
+
Local commit: <if committed>
|
|
146
|
+
Verification: <fs_stat/hash or import result>
|
|
147
|
+
Blocked/conflicts: <none or list>
|
|
148
|
+
```
|