fdeops 3.10.0 → 3.11.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/README.md CHANGED
@@ -1,15 +1,15 @@
1
1
  # FDEOps
2
2
 
3
- **Your AI coding agent forgets your client every morning. fdeops remembers.**
3
+ **Your AI coding agent forgets your client every morning. FDEOps remembers.**
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/fdeops.svg)](https://www.npmjs.com/package/fdeops)
6
6
  [![CI](https://github.com/suboss87/fdeops/actions/workflows/validate.yml/badge.svg)](https://github.com/suboss87/fdeops/actions)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
8
8
  [![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org)
9
9
 
10
- **Memory + methodology + skills, in one kit.** Skill packs - BMAD, Spec-Kit, [mattpocock/skills](https://github.com/mattpocock/skills) - teach your AI agent how to *build*. None of them remember who the client is, what you promised them, or who agreed it was delivered. FDEOps adds the missing layer: a private fieldbook per engagement (`.fde/`), a field methodology (land close), and one `@fde` skill that routes it all.
10
+ Skill packs teach your AI coding agent how to *build*. None of them remember who the client is, what you promised, or who agreed it was delivered. FDEOps adds that layer: a private fieldbook per engagement (`.fde/`), a field methodology from land to close, and one `@fde` skill that routes it.
11
11
 
12
- Built for Forward Deployed Engineers, and anyone embedded in client work: consultants, agency developers, solutions architects, fractional CTOs. Feels like a second brain; behaves like a defensible record (dated, sourced, yours).
12
+ Built for Forward Deployed Engineers and anyone embedded in client work - consultants, agency developers, solutions architects, fractional CTOs. Feels like a second brain; behaves like a defensible record: dated, sourced, on your laptop.
13
13
 
14
14
  ```
15
15
  land discover plan build ship close
@@ -19,225 +19,211 @@ Built for Forward Deployed Engineers, and anyone embedded in client work: consul
19
19
  written as a side effect of the work
20
20
  ```
21
21
 
22
- **You talk in plain language with `@fde`.** The agent (and an optional CLI) handles the boring memory work. You still confirm anything that goes into the record.
23
-
24
22
  ---
25
23
 
26
- ## The week
27
-
28
- Day to day you only need `@fde` and normal English. No command cheat sheet.
29
-
30
- | When | What you say | What you get |
31
- |------|--------------|--------------|
32
- | **Start of week** | Open your AI coding agent (nothing to paste) | It already knows where you left off - trust, phase, what's next |
33
- | **After a meeting** | `@fde` debrief these notes *(paste or attach them)* | Proposed updates to the record - you review, then confirm |
34
- | **Pull from tools** | `@fde` connect Granola *(once)* · then `@fde` pull today's Acme transcript | Wire any source MCP you choose; FDEOps stages → proposes → you confirm. Recipes: [mcp/recipes/](mcp/recipes/) |
35
- | **Before a stakeholder meeting** | `@fde` prep me for tomorrow's meeting with the sponsor | A short brief from what you already logged - not a blank chat |
36
- | **Someone disputes scope** | `@fde` when did we agree to drop that feature? | Dated answers from the record (or a clear gap if nothing was logged) |
37
- | **End of week** | `@fde` draft the sponsor update from the record | Status grounded in what actually happened |
38
-
39
- Same client folder every time (`~/fde-engagements/<client>/.fde/`). Your AI coding agent reads it on every session.
40
-
41
- ---
42
-
43
- ## See it in 60 seconds (no client, no install)
44
-
45
- ```bash
46
- npx fdeops demo
47
- ```
24
+ ## A real session
48
25
 
49
- Walks one fake engagement end to end with the **real** commands: messy kickoff notes proposed updates you confirm → cold session reload meeting prep dated receipts the fieldbook page. Nothing of yours is read, nothing leaves the machine, and it lives in a throwaway `~/fde-engagements/.demo/` that never appears in your portfolio. Remove it with `npx fdeops demo --clean`.
50
-
51
- Or watch it first. One real session below - day 1 kickoff notes, the next morning's cold start, and "when did we agree to that?" six weeks later. Every line is the CLI's own output; only the typing pace is staged, and you can re-record it yourself with [`media/record-session.sh`](media/record-session.sh):
26
+ Kickoff notes go in messy. You confirm what enters the record. A cold session the next morning already knows the client, the sponsor brief is grounded in dated facts, and the receipts survive the argument. Real CLI output - only the typing pace is staged, and you can [re-record it yourself](media/record-session.sh).
52
27
 
53
28
  <p align="center"><img alt="A real fdeops session: messy kickoff notes routed into dated memory after you confirm, then a cold session that already knows the client, a grounded sponsor-meeting brief, and dated receipts" src="media/session.gif" width="900" /></p>
54
29
 
55
- Note the two things a chat window cannot do: **nothing is written until you confirm the routing**, and the `<private>` block in those notes lands sealed on disk as `(private - redacted)` - it never appears in `resume`, `prep`, `receipts`, or the dashboard.
30
+ Nothing to install to see it on a fake client: `npx fdeops demo`.
56
31
 
57
32
  ---
58
33
 
59
34
  ## Quickstart
60
35
 
61
- **1. Install.** Claude Code gets session hooks (context loads before you type); everywhere else the same fieldbook loads when you ask.
36
+ **1. Install** on your machine - never in the customer's repo.
62
37
 
63
38
  ```text
64
- /plugin marketplace add suboss87/fdeops # Claude Code
39
+ /plugin marketplace add suboss87/fdeops
65
40
  /plugin install fdeops@fdeops
66
41
  ```
67
42
 
68
43
  ```bash
69
- npx skills add suboss87/fdeops # Cursor, Codex, and skills-compatible agents
44
+ npx skills add suboss87/fdeops # Cursor, Codex, skills-compatible hosts
70
45
  ```
71
46
 
72
- **2. Bind once** - inside the client workspace (setup only; not a daily habit):
73
-
74
- ```bash
75
- npx fdeops resume --init garvey # creates ~/fde-engagements/garvey engagement + binds workspace
76
- ```
47
+ Claude Code additionally gets session hooks, so context arrives before you type. Everywhere else it is the same fieldbook, loaded when you ask.
77
48
 
78
- **Check it worked:**
49
+ **2. Bind once** in the client workspace:
79
50
 
80
51
  ```bash
81
- npx fdeops resume # prints a short "where we are" for this client
52
+ npx fdeops resume --init garvey # ~/fde-engagements/garvey + bind this checkout
53
+ npx fdeops resume # where we are
82
54
  ```
83
55
 
84
- **3. Work** - talk normally:
56
+ **3. Work** in plain language:
85
57
 
86
58
  ```text
87
- @fde I just got the brief. New client, payments platform, they want it live before their Q3 audit.
59
+ @fde New client. Payments platform. They want it live before the Q3 audit.
88
60
  ```
89
61
 
90
- `@fde` routes and updates the fieldbook - you confirm judgment. Full workflow: [docs/USAGE.md](docs/USAGE.md).
91
-
92
- **It's working if** `npx fdeops resume` prints this client's phase, trust signal, and next action - and tomorrow's session starts from that instead of a blank chat.
62
+ **It is working if** `npx fdeops resume` prints this client's phase, trust signal, and next action - and prints the same thing tomorrow, from a new session, with no explaining. Full workflow: [docs/USAGE.md](docs/USAGE.md).
93
63
 
94
64
  <details>
95
- <summary><strong>Other install paths</strong> · scan · env</summary>
65
+ <summary>Other install paths · scan · env</summary>
96
66
 
97
- - **Cursor / Codex / Copilot / Gemini CLI:** `npx fdeops adapters .` - [adapters/](adapters/README.md)
98
- - **Local LLMs (Ollama, LM Studio, llama.cpp):** load `skills/fde/SKILL.md` as the system prompt - [guide](adapters/LOCAL-LLM.md)
99
- - **Manual / air-gapped:** `git clone https://github.com/suboss87/fdeops.git && cd fdeops && node bin/install.js`
100
- - **Try without install:** `npx fdeops demo` - the whole loop on a fake client · `npx fdeops scan` - day-1 recon of this repo (heuristic leads, not findings)
101
- - **Requires:** [Node.js](https://nodejs.org) >= 18 for the CLI and adapters
102
- - **Advanced:** `FDEOPS_ENGAGEMENT` overrides the workspace registry. Full matrix: [docs/install.md](docs/install.md)
67
+ - **Adapters:** `npx fdeops adapters .` - [adapters/](adapters/README.md)
68
+ - **Local LLMs:** load `skills/fde/SKILL.md` - [guide](adapters/LOCAL-LLM.md)
69
+ - **Air-gapped:** `git clone https://github.com/suboss87/fdeops.git && cd fdeops && node bin/install.js`
70
+ - **No install:** `npx fdeops demo` · `npx fdeops scan` (heuristic recon, not findings)
71
+ - **Requires:** Node.js >= 18
72
+ - **Override:** `FDEOPS_ENGAGEMENT` - [docs/install.md](docs/install.md)
103
73
 
104
74
  </details>
105
75
 
106
76
  ---
107
77
 
108
- ## How it works
78
+ ## The week
79
+
80
+ `@fde` plus English. No cheat sheet.
109
81
 
110
- - **You** describe the situation with `@fde` (or plain language once the skill is loaded)
111
- - **Session start / end** - small hooks load where you left off and capture what changed (no re-paste)
112
- - **Local CLI** - memory writes, search, and status with no model tokens; the agent runs it. You do not need to learn it for daily use ([docs/USAGE.md](docs/USAGE.md))
113
- - **Pluggable pull (ingest)** - FDEOps is the **sink**, not a connector pack. You add any source MCP (Granola, Notion, Drive, …) in Cursor/Claude; say `@fde connect …` for a guided config + recipe, then pull in plain language. Raw text → `.inbox/` → propose → you confirm → `.fde/`. No ambient sync; nothing unreviewed enters the fieldbook. See [mcp/recipes/](mcp/recipes/).
82
+ | When | What you say | What you get |
83
+ |------|--------------|--------------|
84
+ | **Start of week** | `@fde` - or just open Claude Code | Fieldbook on disk either way. **Claude Code** injects trust, phase, next before you type. **Cursor / Codex / others:** say `@fde` or `resume` - nothing auto-loads. |
85
+ | **After a meeting** | `@fde` debrief these notes *(paste or attach)* | Proposed updates. You review, then confirm. |
86
+ | **Optional: pull** | `@fde` connect Granola *(once)* · `@fde` pull today's Acme transcript | You add that source MCP. We **pull** on request - no push, no sync. [mcp/recipes/](mcp/recipes/) |
87
+ | **Before a stakeholder meeting** | `@fde` prep me for tomorrow with the sponsor | Brief from what you already logged. |
88
+ | **Scope dispute** | `@fde` when did we agree to drop that? | Dated answers, or a clear gap. |
89
+ | **End of week** | `@fde` draft the sponsor update from the record | Status grounded in what happened. |
114
90
 
115
- fdeops complements repo memory: CLAUDE.md holds how the *code* works; the fieldbook holds how the *client engagement* works.
91
+ Same folder every time: `~/fde-engagements/<client>/.fde/`.
116
92
 
117
- ### Switch coding agents anytime
93
+ ---
118
94
 
119
- The fieldbook lives on disk at `~/fde-engagements/<client>/.fde/` - not inside Claude, Cursor, or any other tool. Change AI coding agents and the **same client record** is still there.
95
+ ## How it works
120
96
 
121
- On the new tool:
97
+ - **You** describe the situation with `@fde`, in plain language.
98
+ - **The AI coding agent** routes to a method, does the work, and drafts the memory.
99
+ - **The CLI** (`bin/fde.js`) does every write, receipt, and status check - git and file reads only, no network, no model tokens. You do not live in the CLI; your agent runs it. [docs/USAGE.md](docs/USAGE.md)
100
+ - **You confirm.** Nothing enters the record unreviewed; `fde debrief --dry-run` shows the routing first.
122
101
 
123
- 1. Install `@fde` for that tool (plugin, `npx skills add suboss87/fdeops`, or `npx fdeops adapters .` - see [adapters/](adapters/README.md))
124
- 2. Open a workspace already bound with `npx fdeops resume --init <client>` (or bind once if this checkout is new)
125
- 3. Talk with `@fde` or run `npx fdeops resume`
102
+ `CLAUDE.md` is how the *code* works. The fieldbook is how the *engagement* works. It lives at `~/fde-engagements/<client>/.fde/`, not inside any vendor - change hosts, install `@fde` on the new one, keep talking.
126
103
 
127
- Same fieldbook. **Claude Code** gets the fullest ride (session start/stop hooks). Elsewhere the memory and CLI are the same; context usually loads when you ask `@fde` / `resume`, not automatically. Details: [docs/install.md](docs/install.md).
104
+ ### What works where
105
+
106
+ Honest boundaries, so nothing here needs a footnote:
107
+
108
+ | | Claude Code | Cursor · Codex · Copilot · Gemini · local LLMs |
109
+ |---|---|---|
110
+ | Fieldbook, methods, CLI, dashboard | yes | yes |
111
+ | Context loaded before you type | session hooks | you say `@fde` / `resume` |
112
+ | Snapshot on session end | session hooks | `@fde` capture, or `fde capture` |
113
+ | Pull from Granola / Slack / Notion | you add that source MCP; FDEOps only ingests | same |
114
+
115
+ FDEOps is the sink, never the source: no push, no sync, no third-party tokens in `.fde/`. [mcp/recipes/](mcp/recipes/)
128
116
 
129
117
  <details>
130
- <summary><strong>Phase verbs</strong> (land → close)</summary>
118
+ <summary>Phase verbs (land → close)</summary>
131
119
 
132
120
  | Verb | When |
133
121
  |------|------|
134
- | **land** | First days at a new client - interrogate the brief, map stakeholders, define success |
135
- | **discover** | The brief feels wrong - find the real problem, with evidence from the repo |
136
- | **plan** | Scope agreed - sequence it backwards from success, in PR-sized slices |
137
- | **build** | Ready to write code - declare blast radius, log deliveries as you ship |
138
- | **ship** | Going to production - pre-flight, canary, tested rollback |
139
- | **close** | Engagement ending - handoff doc, retrospective, receipts that survive you |
122
+ | **land** | First days - brief, stakeholders, success |
123
+ | **discover** | The brief is wrong - evidence from the repo |
124
+ | **plan** | Sequence backwards from done, PR-sized |
125
+ | **build** | Blast radius, log what shipped |
126
+ | **ship** | Pre-flight, canary, rollback |
127
+ | **close** | Handoff, retro, receipts that survive you |
140
128
 
141
- Overlays for regulated domains (AI, fintech, healthcare, government) activate on signal. Full matrix: [docs/skills.md](docs/skills.md).
129
+ Overlays (AI, fintech, healthcare, gov) fire on signal. [docs/skills.md](docs/skills.md)
142
130
 
143
131
  </details>
144
132
 
145
133
  ---
146
134
 
147
- ## The field methods
148
-
149
- You never pick one - you describe the situation and `@fde` routes. They are listed here because the methodology is the product, and it should be readable before you install anything. **37 methods across 6 domains**, each one a method (the thinking, the artifact it drafts, the checkpoint with you), not advice:
135
+ ## Engagement memory (`.fde/`)
150
136
 
151
- | Domain | Methods |
152
- |--------|---------|
153
- | **1. Embed & Trust** - first days, access, credibility | [land](skills/fde/references/land.md) · [audit](skills/fde/references/audit.md) · [stakeholder-radar](skills/fde/references/stakeholder-radar.md) · [trust-engineering](skills/fde/references/trust-engineering.md) · [scope-defense](skills/fde/references/scope-defense.md) |
154
- | **2. Discover & Diagnose** - find the real problem | [discover](skills/fde/references/discover.md) · [assumption-audit](skills/fde/references/assumption-audit.md) · [use-case-scoring](skills/fde/references/use-case-scoring.md) · [sketch](skills/fde/references/sketch.md) |
155
- | **3. Plan & Align** - sequence it, sell it | [plan](skills/fde/references/plan.md) · [business-case](skills/fde/references/business-case.md) · [options-analysis](skills/fde/references/options-analysis.md) · [initiative-triage](skills/fde/references/initiative-triage.md) |
156
- | **4. Build & Guard** - the work, and not breaking their business | [build](skills/fde/references/build.md) · [incremental-build](skills/fde/references/incremental-build.md) · [test-on-legacy](skills/fde/references/test-on-legacy.md) · [blast-radius](skills/fde/references/blast-radius.md) · [debug](skills/fde/references/debug.md) · [rescue](skills/fde/references/rescue.md) · [security-audit](skills/fde/references/security-audit.md) · [observability](skills/fde/references/observability.md) |
157
- | **5. Ship & Verify** - production, with a way back | [ship](skills/fde/references/ship.md) · [review](skills/fde/references/review.md) · [rollback-drill](skills/fde/references/rollback-drill.md) · [qa-live](skills/fde/references/qa-live.md) |
158
- | **6. Operate & Close** - the part that decides renewals | [status](skills/fde/references/status.md) · [demo-prep](skills/fde/references/demo-prep.md) · [debrief](skills/fde/references/debrief.md) · [exec-narrative](skills/fde/references/exec-narrative.md) · [dashboard](skills/fde/references/dashboard.md) · [multi-customer-ops](skills/fde/references/multi-customer-ops.md) · [close](skills/fde/references/close.md) · [handoff-engineering](skills/fde/references/handoff-engineering.md) · [pattern-extract](skills/fde/references/pattern-extract.md) · [red-team](skills/fde/references/red-team.md) · [ingest](skills/fde/references/ingest.md) · [ingest-connect](skills/fde/references/ingest-connect.md) |
137
+ One folder per client. Plain markdown, so you can grep it, diff it, copy it into a readout, and defend it in a room.
159
138
 
160
- Plus five overlays that activate on signal rather than being chosen - [ai](skills/fde/references/ai.md) · [artifacts](skills/fde/references/artifacts.md) · [fintech](skills/fde/references/fintech.md) · [healthcare](skills/fde/references/healthcare.md) · [gov](skills/fde/references/gov.md) - which add the checks that domain demands to whatever method is already running.
139
+ | File | Holds |
140
+ |------|-------|
141
+ | `context.md` | Where you are |
142
+ | `brief.md` / `success.md` | What they asked; what "done" is and who signs |
143
+ | `reality.md` / `terrain.md` | The real problem; the map |
144
+ | `stakeholders.md` | `[signal:green\|amber\|red]` |
145
+ | `trust-profile.md` | Sacred data, AI policy, approval chain |
146
+ | `decisions.md` / `risks.md` / `delivery.md` | Dated choices; live risks; what shipped and how it rolls back |
161
147
 
162
- Every method, with the exact phrases that route to it: **[docs/skills-reference.md](docs/skills-reference.md)**.
148
+ A day-one fieldbook ships **empty** - headings and allowed values, no invented rows - so anything you read in it is something that actually happened. Schema: [docs/schema.md](docs/schema.md).
163
149
 
164
150
  ---
165
151
 
166
- ## Engagement memory (`.fde/`)
152
+ ## The field methods
167
153
 
168
- The **fieldbook** is the system of record for the embed - one folder per client, plain markdown you can read, grep, and take with you:
154
+ You never pick one. You describe the situation and `@fde` routes. **37 methods** across six domains, each a method - thinking, artifact, checkpoint - not a tip sheet. [docs/skills.md](docs/skills.md) · [docs/skills-reference.md](docs/skills-reference.md)
169
155
 
170
- | File | Holds |
171
- |------|-------|
172
- | `context.md` | Where you are - loaded first every session |
173
- | `brief.md` / `success.md` | What they asked for; what "done" means and who signs it off |
174
- | `reality.md` / `terrain.md` | The real problem; the codebase map |
175
- | `stakeholders.md` | Champions, resistance, `[signal:green\|amber\|red]` trust tokens |
176
- | `trust-profile.md` | Sacred data, AI policy, approval chain |
177
- | `decisions.md` / `risks.md` / `delivery.md` | Choices with dates; live risk register; what shipped and its rollback |
156
+ <details>
157
+ <summary>All 37 methods</summary>
158
+
159
+ | Domain | Methods |
160
+ |--------|---------|
161
+ | **1. Embed & Trust** | [land](skills/fde/references/land.md) · [audit](skills/fde/references/audit.md) · [stakeholder-radar](skills/fde/references/stakeholder-radar.md) · [trust-engineering](skills/fde/references/trust-engineering.md) · [scope-defense](skills/fde/references/scope-defense.md) |
162
+ | **2. Discover & Diagnose** | [discover](skills/fde/references/discover.md) · [assumption-audit](skills/fde/references/assumption-audit.md) · [use-case-scoring](skills/fde/references/use-case-scoring.md) · [sketch](skills/fde/references/sketch.md) |
163
+ | **3. Plan & Align** | [plan](skills/fde/references/plan.md) · [business-case](skills/fde/references/business-case.md) · [options-analysis](skills/fde/references/options-analysis.md) · [initiative-triage](skills/fde/references/initiative-triage.md) |
164
+ | **4. Build & Guard** | [build](skills/fde/references/build.md) · [incremental-build](skills/fde/references/incremental-build.md) · [test-on-legacy](skills/fde/references/test-on-legacy.md) · [blast-radius](skills/fde/references/blast-radius.md) · [debug](skills/fde/references/debug.md) · [rescue](skills/fde/references/rescue.md) · [security-audit](skills/fde/references/security-audit.md) · [observability](skills/fde/references/observability.md) |
165
+ | **5. Ship & Verify** | [ship](skills/fde/references/ship.md) · [review](skills/fde/references/review.md) · [rollback-drill](skills/fde/references/rollback-drill.md) · [qa-live](skills/fde/references/qa-live.md) |
166
+ | **6. Operate & Close** | [status](skills/fde/references/status.md) · [demo-prep](skills/fde/references/demo-prep.md) · [debrief](skills/fde/references/debrief.md) · [exec-narrative](skills/fde/references/exec-narrative.md) · [dashboard](skills/fde/references/dashboard.md) · [multi-customer-ops](skills/fde/references/multi-customer-ops.md) · [close](skills/fde/references/close.md) · [handoff-engineering](skills/fde/references/handoff-engineering.md) · [pattern-extract](skills/fde/references/pattern-extract.md) · [red-team](skills/fde/references/red-team.md) · [ingest](skills/fde/references/ingest.md) · [ingest-connect](skills/fde/references/ingest-connect.md) |
167
+
168
+ Overlays: [ai](skills/fde/references/ai.md) · [artifacts](skills/fde/references/artifacts.md) · [fintech](skills/fde/references/fintech.md) · [healthcare](skills/fde/references/healthcare.md) · [gov](skills/fde/references/gov.md)
178
169
 
179
- Every entry is dated and sourced, so you can defend it in front of skeptical stakeholders. Schema: [docs/schema.md](docs/schema.md).
170
+ </details>
180
171
 
181
172
  ---
182
173
 
183
174
  ## Fieldbook UI
184
175
 
185
- Open the system of record in a browser - trust, phase, next action, and the full record in one local page. Ask `@fde` for the dashboard, or run `npx fdeops dashboard` (current engagement by default; `--all` for the portfolio).
176
+ `@fde` dashboard, or `npx fdeops dashboard` (`--all` for the portfolio): one local HTML file - trust, phase, next action, and the record behind them. Generated on demand, no server.
186
177
 
187
- <p align="center"><img width="1336" height="624" alt="fdeops Fieldbook in the browser" src="https://github.com/user-attachments/assets/5683614c-7730-4a3a-860d-185053a377eb" /></p>
178
+ <p align="center"><img width="1336" height="624" alt="The fdeops Fieldbook dashboard: engagements with trust signal, phase and next action" src="https://github.com/user-attachments/assets/5683614c-7730-4a3a-860d-185053a377eb" /></p>
188
179
 
189
180
  ---
190
181
 
191
182
  ## Who this is for
192
183
 
193
- | You are... | What fdeops does for you |
194
- |----------|-------------------|
195
- | **Forward Deployed Engineer** | The role this was built for - the full lifecycle, first meeting to final handoff |
196
- | **Consultant or contractor at a client site** | Remembers the engagement so you stop re-explaining it |
197
- | **Solutions architect / engineer** | Methods for the politics as well as the architecture |
198
- | **Agency developer running 3-5 clients** | One `.fde/` per client - details stop blurring |
199
- | **Fractional CTO doing client work** | The fieldbook is your system of record for the embed - and your audit trail for billable work |
184
+ | You are | What this is |
185
+ |---------|----------------|
186
+ | **Forward Deployed Engineer** | The job this was built for - first meeting through handoff |
187
+ | **Consultant / contractor on site** | The engagement stops resetting every morning |
188
+ | **Solutions architect** | Politics and architecture in the same record |
189
+ | **Agency, 3-5 clients** | One `.fde/` each - they stop blurring |
190
+ | **Fractional CTO on client work** | System of record for the embed, and the billable trail |
200
191
 
201
192
  ---
202
193
 
203
194
  ## Your data stays yours
204
195
 
205
- - **Local only.** Pure `git` + file reads - no network calls, no telemetry, no account. Works air-gapped.
206
- - **Plain markdown.** No database, no lock-in.
207
- - **No new data path.** The AI sees client code only when *you* point your agent at it. `<private>` tags are redacted from CLI/dashboard/hook output; do not feed raw private blocks into the model (file tools bypass that redaction).
208
- - **Nothing enters the record unreviewed.** The model drafts, you confirm (`fde debrief --dry-run` shows the routing first); the hooks record only git facts. Your fieldbook stays yours to defend.
209
- - **Know your sync surface.** `~/fde-engagements` lives in your home directory - your backup and cloud-sync setup now covers client notes. `fde resume --init` warns if the folder sits in a synced path. Read [PRIVACY.md](PRIVACY.md) before your first NDA'd engagement.
196
+ - **Local only.** `git` + files. No network, no telemetry, no account. Air-gapped is fine.
197
+ - **Plain markdown.** No database, no lock-in, nothing to export.
198
+ - **No new data path.** The model sees client code only when you point the AI coding agent at it. `<private>` blocks are redacted from CLI, dashboard, and hook output - do not open raw private blocks with file tools.
199
+ - **Know the sync surface.** `~/fde-engagements` lives in `$HOME`. iCloud or Dropbox is an NDA incident waiting; `resume --init` warns you.
210
200
 
211
- Details: [PRIVACY.md](PRIVACY.md) · [SECURITY.md](SECURITY.md)
201
+ [PRIVACY.md](PRIVACY.md) before the first NDA · [SECURITY.md](SECURITY.md)
212
202
 
213
203
  ---
214
204
 
215
205
  ## Principles
216
206
 
217
- - **The artifact is the memory** - producing work and recording it are one action
218
- - **Methods, not autonomy** - each skill tells you what to check; the judgment, the trust, and the consequences stay yours
207
+ - **The artifact is the memory** - producing the work and recording it are one action
208
+ - **Methods, not autonomy** - the kit says what to check; judgment stays yours
219
209
  - **Brief is a hypothesis** - discover before building the wrong thing
220
- - **Evidence on every claim** - these files get defended in front of skeptical clients
210
+ - **Evidence on every claim** - these files get defended in the room
221
211
  - **One customer, one folder** - context never bleeds
222
212
 
223
213
  ---
224
214
 
225
215
  ## Updating
226
216
 
227
- ```bash
228
- # Plugin / skills install: re-run the install command from Quickstart
229
- # From a git clone:
230
- cd fdeops && git pull && node bin/install.js
231
- ```
217
+ Re-run the Quickstart install, or from a clone: `git pull && node bin/install.js`
232
218
 
233
219
  ---
234
220
 
235
221
  ## Contributing
236
222
 
237
- Built and maintained by **[Subash Natarajan](https://www.linkedin.com/in/subashn/)**. Share your feedback via [Issues](https://github.com/suboss87/fdeops/issues) - see [CONTRIBUTING.md](CONTRIBUTING.md).
223
+ **[Subash Natarajan](https://www.linkedin.com/in/subashn/)**. [Issues](https://github.com/suboss87/fdeops/issues) · [CONTRIBUTING.md](CONTRIBUTING.md)
238
224
 
239
- Thanks to builders whose craft helped sharpen the thinking behind this kit, among them [Andrej Karpathy](https://karpathy.ai/)'s engineering guidelines and the [agentic engineering workflow](https://github.com/pawel-cell/micky-podcast-agentic-engineering) notes from David Ondrej / Michael Shimeles. FDEOps itself is handcrafted for field work; any resemblance is inspiration, not a fork.
225
+ Thanks to builders whose craft sharpened the thinking, among them [Andrej Karpathy](https://karpathy.ai/)'s engineering guidelines and the [agentic engineering workflow](https://github.com/pawel-cell/micky-podcast-agentic-engineering) notes from David Ondrej / Michael Shimeles.
240
226
 
241
- **What we won't build:** SaaS sync or Slack/Notion connectors inside the CLI, CRM as core, hardware capture, or generic code-craft skill packs (TDD/review already exist elsewhere - FDEOps owns the engagement, not the keyboard). The `fde` CLI stays local-only.
227
+ **What we won't build:** SaaS sync; Slack/Notion/Granola connectors or **push** inside the CLI; CRM as core; hardware capture; generic code-craft packs (TDD and review live elsewhere). You may **pull** via *your* MCP. The `fde` CLI stays local-only.
242
228
 
243
- [FDE Methodology](FDE-METHODOLOGY.md) - [SECURITY.md](SECURITY.md) - [PRIVACY.md](PRIVACY.md) - [Repo layout](docs/REPO_LAYOUT.md) - [Skills matrix](docs/skills.md) - MIT
229
+ [FDE Methodology](FDE-METHODOLOGY.md) · [SECURITY.md](SECURITY.md) · [PRIVACY.md](PRIVACY.md) · [Repo layout](docs/REPO_LAYOUT.md) · [Skills matrix](docs/skills.md) · MIT
@@ -2,7 +2,7 @@
2
2
 
3
3
  **One brain, thin adapters.** fdeops has a single source of truth - the `@fde` skill at `skills/fde/SKILL.md` and the `fde` CLI. Each AI coding tool discovers it through a small pointer file in the place that tool already looks. No forked logic, no five copies to maintain - every adapter says the same thing: *route via `@fde`, read/write `.fde/` memory, talk like a peer, never touch what isn't yours.*
4
4
 
5
- **Switching tools:** the fieldbook does not live in the agent. It lives at `~/fde-engagements/<client>/.fde/`. Point a new tool at a bound workspace, drop adapters (or install the skill/plugin for that tool), and the same client record opens. Auto session hooks are Claude Code–first; elsewhere load via `@fde` / `fde resume`. See [README § Switch coding agents](../README.md#switch-coding-agents-anytime).
5
+ **Switching tools:** the fieldbook does not live in the agent. It lives at `~/fde-engagements/<client>/.fde/`. Point a new tool at a bound workspace, drop adapters (or install the skill/plugin for that tool), and the same client record opens. Auto session hooks are Claude Code–first; elsewhere load via `@fde` / `fde resume`. See [README § What works where](../README.md#what-works-where).
6
6
 
7
7
  ## What goes where
8
8
 
package/bin/check.js CHANGED
@@ -221,17 +221,20 @@ const readme = read('README.md')
221
221
  if (readme.includes('demo.gif')) fail('README must not embed media/demo.gif (staged mock, not real CLI output)')
222
222
  else ok('README no staged demo gif')
223
223
 
224
- if (!readme.includes('media/session.gif')) {
225
- fail('README must embed media/session.gif (the recorded session is the front door)')
226
- } else if (!readme.includes('media/record-session.sh')) {
227
- fail('README must link media/record-session.sh next to the recording, so it can be re-recorded')
224
+ // The recording may live on the front door or one click in (docs/USAGE.md), but
225
+ // it must stay reachable and reproducible - an orphaned gif rots silently.
226
+ const recordingHosts = ['README.md', 'docs/USAGE.md'].filter(f => read(f).includes('media/session.gif'))
227
+ if (!recordingHosts.length) {
228
+ fail('media/session.gif must be embedded in README.md or docs/USAGE.md (the recorded session is the proof)')
229
+ } else if (!recordingHosts.some(f => read(f).includes('media/record-session.sh'))) {
230
+ fail('link media/record-session.sh next to the recording, so it can be re-recorded')
228
231
  } else {
229
232
  const gifPath = path.join(root, 'media', 'session.gif')
230
233
  const rec = path.join(root, 'media', 'record-session.sh')
231
234
  if (!fs.existsSync(gifPath) || fs.statSync(gifPath).size < 50000) fail('media/session.gif missing or too small')
232
235
  else if (!fs.existsSync(rec)) fail('media/record-session.sh missing - the recording must be reproducible')
233
236
  else if (!fs.existsSync(path.join(root, 'media', 'session.cast'))) fail('media/session.cast missing - keep the source recording next to the gif')
234
- else ok('README recorded session (gif + reproducible recorder + cast)')
237
+ else ok(`recorded session in ${recordingHosts.join(' + ')} (gif + reproducible recorder + cast)`)
235
238
  }
236
239
 
237
240
  // Every repo-relative README link and image must resolve, or the front door 404s.
@@ -461,7 +464,7 @@ if (!fs.existsSync(path.join(root, 'bin', 'fde.js'))) {
461
464
  .map(name => path.join('bin', 'lib', name)),
462
465
  ]
463
466
  const cliSource = cliFiles.map(read).join('\n')
464
- for (const sub of ['cmdScan', 'cmdResume', 'cmdLog', 'cmdDebrief', 'cmdIngest', 'cmdReceipts', 'cmdCapture', 'cmdStatus', 'cmdDashboard']) {
467
+ for (const sub of ['cmdScan', 'cmdResume', 'cmdLog', 'cmdDebrief', 'cmdIngest', 'cmdReceipts', 'cmdCapture', 'cmdStatus', 'cmdDashboard', 'cmdVault']) {
465
468
  if (!cliSource.includes(sub)) fail(`CLI sources missing ${sub}`)
466
469
  }
467
470
  if (!JSON.parse(read('package.json')).bin.fde) fail('package.json must expose the fde bin')
@@ -499,7 +502,7 @@ if (!fs.existsSync(path.join(root, 'mcp', 'fdeops-ingest', 'server.js'))) {
499
502
  } else if (!fs.existsSync(path.join(root, 'skills', 'fde', 'references', 'ingest-connect.md'))) {
500
503
  fail('skills/fde/references/ingest-connect.md missing')
501
504
  } else {
502
- for (const recipe of ['file.md', 'granola.md', 'notion.md']) {
505
+ for (const recipe of ['file.md', 'granola.md', 'slack.md', 'notion.md']) {
503
506
  if (!fs.existsSync(path.join(root, 'mcp', 'recipes', recipe))) fail(`mcp/recipes/${recipe} missing`)
504
507
  }
505
508
  if (!read('README.md').includes('mcp/recipes')) fail('README must point at mcp/recipes for connect clarity')