fdeops 3.26.0 → 3.27.1

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,244 +1,139 @@
1
1
  # FDEOps
2
2
 
3
- **One client record, from first meeting to handover.**
3
+ **Forward deployed engineering skills for AI coding agents.**
4
4
 
5
- FDEOps helps a Forward Deployed Engineer or independent expert manage client work with an AI coding agent. Keep the brief, decisions, delivery evidence, acceptance, and next actions together across repositories and sessions.
5
+ Your agent writes code. FDEOps helps you deliver the client work around it: understand the problem, agree what done means, prove the result, and hand it over.
6
6
 
7
- One `@fde` skill guides the work. A local CLI records it in Markdown. A read-only dashboard shows one client or your portfolio. You review judgments and obtain customer approval; the tool does not decide for them.
7
+ <a name="who-this-is-for"></a>
8
8
 
9
- <img width="1536" height="1024" alt="fdeops" src="https://github.com/user-attachments/assets/2bcb8739-55ee-445d-8a1a-8b38433b7b58" />
9
+ An open-source kit for FDEs, independent consultants, and small agencies working across client projects. Use it with your coding agent. Keep a separate record for each client on your own laptop.
10
10
 
11
- ---
11
+ [Install](#quick-start) · [See the dashboard](#your-daily-fieldbook) · [Documentation](docs/README.md)
12
12
 
13
- ## Quick Start
13
+ <img width="960" height="640" alt="FDEOps: forward deployed engineering from the first client meeting to handover" src="https://github.com/user-attachments/assets/2bcb8739-55ee-445d-8a1a-8b38433b7b58" />
14
14
 
15
- **Inspect a repository first.** Requires Node.js 18+ and Git. Run from a local repository:
15
+ ## Why use it?
16
16
 
17
- ```bash
18
- npx fdeops scan
19
- ```
17
+ - **Pick up where you left off.** The brief, decisions, risks, and next action travel with the client record, across sessions and agents.
18
+ - **Know what you can stand behind.** Keep what was promised, what was measured, and what the customer accepted separate, with evidence for each result.
19
+ - **See what needs you today.** An offline dashboard shows the next step and missing evidence, measurement, or approval across your clients.
20
20
 
21
- `npx` may download the package. The scan itself reads local files, prints reconnaissance and questions, and does not write engagement records.
21
+ ## Quick Start
22
22
 
23
- **Then install the skill:**
23
+ Requires Node.js 18+, Git, and an AI coding agent that supports skills. Install the FDEOps skill:
24
24
 
25
25
  ```bash
26
26
  npx skills add suboss87/fdeops --skill fde
27
27
  ```
28
28
 
29
- One chat. Name the client:
29
+ Open a client workspace and tell your agent:
30
30
 
31
31
  ```text
32
32
  @fde this is client01
33
33
  ```
34
34
 
35
- The agent creates and binds `~/fde-engagements/client01/.fde/` to the workspace. Paste kickoff notes; review the proposed decisions, risks, and next actions before saving. If setup cannot run in your host, use `npx fdeops resume --init client01` to create the engagement and binding.
36
-
37
- Open the engagement fieldbook anytime:
38
-
39
- ```bash
40
- npx fdeops dashboard --open
41
- ```
42
-
43
- Read-only HTML of the record - promised, measured, accepted, and evidence. Regenerate after you change memory. Day to day: [docs/USAGE.md](docs/USAGE.md).
44
-
45
- <details>
46
- <summary><b>Claude Code</b></summary>
47
-
48
- ```text
49
- /plugin marketplace add suboss87/fdeops
50
- /plugin install fdeops@fdeops
51
- ```
52
-
53
- The plugin registers Claude Code session hooks and slash commands. A skill-only install does not register hooks.
35
+ The agent creates `~/fde-engagements/client01/.fde/` on your laptop and links the workspace to that client. Paste the brief or meeting notes into the same conversation. `@fde` works through the situation with you; you review the proposed record before it is applied.
54
36
 
55
- </details>
37
+ **Claude Code plugin or another host?** Follow the [installation guide](docs/install.md). It explains hooks, adapters, offline setup, and the CLI fallback if your agent cannot run setup. Skill-only installation does not add automatic session hooks.
56
38
 
57
- <details>
58
- <summary><b>Cursor</b></summary>
59
-
60
- After the skill install, in the **client repo** you have open (pointer, not a second pack):
39
+ **Try it without an AI model:**
61
40
 
62
41
  ```bash
63
- npx fdeops adapters .
42
+ npx fdeops demo
64
43
  ```
65
44
 
66
- See [adapters/](adapters/README.md).
45
+ The demo runs fictional notes through review, applies them in a sandbox, and prints a fieldbook path to open. It writes and resets only its demo folder under `~/fde-engagements/.demo/`. Remove the demo with `npx fdeops demo --clean`. `npx` may download packages; the FDEOps CLI itself works locally.
67
46
 
68
- </details>
47
+ ⭐ **If FDEOps makes your client work easier, star the repo.**
69
48
 
70
- <details>
71
- <summary><b>Clone install and offline use</b></summary>
49
+ ## What a working day looks like
72
50
 
73
- ```bash
74
- git clone https://github.com/suboss87/fdeops.git
75
- cd fdeops
76
- node bin/install.js
77
- ```
51
+ You come out of a meeting with this:
78
52
 
79
- If the agent cannot create the folder:
80
-
81
- ```bash
82
- npx fdeops resume --init client01 # ~/fde-engagements/client01
53
+ ```text
54
+ @fde Mara wants CSV upload first. Devon asked for ERP sync,
55
+ but Mara has not approved that scope. The staging replay took
56
+ five minutes; production has not been measured. Ask Mara for
57
+ staging access before Friday. Source: kickoff meeting, 10 September.
83
58
  ```
84
59
 
85
- For offline use, transfer the checkout first; cloning and package downloads need network access. Override: `FDEOPS_ENGAGEMENT`. See [docs/install.md](docs/install.md).
86
-
87
- </details>
88
-
89
- ---
90
-
91
- ## Commands
92
-
93
- One command per stage. Skills load automatically.
94
-
95
- Six stages organize the engagement: Land, Discover, Plan, Ship, Outcome, Close. Start with the current situation; revisit earlier decisions when the evidence changes. Slash commands below are provided by the Claude Code plugin. In other hosts, describe the same request to `@fde`.
96
-
97
- | What you're doing | Command | Stage |
98
- |-------------------|---------|-------|
99
- | First days. Get the brief. Name who signs. | `/brief` | Land |
100
- | Check the brief is the real job. | `/discover` | Discover |
101
- | Sequence from done, not from the ticket. | `/plan` | Plan |
102
- | Prove it on their staging, then go live. | `/ship` | Ship |
103
- | What you promised, measured, and who accepted. | `/outcome` | Outcome |
104
- | Hand it over. They run it without you. | `/close` | Close |
105
-
106
- Same `@fde`, when you need them: `/debrief` (notes into the record), `/prep` (one page before you walk in), `/trust` (process gap, or they stopped trusting you), `/receipts` (a dated line, or it did not happen), `/readout` (Friday page for the sponsor; not a seventh stage).
60
+ The agent shows you what changed, what was only requested, what is still unknown, and what happens next. You correct it and confirm the update. A request does not become agreed scope. A staging result does not become a production result. Naming a signer does not mean they accepted the work.
107
61
 
108
- You can also describe the situation in plain English: a new client, a POC, an incident, a scope change, or a question about what was agreed.
62
+ Tomorrow, `@fde` resumes from that record. Before a sponsor meeting, ask what was promised, what was measured, and where the proof is. When someone takes over, give them the handoff packet.
109
63
 
110
- ---
64
+ [Walk through notes → REVIEW → apply → evidence](docs/USAGE.md#new-here-5-minutes).
111
65
 
112
66
  ## Your daily fieldbook
113
67
 
114
- ![FDEOps dark dashboard showing next actions and attention gaps across three fictional clients](media/fieldbook-preview.png)
115
-
116
- *Fictional client records, shown in the built-in dark theme. The report works offline.*
117
-
118
- Read [verification results and limits](docs/verification.md) for context measurements, local-model observations, and MCP coverage.
119
-
120
- Open `npx fdeops dashboard --all --open` to review every client. Filter what needs attention, open a client, and copy **Continue next action** into your agent. After a meeting, use **Debrief notes**; before a sponsor update, use **Review outcome**. These buttons copy prompts; work runs in your agent. Review changes there and regenerate the dashboard afterward.
121
-
122
- ## Try the complete loop
68
+ ![Dark FDEOps fieldbook with one recommended action per client and the gaps behind it](media/fieldbook-preview.png)
123
69
 
124
70
  ```bash
125
- npx fdeops demo
126
- ```
127
-
128
- This writes fictional records and HTML under `~/fde-engagements/.demo/`, resetting its own sandbox on each run. It requires no AI account. Open the generated report; remove the demo later with `npx fdeops demo --clean`. Follow the [five-minute walkthrough](docs/USAGE.md#new-here-5-minutes) for what to inspect.
129
-
130
-
131
- ---
132
-
133
- ## All 30 Skills
134
-
135
- Not prompts to choose from: the router loads one relevant skill with concrete steps, an artifact, and a checkpoint. The [skills reference](docs/skills-reference.md) lists all 30, from discovery and scope control to incident response and handover. Industry and AI overlays apply when relevant.
136
-
137
- Optional external sources use your configured MCP connections. The agent pulls on request, stages the material, and asks you to review its interpretation before applying it. The CLI itself stays local. See [source recipes](mcp/recipes/) and [ingest usage](docs/USAGE.md#ingest-pull-large-artifacts--same-confirm-loop).
138
-
139
- ---
140
-
141
- ## How Skills Work
142
-
143
- One `@fde`. One file per situation. One folder per client.
144
-
71
+ npx fdeops dashboard --open # current client
72
+ npx fdeops dashboard --all --open # all clients
145
73
  ```
146
- "@fde this is client01" creates ~/fde-engagements/client01/.fde/
147
- /brief or English the AI coding agent loads skills/fde/SKILL.md
148
- │ routes. you never pick a skill by name
149
- ▼
150
- references/<one>.md one skill, then stop
151
- │
152
- ▼
153
- fde CLI (local) dates, gates, redacts. no network
154
- │ after you confirm
155
- ▼
156
- ~/fde-engagements/client01/.fde/
157
- │
158
- ▼
159
- fde dashboard --open offline fieldbook (read-only snapshot)
160
- ```
161
-
162
- **A dated line, or it did not happen.** Promised → measured → accepted, with evidence for the measurement. If it is not in `.fde/`, it is not on the record.
163
-
164
- **Review judgments before recording them.** The agent shows proposed interpretations for confirmation. Direct CLI writes execute when invoked; enabled session hooks also capture mechanical session state automatically. Recording a note does not establish customer approval.
165
-
166
- **The record is on your laptop.** Change hosts and keep the same Markdown. Claude Code plugins provide automatic session hooks; other hosts use `@fde` and CLI commands on demand. See the [install matrix](docs/install.md#who-needs-which-install).
167
-
168
- One skill hosts load: `skills/fde/SKILL.md`. It opens one file in `skills/fde/references/` and stops. Slash commands live in `.claude/commands/`. The local CLI is `bin/fde.js` (git + files, no network). Layout: [docs/REPO_LAYOUT.md](docs/REPO_LAYOUT.md).
169
74
 
170
- ---
75
+ Open a client, inspect its record, and copy an action into your agent to continue the work. The dashboard is a read-only snapshot. After updating the record, run the command again to refresh it. The screenshot uses fictional clients.
171
76
 
172
- ## Engagement memory (`.fde/`)
77
+ <a name="how-skills-work"></a>
173
78
 
174
- One folder per client. Plain markdown. Grep it, copy it, take it into a meeting.
79
+ ## From the first meeting to handover
175
80
 
176
- | File | Holds |
177
- |------|-------|
178
- | `context.md` | Where you are |
179
- | `brief.md` / `success.md` | What they asked; what “done” is and who signs |
180
- | `reality.md` / `terrain.md` | The real problem; the map |
181
- | `stakeholders.md` | `[signal:green\|amber\|red]` - worst active signal wins; empty is **new**, not green |
182
- | `trust-profile.md` | Sacred data, AI policy, approval chain |
183
- | `decisions.md` / `risks.md` / `delivery.md` | Dated choices; live risks; what shipped, evidence, rollback, acceptance |
81
+ Describe the situation to `@fde`; it selects the relevant workflow. You do not need to learn a catalog of skills.
184
82
 
185
- Schema: [docs/schema.md](docs/schema.md). Fieldbook: `npx fdeops dashboard --open` (bound) or `--all --open` (portfolio).
83
+ | Stage | What you work through |
84
+ |---|---|
85
+ | Land | Understand the brief and name who can accept the work |
86
+ | Discover | Check the actual workflow, constraints, and source of the problem |
87
+ | Plan | Agree a small deliverable and an observable test for “done” |
88
+ | Ship | Prove it on their staging, review release approval, and test recovery |
89
+ | Outcome | Compare promised and measured results; record customer acceptance |
90
+ | Close | Transfer the runbook, evidence, open risks, and operating ownership |
186
91
 
187
- ---
92
+ The Claude Code plugin also provides `/brief`, `/discover`, `/plan`, `/ship`, `/outcome`, and `/close`. Daily plugin shortcuts are `/debrief`, `/prep`, `/trust`, `/receipts`, and `/readout`. Other hosts use the same `@fde` entry and methodology.
188
93
 
189
- ## Who this is for
94
+ Each skill gives the agent steps to follow, a record to produce, and a checkpoint with you. There are 30 routed skills, plus industry overlays. Start with the [three delivery checklists](docs/skills.md#three-delivery-checklists); use the [full reference](docs/skills-reference.md) when you need the detail.
190
95
 
191
- Forward Deployed Engineers, independent consultants, and solo agencies delivering inside customer systems. Use a separate engagement folder for each client and a workspace binding to select the right record.
96
+ ## Use the CLI directly
192
97
 
193
- If you ship your own company's product from HQ, with no customer team that has to run it after you leave, you do not need this kit.
98
+ The CLI does the file work without calling a model. Commands that change records write when you run them; `debrief --smart` stages a proposal for review before `--apply`.
194
99
 
195
- ---
100
+ | You need to… | Run |
101
+ |---|---|
102
+ | Resume a client | `npx fdeops resume` |
103
+ | Review messy notes | `npx fdeops debrief --smart notes.md` |
104
+ | Apply the reviewed proposal | `npx fdeops debrief --apply` |
105
+ | Find a source | `npx fdeops recall "retry decision"` |
106
+ | Prepare a sponsor readout | `npx fdeops defend` |
107
+ | Check readiness to plan or build | `npx fdeops doctor --ready` |
108
+ | Export a successor packet | `npx fdeops handoff --out successor.md` |
196
109
 
197
- ## Your data stays yours
110
+ [All commands and examples](docs/USAGE.md).
198
111
 
199
- The **CLI** is local: git + files, no network, no telemetry. The **host model** sees `.fde/` the agent loads (usually a bounded `context.md`) and any client code you open. It must not see `<private>` blocks - redacted from CLI, dashboard, and hooks; do not paste them or open them with file tools. Keep the engagement folder outside cloud-sync locations unless customer policy permits that storage. Generated reports can still contain confidential information after redaction; review them before sharing.
112
+ For free-form notes, start with `@fde` so your agent can help interpret them. The CLI's `--smart` option recognizes common phrases; review its proposal because it can miss requests or next actions in ordinary prose.
200
113
 
201
- [PRIVACY.md](PRIVACY.md) · [SECURITY.md](SECURITY.md)
114
+ ## Your records, your control
202
115
 
203
- ---
116
+ Each client has its own `.fde/` folder of Markdown files. The brief, success criteria, decisions, risks, and delivery ledger stay readable outside FDEOps. The CLI uses local files and Git, with no network calls or telemetry. Optional [MCP sources](mcp/recipes/) are connected through your agent host, then pulled and reviewed on request.
204
117
 
205
- ## Principles
118
+ Default session context is capped at **16 KiB**, including constraints and selected records. Older detail stays on disk and can be retrieved with `recall`. This limits FDEOps output, not everything your agent puts into its context window.
206
119
 
207
- - **Who signs** - name them in the first days
208
- - **Brief vs real job** - check the floor, not only the slide
209
- - **Back from done** - sequence from signed-off, not from the ticket
210
- - **Their staging then live** - prove it where they operate, then go live
211
- - **Promised, measured, accepted** - a number nobody signed is claimed, not delivered; keep the evidence
212
- - **They run it** - if they cannot operate it without you, you are not done
213
- - **A dated line, or it did not happen** - these files get defended in the room
214
- - **One customer, one folder** - verify the active binding before writing
215
- - **The kit says what to check. You still decide.**
120
+ Your AI host may send what it reads to its configured model. FDEOps redacts `<private>` blocks from its CLI, hook, and dashboard outputs; do not paste or load raw private blocks through file tools. Enabled session hooks can record mechanical session state automatically. Review reports before sharing client information.
216
121
 
217
- ---
122
+ The CLI and dashboard need no model. The tested small local models produced wrong or incomplete answers; read the results before relying on one for client work. [Verification and limits](docs/verification.md) · [Privacy](PRIVACY.md) · [Security](SECURITY.md).
218
123
 
219
- ## Project Structure
124
+ ## Find your way around
220
125
 
221
- | Folder | Responsibility |
126
+ | You want to… | Start here |
222
127
  |---|---|
223
- | `skills/fde/` | One router and the delivery methodology |
224
- | `bin/` | Local CLI, installer, and shared helpers |
225
- | `templates/.fde/` | Client record templates |
226
- | `adapters/` and `hooks/` | Host entry points and session integration |
227
- | `mcp/` | Optional ingest wrapper and source recipes |
228
- | `test/` and `evals/` | Code regressions and workflow evaluations |
229
- | `docs/` and `examples/` | Usage, contributor guides, and fictional engagements |
230
-
231
- See [repository layout](docs/REPO_LAYOUT.md) for where to make changes.
232
-
233
-
234
- ---
235
-
236
- ## Contributing
237
-
238
- **[Subash Natarajan](https://www.linkedin.com/in/subashn/)**. [Issues](https://github.com/suboss87/fdeops/issues) · [Discussions](https://github.com/suboss87/fdeops/discussions) · [CONTRIBUTING.md](CONTRIBUTING.md) · [Code of Conduct](CODE_OF_CONDUCT.md)
128
+ | Install or use FDEOps | [Documentation](docs/README.md) |
129
+ | Understand or change a workflow | [The `@fde` skill](skills/fde/SKILL.md) and its `references/` |
130
+ | Work on the CLI or dashboard | [`bin/`](bin/), shared helpers in `bin/lib/`, regressions in [`test/`](test/) |
131
+ | Explore sample client records | [`examples/`](examples/) |
132
+ | Check measured behavior and known gaps | [`evals/`](evals/) and [verification](docs/verification.md) |
133
+ | Understand every folder | [Repository map](docs/REPO_LAYOUT.md) |
239
134
 
240
- Skills should be **specific** (actionable steps), **verifiable** (an artifact in `.fde/`), and **minimal**. The `fde` CLI stays local-only.
135
+ ## Contribute
241
136
 
242
- ## License
137
+ Share an anonymized failure case, a reproducible bug, or a focused improvement through [Issues](https://github.com/suboss87/FDEOps/issues) or [Discussions](https://github.com/suboss87/FDEOps/discussions). Read the [contribution guide](CONTRIBUTING.md) before changing a workflow or command.
243
138
 
244
- MIT - use these skills on client work.
139
+ Built and maintained by **[Subash Natarajan](https://github.com/suboss87)**. MIT licensed; preserve applicable notices when redistributing.
package/bin/check.js CHANGED
@@ -264,39 +264,28 @@ for (const m of readme.matchAll(/(?:\]\(|src=")([^)"#\s]+)(?:\)|")/g)) {
264
264
  if (brokenLinks.length) fail(`README links to missing paths: ${brokenLinks.join(', ')}`)
265
265
  else ok('README links all resolve')
266
266
 
267
- for (const section of [
268
- 'How Skills Work',
269
- 'Quick Start',
270
- 'Engagement memory',
271
- 'Who this is for',
272
- 'Commands',
273
- 'Principles',
274
- ]) {
275
- if (!readme.includes(section)) fail(`README missing section: ${section}`)
267
+ // Validate usable entry points, not a fixed heading order or marketing copy.
268
+ // Host-specific commands and advanced setup belong in the linked guides.
269
+ for (const target of ['docs/install.md', 'docs/USAGE.md', 'docs/REPO_LAYOUT.md', 'docs/verification.md', 'PRIVACY.md']) {
270
+ if (!readme.includes(target)) fail(`README must link its public guide: ${target}`)
276
271
  }
277
- if (!readme.includes('AI coding agent')) {
278
- fail('README must say AI coding agent (not ambiguous "agent")')
272
+ if (!readme.includes('AI coding agent') || !/FDE|Forward Deployed Engineer/i.test(readme)) {
273
+ fail('README must identify the tool and its intended users')
274
+ }
275
+ if (!/npx skills add suboss87\/fdeops --skill fde/.test(readme) || !/@fde\s+this is/.test(readme)) {
276
+ fail('README must show skill installation and how to start a client')
279
277
  }
280
- ok('README clarity sections')
281
-
282
278
  for (const cmd of ['/brief', '/discover', '/plan', '/ship', '/outcome', '/close', '/debrief', '/prep', '/trust', '/receipts', '/readout']) {
283
- if (!readme.includes(cmd)) fail(`README must document slash command ${cmd}`)
279
+ if (!(readme + usage).includes(cmd)) fail(`Public usage documentation missing slash command ${cmd}`)
284
280
  }
285
281
  if (/(^|[^\w/])\/got\b/.test(readme)) fail('README must use /outcome, not /got')
286
- ok('README slash commands documented')
287
-
288
- // Front-door map is the embed left-to-right (Land → Close). After the GitHub
289
- // poster (#68) the table is the map: /brief /discover /plan /ship /outcome /close.
290
- const front = readme.slice(0, 4000)
291
- if (!['/brief', '/discover', '/plan', '/ship', '/outcome', '/close'].every(c => front.includes(c))) {
292
- fail('README must include the Land→Close command map near the top')
293
- } else ok('README command-map diagram')
282
+ ok('README entry points and documented commands')
294
283
 
295
284
  if (readme.includes('your-client-repo')) {
296
285
  fail('README must not instruct install in customer repo (your-client-repo)')
297
286
  } else ok('README no customer-repo install')
298
287
 
299
- if (!readme.includes('fde-engagements') || !/fdeops.*init.*engagement/i.test(readme)) {
288
+ if (!readme.includes('fde-engagements') || !/fdeops.*resume --init/i.test(readme + read('docs/install.md'))) {
300
289
  fail('README must document fde-engagements + init flow')
301
290
  } else ok('README engagement path')
302
291
 
@@ -334,9 +323,9 @@ if (!fs.existsSync(path.join(root, 'docs', 'USAGE.md'))) {
334
323
  fail('docs/USAGE.md missing')
335
324
  } else ok('docs/USAGE.md')
336
325
 
337
- if (!readme.includes('FDEOPS_ENGAGEMENT')) {
338
- fail('README must document FDEOPS_ENGAGEMENT')
339
- } else ok('README FDEOPS_ENGAGEMENT')
326
+ if (!read('docs/install.md').includes('FDEOPS_ENGAGEMENT')) {
327
+ fail('Installation guide must document FDEOPS_ENGAGEMENT')
328
+ } else ok('Installation override documented')
340
329
 
341
330
  const badPhrases = ['team of ten', 'solo 100x', '100x engineer']
342
331
  for (const phrase of badPhrases) {
@@ -356,12 +345,6 @@ for (const rx of derivativeFraming) {
356
345
  if (/docs\/internal|PMF_360/i.test(readme)) {
357
346
  fail('README must not link docs/internal or PMF_360')
358
347
  }
359
- if (!/One command per stage/.test(readme) || !/Skills load automatically/.test(readme)) {
360
- fail('README must formulate Commands as: one command per stage, skills load automatically')
361
- }
362
- if (!/Not prompts/.test(readme)) {
363
- fail('README catalog must say skills are not prompts')
364
- }
365
348
  if (/\b(30|31|37)\s+methods\b|\broutes methods\b|\bphase methods\b|\bfield methods\b|\bengagement methods\b/.test(readme)) {
366
349
  fail('README must call the catalog skills, not methods')
367
350
  }