fdeops 3.11.1 → 3.15.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/AGENTS.md +1 -1
- package/README.md +189 -129
- package/adapters/AGENTS.md +4 -1
- package/adapters/GEMINI.md +4 -1
- package/adapters/LOCAL-LLM.md +1 -1
- package/adapters/README.md +2 -2
- package/adapters/copilot-instructions.md +4 -1
- package/adapters/cursor.fde.mdc +4 -2
- package/bin/check.js +74 -25
- package/bin/fde.js +92 -43
- package/bin/install.js +1 -1
- package/bin/lib/trust.js +3 -2
- package/mcp/fdeops-ingest/package.json +1 -1
- package/package.json +5 -2
- package/plugin.json +3 -3
- package/skills/fde/SKILL.md +80 -231
- package/skills/fde/references/pattern-extract.md +9 -9
- package/skills/fde/references/status.md +2 -0
- package/skills/fde/references/build.md +0 -154
- package/skills/fde/references/debug.md +0 -55
- package/skills/fde/references/observability.md +0 -103
- package/skills/fde/references/qa-live.md +0 -113
- package/skills/fde/references/security-audit.md +0 -105
- package/skills/fde/references/test-on-legacy.md +0 -108
package/AGENTS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AGENTS.md - working in the fdeops repository
|
|
2
2
|
|
|
3
|
-
This repository **is** fdeops
|
|
3
|
+
This repository **is** fdeops — the engagement record for Forward Deployed Engineers. One `@fde` skill, the `fde` CLI for deterministic work, and per-customer memory in `.fde/` as a side effect of the work (you still confirm judgment).
|
|
4
4
|
|
|
5
5
|
## If you are helping use fdeops in an engagement
|
|
6
6
|
|
package/README.md
CHANGED
|
@@ -1,183 +1,252 @@
|
|
|
1
1
|
# FDEOps
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Forward deployed engineering skills for AI coding agents.**
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
[](https://github.com/suboss87/fdeops/actions)
|
|
7
|
-
[](LICENSE)
|
|
8
|
-
[](https://nodejs.org)
|
|
5
|
+
Skills encode the workflows, quality gates, and judgment Forward Deployed Engineers use on someone else's site. Packaged so an AI coding agent follows them consistently — and writes a dated record you can defend. The host agent still writes the TypeScript.
|
|
9
6
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
+-----------+-----------+---------+----------+---------+
|
|
18
|
-
the fieldbook (.fde/) - one per engagement
|
|
19
|
-
written as a side effect of the work
|
|
7
|
+
```text
|
|
8
|
+
LAND DISCOVER PLAN SHIP PROVE CLOSE
|
|
9
|
+
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
|
|
10
|
+
│ Brief │ ───▶ │ Reality│ ───▶ │ Sequence│───▶ │ Live │ ───▶ │ Signed │ ───▶ │ They │
|
|
11
|
+
│ Trust │ │ Terrain│ │ Align │ │ slice │ │ off │ │ run │
|
|
12
|
+
└────────┘ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘
|
|
13
|
+
/brief /discover /plan /ship /got /close
|
|
20
14
|
```
|
|
21
15
|
|
|
22
16
|
---
|
|
23
17
|
|
|
24
|
-
##
|
|
18
|
+
## Commands
|
|
19
|
+
|
|
20
|
+
6 slash commands that map to the engagement. Each one loads `@fde`. You never pick a method.
|
|
25
21
|
|
|
26
|
-
|
|
22
|
+
| What you're doing | Command | Principle |
|
|
23
|
+
|-------------------|---------|-----------|
|
|
24
|
+
| Land the embed | `/brief` | Brief and trust before code |
|
|
25
|
+
| Find the real problem | `/discover` | Brief is a hypothesis |
|
|
26
|
+
| Plan the sequence | `/plan` | Backwards from done |
|
|
27
|
+
| Ship a slice | `/ship` | Pre-flight, then live |
|
|
28
|
+
| Prove what they got | `/got` | Promised → measured → accepted |
|
|
29
|
+
| Close the embed | `/close` | They can run it without you |
|
|
27
30
|
|
|
28
|
-
|
|
31
|
+
Also: `/debrief` (after a meeting) · `/prep` (walk-in) · `/quiet` (sponsor silent) · `/agreed` (scope dispute) · `/status` (Friday readout).
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
`@fde` plus English activates the same skill automatically. Ordinary TypeScript, unit tests, and git commits stay in the host agent.
|
|
31
34
|
|
|
32
35
|
---
|
|
33
36
|
|
|
34
|
-
##
|
|
37
|
+
## Quick Start
|
|
35
38
|
|
|
36
|
-
|
|
39
|
+
```bash
|
|
40
|
+
npx skills add suboss87/fdeops --skill fde
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Then one chat. Name the client. The AI coding agent binds.
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
@fde this is Acme
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Paste kickoff notes in the same thread. `@fde` routes; you confirm judgment. Same folder every time: `~/fde-engagements/<client>/.fde/`. Workflow: [docs/USAGE.md](docs/USAGE.md).
|
|
50
|
+
|
|
51
|
+
<details>
|
|
52
|
+
<summary><b>Claude Code (recommended)</b></summary>
|
|
37
53
|
|
|
38
54
|
```text
|
|
39
55
|
/plugin marketplace add suboss87/fdeops
|
|
40
56
|
/plugin install fdeops@fdeops
|
|
41
57
|
```
|
|
42
58
|
|
|
59
|
+
Hooks load where you left off. Slash commands match the map above.
|
|
60
|
+
|
|
61
|
+
</details>
|
|
62
|
+
|
|
63
|
+
<details>
|
|
64
|
+
<summary><b>Cursor</b></summary>
|
|
65
|
+
|
|
43
66
|
```bash
|
|
44
|
-
npx skills add suboss87/fdeops --skill fde
|
|
67
|
+
npx skills add suboss87/fdeops --skill fde
|
|
45
68
|
```
|
|
46
69
|
|
|
47
|
-
|
|
70
|
+
Or `npx fdeops adapters .` — [adapters/](adapters/README.md).
|
|
48
71
|
|
|
49
|
-
|
|
72
|
+
</details>
|
|
50
73
|
|
|
51
|
-
|
|
74
|
+
<details>
|
|
75
|
+
<summary><b>Other agents</b></summary>
|
|
52
76
|
|
|
53
77
|
```bash
|
|
54
|
-
npx fdeops
|
|
55
|
-
npx fdeops resume # where we are
|
|
78
|
+
npx skills add suboss87/fdeops --skill fde
|
|
56
79
|
```
|
|
57
80
|
|
|
58
|
-
|
|
81
|
+
Gemini, Copilot, Codex, local LLMs: [adapters/](adapters/README.md). Air-gapped: `git clone https://github.com/suboss87/fdeops.git && node bin/install.js`.
|
|
59
82
|
|
|
60
|
-
|
|
61
|
-
@fde New client. Payments platform. They want it live before the Q3 audit.
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
**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).
|
|
83
|
+
Fallback if the agent cannot bind:
|
|
65
84
|
|
|
66
|
-
|
|
67
|
-
|
|
85
|
+
```bash
|
|
86
|
+
npx fdeops resume --init acme # ~/fde-engagements/acme + bind this checkout
|
|
87
|
+
```
|
|
68
88
|
|
|
69
|
-
|
|
70
|
-
- **Local LLMs:** load `skills/fde/SKILL.md` - [guide](adapters/LOCAL-LLM.md)
|
|
71
|
-
- **Air-gapped:** `git clone https://github.com/suboss87/fdeops.git && cd fdeops && node bin/install.js`
|
|
72
|
-
- **No install:** `npx fdeops demo` · `npx fdeops scan` (heuristic recon, not findings)
|
|
73
|
-
- **Requires:** Node.js >= 18
|
|
74
|
-
- **Override:** `FDEOPS_ENGAGEMENT` - [docs/install.md](docs/install.md)
|
|
89
|
+
Requires Node.js >= 18. Override: `FDEOPS_ENGAGEMENT` — [docs/install.md](docs/install.md). Try the loop: `npx fdeops demo`.
|
|
75
90
|
|
|
76
91
|
</details>
|
|
77
92
|
|
|
78
93
|
---
|
|
79
94
|
|
|
80
|
-
##
|
|
95
|
+
## All 31 Methods
|
|
81
96
|
|
|
82
|
-
`@fde`
|
|
97
|
+
The commands above are the entry points. One `@fde` skill routes to these 31 methods — each a structured workflow with an artifact and a checkpoint. You never pick a method by name. Full detail: [docs/skills-reference.md](docs/skills-reference.md).
|
|
83
98
|
|
|
84
|
-
|
|
85
|
-
|------|--------------|--------------|
|
|
86
|
-
| **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. |
|
|
87
|
-
| **After a meeting** | `@fde` debrief these notes *(paste or attach)* | Proposed updates. You review, then confirm. |
|
|
88
|
-
| **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/) |
|
|
89
|
-
| **Before a stakeholder meeting** | `@fde` prep me for tomorrow with the sponsor | Brief from what you already logged. |
|
|
90
|
-
| **Scope dispute** | `@fde` when did we agree to drop that? | Dated answers, or a clear gap. |
|
|
91
|
-
| **End of week** | `@fde` draft the sponsor update from the record | Status grounded in what happened. |
|
|
99
|
+
### Land
|
|
92
100
|
|
|
93
|
-
|
|
101
|
+
| Method | What it does | Use when |
|
|
102
|
+
|--------|--------------|----------|
|
|
103
|
+
| [land](skills/fde/references/land.md) | Interrogate the brief, map stakeholders, define success | New client, first meeting, just got the brief |
|
|
104
|
+
| [audit](skills/fde/references/audit.md) | Verify claims, find the load-bearing wall | Taking over, previous consultant left |
|
|
105
|
+
| [stakeholder-radar](skills/fde/references/stakeholder-radar.md) | Who decides, who blocks, who escalates | Need to know who matters |
|
|
106
|
+
| [trust-engineering](skills/fde/references/trust-engineering.md) | Observer → trusted; navigate AI policy | Need access or credibility |
|
|
107
|
+
| [scope-defense](skills/fde/references/scope-defense.md) | Scope receipts; the accumulation conversation | "Also can you…", timeline unchanged |
|
|
94
108
|
|
|
95
|
-
|
|
109
|
+
### Discover
|
|
96
110
|
|
|
97
|
-
|
|
111
|
+
| Method | What it does | Use when |
|
|
112
|
+
|--------|--------------|----------|
|
|
113
|
+
| [discover](skills/fde/references/discover.md) | Repo + workaround + the real problem | Brief feels wrong, shadow processes |
|
|
114
|
+
| [assumption-audit](skills/fde/references/assumption-audit.md) | Untested assumptions by blast radius | Brief feels too neat |
|
|
115
|
+
| [use-case-scoring](skills/fde/references/use-case-scoring.md) | Value × urgency × alignment / complexity | Everything is P0 |
|
|
116
|
+
| [sketch](skills/fde/references/sketch.md) | Kill the killer assumption in a day | Need to de-risk a direction |
|
|
98
117
|
|
|
99
|
-
|
|
100
|
-
- **The AI coding agent** routes to a method, does the work, and drafts the memory.
|
|
101
|
-
- **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)
|
|
102
|
-
- **You confirm.** Nothing enters the record unreviewed; `fde debrief --dry-run` shows the routing first.
|
|
118
|
+
### Plan
|
|
103
119
|
|
|
104
|
-
|
|
120
|
+
| Method | What it does | Use when |
|
|
121
|
+
|--------|--------------|----------|
|
|
122
|
+
| [plan](skills/fde/references/plan.md) | Backwards from done, PR-sized | What order, what is done |
|
|
123
|
+
| [business-case](skills/fde/references/business-case.md) | Cost of nothing → investment → return | Defend budget or timeline |
|
|
124
|
+
| [options-analysis](skills/fde/references/options-analysis.md) | Three genuine options | "What should we do?" |
|
|
125
|
+
| [initiative-triage](skills/fde/references/initiative-triage.md) | Pick three from twenty urgents | Everything is urgent |
|
|
105
126
|
|
|
106
|
-
###
|
|
127
|
+
### Ship
|
|
107
128
|
|
|
108
|
-
|
|
129
|
+
| Method | What it does | Use when |
|
|
130
|
+
|--------|--------------|----------|
|
|
131
|
+
| [incremental-build](skills/fde/references/incremental-build.md) | Vertical slices, visible every 2–3 days | Large feature on their codebase |
|
|
132
|
+
| [blast-radius](skills/fde/references/blast-radius.md) | Impact from contained → irreversible | Touching shared infrastructure |
|
|
133
|
+
| [rescue](skills/fde/references/rescue.md) | Production fire or trust fire | Down, or they went quiet |
|
|
134
|
+
| [ship](skills/fde/references/ship.md) | Intent vs diff, pre-flight, rollback | Going live |
|
|
135
|
+
| [review](skills/fde/references/review.md) | Did we only build what we agreed | Before merge, scope creep |
|
|
136
|
+
| [rollback-drill](skills/fde/references/rollback-drill.md) | Test the escape route before 2am | "We can always revert" |
|
|
109
137
|
|
|
110
|
-
|
|
111
|
-
|---|---|---|
|
|
112
|
-
| Fieldbook, methods, CLI, dashboard | yes | yes |
|
|
113
|
-
| Context loaded before you type | session hooks | you say `@fde` / `resume` |
|
|
114
|
-
| Snapshot on session end | session hooks | `@fde` capture, or `fde capture` |
|
|
115
|
-
| Pull from Granola / Slack / Notion | you add that source MCP; FDEOps only ingests | same |
|
|
138
|
+
### Prove
|
|
116
139
|
|
|
117
|
-
|
|
140
|
+
| Method | What it does | Use when |
|
|
141
|
+
|--------|--------------|----------|
|
|
142
|
+
| [status](skills/fde/references/status.md) | Promised → measured → accepted | Friday, sponsor update |
|
|
143
|
+
| [demo-prep](skills/fde/references/demo-prep.md) | One number, five hard questions | Demo or exec walkthrough |
|
|
144
|
+
| [debrief](skills/fde/references/debrief.md) | Meeting notes into the record | Just left a meeting |
|
|
145
|
+
| [exec-narrative](skills/fde/references/exec-narrative.md) | Board / sponsor's boss | Justify continued investment |
|
|
146
|
+
| [dashboard](skills/fde/references/dashboard.md) | Portfolio, trust-ordered | All my customers |
|
|
147
|
+
| [ingest](skills/fde/references/ingest.md) | Pull text you confirm | Transcript, Notion, Slack |
|
|
148
|
+
| [ingest-connect](skills/fde/references/ingest-connect.md) | Wire a source MCP | Connect Granola |
|
|
118
149
|
|
|
119
|
-
|
|
120
|
-
<summary>Phase verbs (land → close)</summary>
|
|
150
|
+
### Close
|
|
121
151
|
|
|
122
|
-
|
|
|
123
|
-
|
|
124
|
-
|
|
|
125
|
-
|
|
|
126
|
-
|
|
|
127
|
-
|
|
|
128
|
-
|
|
|
129
|
-
| **close** | Handoff, retro, receipts that survive you |
|
|
152
|
+
| Method | What it does | Use when |
|
|
153
|
+
|--------|--------------|----------|
|
|
154
|
+
| [close](skills/fde/references/close.md) | Handoff that survives you | Wrapping up |
|
|
155
|
+
| [handoff-engineering](skills/fde/references/handoff-engineering.md) | Runbook, confidence scoring | They must operate without you |
|
|
156
|
+
| [multi-customer-ops](skills/fde/references/multi-customer-ops.md) | Switch without bleed | 2+ clients |
|
|
157
|
+
| [pattern-extract](skills/fde/references/pattern-extract.md) | If you did it twice, encode it | It will apply again |
|
|
158
|
+
| [red-team](skills/fde/references/red-team.md) | Stress-test before they do | "Poke holes in this" |
|
|
130
159
|
|
|
131
|
-
Overlays (
|
|
160
|
+
Overlays (on signal, not on request): [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) · [eval-pack](skills/fde/references/eval-pack.md)
|
|
132
161
|
|
|
133
|
-
|
|
162
|
+
Optional pull: you add the source MCP; we **pull** on request. [mcp/recipes/](mcp/recipes/)
|
|
134
163
|
|
|
135
164
|
---
|
|
136
165
|
|
|
137
|
-
##
|
|
166
|
+
## How it works
|
|
138
167
|
|
|
139
|
-
|
|
168
|
+
Every method follows the same anatomy:
|
|
140
169
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
170
|
+
```
|
|
171
|
+
┌─────────────────────────────────────────────┐
|
|
172
|
+
│ @fde (one skill) │
|
|
173
|
+
│ │
|
|
174
|
+
│ ┌─ Frontmatter ─────────────────────────┐ │
|
|
175
|
+
│ │ name: fde │ │
|
|
176
|
+
│ │ description: Use when [client work] │ │
|
|
177
|
+
│ └───────────────────────────────────────┘ │
|
|
178
|
+
│ │
|
|
179
|
+
│ Commands load it. English loads it. │
|
|
180
|
+
│ You confirm. Then .fde/ is written. │
|
|
181
|
+
└─────────────────────────────────────────────┘
|
|
182
|
+
│
|
|
183
|
+
▼
|
|
184
|
+
references/<method>.md fde CLI (local)
|
|
185
|
+
one file, then stop dating, gates, redaction
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
- **Process, not prose.** Methods are workflows with an artifact and a checkpoint.
|
|
189
|
+
- **You confirm.** Nothing is written until you say so.
|
|
190
|
+
- **Progressive disclosure.** `SKILL.md` is the entry point. One `references/*.md` loads when routed.
|
|
191
|
+
- **Local CLI.** Writes, receipts, status. Zero model tokens. The AI coding agent runs it.
|
|
149
192
|
|
|
150
|
-
|
|
193
|
+
The record lives at `~/fde-engagements/<client>/.fde/` — not inside any vendor. Change hosts, install `@fde` on the new one, bind if needed, keep talking.
|
|
194
|
+
|
|
195
|
+
**Words used here, once:** *engagement* - one client's body of work, one folder. *Fieldbook* - that folder (`.fde/`), the record itself. *Brief vs reality* - what they said the problem was, and what it turned out to be. *Terrain* - their systems and org as you actually found them. *Trust signal* - green / amber / red on one relationship. *Receipts* - the dated line proving something was agreed. *Vault* - the Obsidian copy `fde vault` generates to read it all in one window.
|
|
151
196
|
|
|
152
197
|
---
|
|
153
198
|
|
|
154
|
-
##
|
|
199
|
+
## Project Structure
|
|
155
200
|
|
|
156
|
-
|
|
201
|
+
```
|
|
202
|
+
fdeops/
|
|
203
|
+
├── skills/fde/ # the one skill
|
|
204
|
+
│ ├── SKILL.md # router
|
|
205
|
+
│ └── references/ # 31 methods + overlays
|
|
206
|
+
├── .claude/commands/ # slash commands (each loads @fde)
|
|
207
|
+
├── bin/fde.js # local CLI — git + files, no network
|
|
208
|
+
├── hooks/ # session-start / session-stop / pre-compact
|
|
209
|
+
├── adapters/ # Cursor, Gemini, Copilot, Codex pointers
|
|
210
|
+
├── templates/.fde/ # memory files created on bind
|
|
211
|
+
└── docs/ # usage, schema, install
|
|
212
|
+
```
|
|
157
213
|
|
|
158
|
-
|
|
159
|
-
<summary>All 37 methods</summary>
|
|
214
|
+
---
|
|
160
215
|
|
|
161
|
-
|
|
162
|
-
|--------|---------|
|
|
163
|
-
| **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) |
|
|
164
|
-
| **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) |
|
|
165
|
-
| **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) |
|
|
166
|
-
| **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) |
|
|
167
|
-
| **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) |
|
|
168
|
-
| **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) |
|
|
216
|
+
## Why this exists
|
|
169
217
|
|
|
170
|
-
|
|
218
|
+
### 1. The brief is wrong
|
|
171
219
|
|
|
172
|
-
|
|
220
|
+
The most common failure on an embed is building the portal they asked for. Ops has been running a spreadsheet for two years. `/brief` then `/discover` — who in their company would have to agree it worked?
|
|
221
|
+
|
|
222
|
+
### 2. They went quiet
|
|
223
|
+
|
|
224
|
+
A sponsor who stops answering is not a Jira gap. It is a trust color. `/quiet` — process vs trust, then a dated signal in the record.
|
|
225
|
+
|
|
226
|
+
### 3. When did we agree?
|
|
227
|
+
|
|
228
|
+
Arguments from memory lose. `/agreed` searches dated receipts. No hit is a gap, not proof.
|
|
229
|
+
|
|
230
|
+
### 4. What did they get?
|
|
231
|
+
|
|
232
|
+
A number only you agree with is claimed, not delivered. `/got` reads promised → measured → accepted out loud.
|
|
173
233
|
|
|
174
234
|
---
|
|
175
235
|
|
|
176
|
-
##
|
|
236
|
+
## Engagement memory (`.fde/`)
|
|
177
237
|
|
|
178
|
-
|
|
238
|
+
One folder per client. Plain markdown. Grep it, copy it, defend it.
|
|
179
239
|
|
|
180
|
-
|
|
240
|
+
| File | Holds |
|
|
241
|
+
|------|-------|
|
|
242
|
+
| `context.md` | Where you are |
|
|
243
|
+
| `brief.md` / `success.md` | What they asked; what “done” is and who signs |
|
|
244
|
+
| `reality.md` / `terrain.md` | The real problem; the map |
|
|
245
|
+
| `stakeholders.md` | `[signal:green\|amber\|red]` |
|
|
246
|
+
| `trust-profile.md` | Sacred data, AI policy, approval chain |
|
|
247
|
+
| `decisions.md` / `risks.md` / `delivery.md` | Dated choices; live risks; what shipped and how it rolls back |
|
|
248
|
+
|
|
249
|
+
Schema: [docs/schema.md](docs/schema.md). Local HTML: `npx fdeops dashboard`.
|
|
181
250
|
|
|
182
251
|
---
|
|
183
252
|
|
|
@@ -185,38 +254,29 @@ Overlays: [ai](skills/fde/references/ai.md) · [artifacts](skills/fde/references
|
|
|
185
254
|
|
|
186
255
|
| You are | What this is |
|
|
187
256
|
|---------|----------------|
|
|
188
|
-
| **Forward Deployed Engineer** |
|
|
257
|
+
| **Forward Deployed Engineer** | Client work that has to survive Monday morning |
|
|
189
258
|
| **Consultant / contractor on site** | The engagement stops resetting every morning |
|
|
190
259
|
| **Solutions architect** | Politics and architecture in the same record |
|
|
191
|
-
| **Agency, 3
|
|
260
|
+
| **Agency, 3–5 clients** | One `.fde/` each — they stop blurring |
|
|
192
261
|
| **Fractional CTO on client work** | System of record for the embed, and the billable trail |
|
|
193
262
|
|
|
194
263
|
---
|
|
195
264
|
|
|
196
265
|
## Your data stays yours
|
|
197
266
|
|
|
198
|
-
|
|
199
|
-
- **Plain markdown.** No database, no lock-in, nothing to export.
|
|
200
|
-
- **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.
|
|
201
|
-
- **Know the sync surface.** `~/fde-engagements` lives in `$HOME`. iCloud or Dropbox is an NDA incident waiting; `resume --init` warns you.
|
|
267
|
+
Local only — `git` + files, no network, no telemetry. Plain markdown. The model sees client code only when you point the AI coding agent at it. `<private>` is redacted from CLI, dashboard, and hooks. Nothing is written until you confirm. `~/fde-engagements` is in `$HOME`; iCloud/Dropbox is an NDA incident waiting.
|
|
202
268
|
|
|
203
|
-
[PRIVACY.md](PRIVACY.md)
|
|
269
|
+
[PRIVACY.md](PRIVACY.md) · [SECURITY.md](SECURITY.md)
|
|
204
270
|
|
|
205
271
|
---
|
|
206
272
|
|
|
207
273
|
## Principles
|
|
208
274
|
|
|
209
|
-
- **The artifact is the memory**
|
|
210
|
-
- **Methods, not autonomy**
|
|
211
|
-
- **Brief is a hypothesis**
|
|
212
|
-
- **Evidence on every claim**
|
|
213
|
-
- **One customer, one folder**
|
|
214
|
-
|
|
215
|
-
---
|
|
216
|
-
|
|
217
|
-
## Updating
|
|
218
|
-
|
|
219
|
-
Re-run the Quickstart install, or from a clone: `git pull && node bin/install.js`
|
|
275
|
+
- **The artifact is the memory** — producing the work and recording it are one action
|
|
276
|
+
- **Methods, not autonomy** — the kit says what to check; judgment stays yours
|
|
277
|
+
- **Brief is a hypothesis** — discover before building the wrong thing
|
|
278
|
+
- **Evidence on every claim** — these files get defended in the room
|
|
279
|
+
- **One customer, one folder** — context never bleeds
|
|
220
280
|
|
|
221
281
|
---
|
|
222
282
|
|
|
@@ -224,8 +284,8 @@ Re-run the Quickstart install, or from a clone: `git pull && node bin/install.js
|
|
|
224
284
|
|
|
225
285
|
**[Subash Natarajan](https://www.linkedin.com/in/subashn/)**. [Issues](https://github.com/suboss87/fdeops/issues) · [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
226
286
|
|
|
227
|
-
|
|
287
|
+
Methods should be **specific** (actionable steps), **verifiable** (an artifact in `.fde/`), and **minimal**. The `fde` CLI stays local-only.
|
|
228
288
|
|
|
229
|
-
|
|
289
|
+
## License
|
|
230
290
|
|
|
231
|
-
|
|
291
|
+
MIT — use these skills on client work.
|
package/adapters/AGENTS.md
CHANGED
|
@@ -4,10 +4,13 @@ You are the AI coding agent for a **Forward Deployed Engineer (FDE)** - the huma
|
|
|
4
4
|
|
|
5
5
|
## Entry
|
|
6
6
|
|
|
7
|
-
When the FDE types **`@fde
|
|
7
|
+
When the FDE types **`@fde`**, names a client, pastes meeting notes, asks what was agreed, or describes embed work (quiet sponsor, brief feels wrong, Friday update) — load the skill. If `fde resume` says NO ENGAGEMENT: ask the client name once, then **you** run `fde resume --init <slug>`. Never tell them to type it.
|
|
8
|
+
|
|
9
|
+
Do **not** load `@fde` for ordinary code edits, TypeScript, unit tests, refactors, or git commits.
|
|
8
10
|
|
|
9
11
|
- Skill (single source of truth): `~/.claude/skills/fde/SKILL.md`
|
|
10
12
|
- **Never ask the FDE to pick a skill.** Read the situation, route silently, do the work.
|
|
13
|
+
- **Never ask the FDE to type `fde …` commands.** You run the local CLI; they confirm judgment in chat.
|
|
11
14
|
|
|
12
15
|
## Engagement memory
|
|
13
16
|
|
package/adapters/GEMINI.md
CHANGED
|
@@ -4,10 +4,13 @@ Context for Gemini CLI when assisting a **Forward Deployed Engineer (FDE)** - th
|
|
|
4
4
|
|
|
5
5
|
## Entry
|
|
6
6
|
|
|
7
|
-
When the FDE types **`@fde
|
|
7
|
+
When the FDE types **`@fde`**, names a client, pastes meeting notes, asks what was agreed, or describes embed work (quiet sponsor, brief feels wrong, Friday update) — load the skill. If `fde resume` says NO ENGAGEMENT: ask the client name once, then **you** run `fde resume --init <slug>`. Never tell them to type it.
|
|
8
|
+
|
|
9
|
+
Do **not** load `@fde` for ordinary code edits, TypeScript, unit tests, refactors, or git commits.
|
|
8
10
|
|
|
9
11
|
- Skill (single source of truth): `~/.claude/skills/fde/SKILL.md`
|
|
10
12
|
- **Never ask the FDE to pick a skill.** Read the situation, route silently, do the work.
|
|
13
|
+
- **Never ask the FDE to type `fde …` commands.** You run the local CLI; they confirm judgment in chat.
|
|
11
14
|
|
|
12
15
|
## Engagement memory
|
|
13
16
|
|
package/adapters/LOCAL-LLM.md
CHANGED
|
@@ -62,7 +62,7 @@ The model reads SKILL.md, routes to the right skill, and produces artifacts in y
|
|
|
62
62
|
|
|
63
63
|
## Model size recommendations
|
|
64
64
|
|
|
65
|
-
The methodology is detailed (
|
|
65
|
+
The methodology is detailed (31 methods, routing logic, evidence format, memory contract). Larger models handle it better:
|
|
66
66
|
|
|
67
67
|
| Model class | Experience |
|
|
68
68
|
|-------------|-----------|
|
package/adapters/README.md
CHANGED
|
@@ -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 §
|
|
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 § How it works](../README.md#how-it-works).
|
|
6
6
|
|
|
7
7
|
## What goes where
|
|
8
8
|
|
|
@@ -31,4 +31,4 @@ Defaults to the current directory if no path is given. Existing files are never
|
|
|
31
31
|
|
|
32
32
|
## The principle
|
|
33
33
|
|
|
34
|
-
The adapter only tells the tool **where the brain is and how to behave**. All the method - the
|
|
34
|
+
The adapter only tells the tool **where the brain is and how to behave**. All the method - the 31 methods, the overlays, the memory contract - lives once in `skills/fde/SKILL.md`. Update the brain, every platform gets it. That's why fdeops feels native in whatever the FDE already uses, without five things to keep in sync.
|
|
@@ -4,10 +4,13 @@ You are the AI coding agent for a **Forward Deployed Engineer (FDE)** - the huma
|
|
|
4
4
|
|
|
5
5
|
## Entry
|
|
6
6
|
|
|
7
|
-
When the FDE types **`@fde
|
|
7
|
+
When the FDE types **`@fde`**, names a client, pastes meeting notes, asks what was agreed, or describes embed work (quiet sponsor, brief feels wrong, Friday update) — load the skill. If `fde resume` says NO ENGAGEMENT: ask the client name once, then **you** run `fde resume --init <slug>`. Never tell them to type it.
|
|
8
|
+
|
|
9
|
+
Do **not** load `@fde` for ordinary code edits, TypeScript, unit tests, refactors, or git commits.
|
|
8
10
|
|
|
9
11
|
- Skill (single source of truth): `~/.claude/skills/fde/SKILL.md`
|
|
10
12
|
- **Never ask the FDE to pick a skill.** Read the situation, route silently, do the work.
|
|
13
|
+
- **Never ask the FDE to type `fde …` commands.** You run the local CLI; they confirm judgment in chat.
|
|
11
14
|
|
|
12
15
|
## Engagement memory
|
|
13
16
|
|
package/adapters/cursor.fde.mdc
CHANGED
|
@@ -9,9 +9,11 @@ You are the AI coding agent for a **Forward Deployed Engineer (FDE)** - the huma
|
|
|
9
9
|
|
|
10
10
|
## Entry
|
|
11
11
|
|
|
12
|
-
When the FDE types **`@fde
|
|
12
|
+
When the FDE types **`@fde`**, names a client, pastes meeting notes, asks what was agreed, or describes embed work (quiet sponsor, brief feels wrong, Friday update) — load `@fde`. If `fde resume` says NO ENGAGEMENT: ask the client name once, then **you** run `fde resume --init <slug>`. Never tell them to type it.
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
Do **not** load `@fde` for ordinary code edits, unit tests, refactors, or git commits.
|
|
15
|
+
|
|
16
|
+
- Skill (single source of truth): `~/.claude/skills/fde/SKILL.md` (or the copy this install placed)
|
|
15
17
|
- **Never ask the FDE to pick a skill.** Read the situation, route silently, do the work.
|
|
16
18
|
- **Never ask the FDE to type `fde …` commands.** You run the local CLI; they confirm judgment in chat.
|
|
17
19
|
|