fdeops 3.9.3 → 3.9.5
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 +162 -93
- package/bin/check.js +17 -1
- package/hooks/session-start +6 -15
- package/package.json +1 -1
- package/skills/fde/SKILL.md +18 -10
package/README.md
CHANGED
|
@@ -1,156 +1,225 @@
|
|
|
1
|
-
#
|
|
1
|
+
# FDEOps
|
|
2
2
|
|
|
3
3
|
**Your AI coding agent forgets your client every morning. fdeops remembers.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/fdeops)
|
|
6
|
+
[](https://github.com/suboss87/fdeops/actions)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://nodejs.org)
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
CLI + one `@fde` skill + hooks over a local `.fde/` fieldbook - one folder per client. The **second brain for Forward Deployed Engineers** - engineers embedded at a client, from first meeting to final handoff. Works the same for consultants, agency developers, solutions architects, and fractional CTOs.
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
```
|
|
13
|
+
land discover plan build ship close
|
|
14
|
+
| | | | | |
|
|
15
|
+
+-----------+-----------+---------+----------+---------+
|
|
16
|
+
the fieldbook (.fde/) - one per engagement
|
|
17
|
+
written as a side effect of the work
|
|
18
|
+
```
|
|
10
19
|
|
|
11
|
-
|
|
20
|
+
**Glossary:** **fieldbook** = the `.fde/` folder · **TRIAGE** = trust + phase + next from memory · **receipts** = dated search of what you logged · **hooks** = auto load/capture at session start/end.
|
|
12
21
|
|
|
13
|
-
|
|
14
|
-
|------|-------------|
|
|
15
|
-
| **Monday** | Open agent → TRIAGE loads (trust, phase, next) |
|
|
16
|
-
| **After a meeting** | `fde debrief --smart notes.txt` → review → `--apply` |
|
|
17
|
-
| **Before a walk-in** | `fde prep "Denise sync"` |
|
|
18
|
-
| **Scope fight** | `fde receipts descope` (+ memory git hash) |
|
|
19
|
-
| **Friday** | `fde status` → sponsor update from the real record |
|
|
22
|
+
Describe your situation - `@fde` routes to the right method and writes the matching `.fde/` artifact. Phase methods (land → close) live in the skill; the CLI owns scan, memory, and receipts. You still confirm judgment - the fieldbook does not maintain itself without you.
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
---
|
|
22
25
|
|
|
23
|
-
|
|
24
|
-
<summary><strong>All methods (land → close)</strong> — below the fold</summary>
|
|
25
|
-
|
|
26
|
-
| Method | When |
|
|
27
|
-
|--------|------|
|
|
28
|
-
| `land` | First day — bind people, success, risks |
|
|
29
|
-
| `discover` | Map systems before you change them |
|
|
30
|
-
| `prep` | Start of week — week's focus from memory |
|
|
31
|
-
| `status` | Mid-engagement health check |
|
|
32
|
-
| `triage` | Something broke — decide in 60s |
|
|
33
|
-
| `debrief` | End of week — compound into memory |
|
|
34
|
-
| `garden` | Memory hygiene — archive stale / promote truth |
|
|
35
|
-
| `doctor` | Is `.fde/` healthy? |
|
|
36
|
-
| `ship` | Before the blast — challenge, then go |
|
|
37
|
-
| `red-team` | Adversarial pass before ship |
|
|
38
|
-
| `close` | Engagement ends — archive + handoff |
|
|
39
|
-
|
|
40
|
-
Full method map: [`docs/skills.md`](docs/skills.md)
|
|
26
|
+
## The week
|
|
41
27
|
|
|
42
|
-
|
|
28
|
+
What you actually run most days - the habit that compounds the fieldbook:
|
|
29
|
+
|
|
30
|
+
| When | What you do | Why it matters |
|
|
31
|
+
|------|-------------|----------------|
|
|
32
|
+
| **Monday** | Open your AI coding agent → TRIAGE loads (trust, phase, next) | Start where last week left off - no re-paste |
|
|
33
|
+
| **After a meeting** | `fde debrief --smart notes.txt` → review → `--apply` | Messy notes become dated decisions, risks, contacts |
|
|
34
|
+
| **Before a walk-in** | `fde prep "Denise sync"` | Walk in with memory, not a blank chat |
|
|
35
|
+
| **Scope fight** | `fde receipts descope` (+ memory git hash) | Answer "when did we agree?" from the record |
|
|
36
|
+
| **Friday** | `fde status` → sponsor update from the real record | Status from evidence, not memory theater |
|
|
37
|
+
|
|
38
|
+
Same engagement folder every time (`~/fde-engagements/<client>/.fde/`). Git versions it. Your AI coding agent reads it on every session.
|
|
43
39
|
|
|
44
40
|
---
|
|
45
41
|
|
|
46
42
|
## Quickstart
|
|
47
43
|
|
|
44
|
+
**1. Install** (pick one)
|
|
45
|
+
|
|
48
46
|
```bash
|
|
49
|
-
npx skills add suboss87/fdeops #
|
|
50
|
-
# or Claude: /plugin marketplace add suboss87/fdeops
|
|
51
|
-
npx fdeops resume --init haulline # bind this workspace → ~/fde-engagements/haulline
|
|
47
|
+
npx skills add suboss87/fdeops # Cursor, Codex, and skills-compatible agents
|
|
52
48
|
```
|
|
53
49
|
|
|
54
|
-
|
|
50
|
+
```text
|
|
51
|
+
/plugin marketplace add suboss87/fdeops # Claude Code
|
|
52
|
+
/plugin install fdeops@fdeops
|
|
53
|
+
```
|
|
55
54
|
|
|
56
|
-
**
|
|
55
|
+
**2. Bind** - once, inside the client workspace:
|
|
57
56
|
|
|
58
57
|
```bash
|
|
59
|
-
|
|
60
|
-
fdeops install --global
|
|
61
|
-
mkdir -p ~/fde-engagements && cd ~/fde-engagements
|
|
62
|
-
fdeops init acme
|
|
63
|
-
cd acme && git init && git add . && git commit -m "init engagement"
|
|
58
|
+
npx fdeops resume --init garvey # creates ~/fde-engagements/garvey engagement + binds workspace
|
|
64
59
|
```
|
|
65
60
|
|
|
66
|
-
|
|
67
|
-
|------|------|
|
|
68
|
-
| `--global` | Install once for your user |
|
|
69
|
-
| `--here` | This engagement only |
|
|
70
|
-
| *(default)* | Project + user, Claude Code |
|
|
71
|
-
|
|
72
|
-
<details>
|
|
73
|
-
<summary>Cursor · uninstall · upgrades · path override</summary>
|
|
61
|
+
**Verify:**
|
|
74
62
|
|
|
75
63
|
```bash
|
|
76
|
-
fdeops
|
|
77
|
-
fdeops uninstall # remove installed copies
|
|
78
|
-
fdeops upgrade # pull latest from npm
|
|
64
|
+
npx fdeops resume # should print TRIAGE (trust, phase, next) for garvey
|
|
79
65
|
```
|
|
80
66
|
|
|
81
|
-
|
|
67
|
+
**3. Work**
|
|
82
68
|
|
|
83
|
-
|
|
69
|
+
```text
|
|
70
|
+
@fde I just got the brief. New client, payments platform, they want it live before their Q3 audit.
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
`@fde` routes and writes `.fde/` artifacts - you confirm judgment. Use `npx fdeops …` until you want a short command: `npm i -g fdeops` (optional). Full workflow: [docs/USAGE.md](docs/USAGE.md).
|
|
74
|
+
|
|
75
|
+
<details>
|
|
76
|
+
<summary><strong>Other install paths</strong> · scan · env</summary>
|
|
77
|
+
|
|
78
|
+
- **Cursor / Codex / Copilot / Gemini CLI:** `npx fdeops adapters .` - [adapters/](adapters/README.md)
|
|
79
|
+
- **Local LLMs (Ollama, LM Studio, llama.cpp):** load `skills/fde/SKILL.md` as the system prompt - [guide](adapters/LOCAL-LLM.md)
|
|
80
|
+
- **Manual / air-gapped:** `git clone https://github.com/suboss87/fdeops.git && cd fdeops && node bin/install.js`
|
|
81
|
+
- **Try without install:** `npx fdeops scan` - day-1 recon (heuristic leads, not findings)
|
|
82
|
+
- **Requires:** [Node.js](https://nodejs.org) >= 18 for the CLI and adapters
|
|
83
|
+
- **Advanced:** `FDEOPS_ENGAGEMENT` overrides the workspace registry. Full matrix: [docs/install.md](docs/install.md)
|
|
84
84
|
|
|
85
85
|
</details>
|
|
86
86
|
|
|
87
87
|
---
|
|
88
88
|
|
|
89
|
-
##
|
|
89
|
+
## How it works
|
|
90
|
+
|
|
91
|
+
Three pieces on top of the fieldbook:
|
|
90
92
|
|
|
91
|
-
|
|
93
|
+
- **Session start** - a hook loads where you left off into your AI coding agent's context
|
|
94
|
+
- **Session end** - a hook captures what happened back into the fieldbook
|
|
95
|
+
- **`@fde`** - routes your situation to a field method; you confirm before memory sticks
|
|
96
|
+
- **CLI** - deterministic, offline (`scan`, `debrief`, `prep`, `receipts`, `status`)
|
|
92
97
|
|
|
93
|
-
|
|
98
|
+
fdeops complements repo memory: CLAUDE.md holds how the *code* works; the fieldbook holds how the *engagement* works.
|
|
99
|
+
|
|
100
|
+
Works with **Claude Code** · **Cursor** · **Copilot** · **Gemini CLI** · **Ollama** · **LM Studio** - any model that reads markdown.
|
|
101
|
+
|
|
102
|
+
<details>
|
|
103
|
+
<summary><strong>Phase verbs</strong> (land → close)</summary>
|
|
104
|
+
|
|
105
|
+
| Verb | When |
|
|
94
106
|
|------|------|
|
|
95
|
-
|
|
|
96
|
-
|
|
|
97
|
-
|
|
|
98
|
-
|
|
|
99
|
-
|
|
|
100
|
-
|
|
|
101
|
-
| `.fde/meta.json` | Phase, checksums, lock |
|
|
107
|
+
| **land** | First days at a new client - interrogate the brief, map stakeholders, define success |
|
|
108
|
+
| **discover** | The brief feels wrong - find the real problem, with evidence from the repo |
|
|
109
|
+
| **plan** | Scope agreed - sequence it backwards from success, in PR-sized slices |
|
|
110
|
+
| **build** | Ready to write code - declare blast radius, log deliveries as you ship |
|
|
111
|
+
| **ship** | Going to production - pre-flight, canary, tested rollback |
|
|
112
|
+
| **close** | Engagement ending - handoff doc, retrospective, receipts that survive you |
|
|
102
113
|
|
|
103
|
-
|
|
114
|
+
Overlays for regulated domains (AI, fintech, healthcare, government) activate on signal. Full matrix: [docs/skills.md](docs/skills.md).
|
|
104
115
|
|
|
105
|
-
|
|
116
|
+
</details>
|
|
106
117
|
|
|
107
118
|
---
|
|
108
119
|
|
|
109
|
-
##
|
|
120
|
+
## Engagement memory (`.fde/`)
|
|
121
|
+
|
|
122
|
+
The **fieldbook** - one folder per client, plain markdown you can read, grep, and take with you:
|
|
110
123
|
|
|
111
|
-
|
|
|
112
|
-
|
|
113
|
-
|
|
|
114
|
-
|
|
|
115
|
-
|
|
|
116
|
-
|
|
|
124
|
+
| File | Holds |
|
|
125
|
+
|------|-------|
|
|
126
|
+
| `context.md` | Where you are - loaded first every session |
|
|
127
|
+
| `brief.md` / `success.md` | What they asked for; what "done" means and who signs it off |
|
|
128
|
+
| `reality.md` / `terrain.md` | The real problem; the codebase map |
|
|
129
|
+
| `stakeholders.md` | Champions, resistance, `[signal:green\|amber\|red]` trust tokens |
|
|
130
|
+
| `trust-profile.md` | Sacred data, AI policy, approval chain |
|
|
131
|
+
| `decisions.md` / `risks.md` / `delivery.md` | Choices with dates; live risk register; what shipped and its rollback |
|
|
132
|
+
|
|
133
|
+
Every entry is dated and sourced, so you can defend it in front of skeptical stakeholders. Schema: [docs/schema.md](docs/schema.md).
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## The CLI
|
|
138
|
+
|
|
139
|
+
Commands that match **The week** (skill adds judgment on top):
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
fde resume # TRIAGE + load this workspace's engagement
|
|
143
|
+
fde resume --init <client> # create + bind + git-version .fde/
|
|
144
|
+
fde debrief --smart notes.md # propose routing → --apply to confirm
|
|
145
|
+
fde prep "Denise sync" # walk-in brief from existing memory
|
|
146
|
+
fde receipts <term> # dated search (gap ≠ proof of absence)
|
|
147
|
+
fde status # sponsor-ready triage (--all for portfolio)
|
|
148
|
+
fde scan # day-1 recon + ASK ON DAY 1 (works via npx)
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
<details>
|
|
152
|
+
<summary><strong>More commands</strong></summary>
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
fde triage # TRIAGE only (hooks / Cursor entry)
|
|
156
|
+
fde debrief notes.md # prefix router: decision: / risk: / delivery: / contact:
|
|
157
|
+
fde doctor # lint: stale signals, unset phase, gaps
|
|
158
|
+
fde log decision "…"
|
|
159
|
+
fde log contact "…" --signal amber
|
|
160
|
+
fde dashboard # FieldBook HTML (--all for every client)
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Optional: `export FDEOPS_ENGAGEMENTS_ROOT=~/path/to/engagements` to isolate from `~/fde-engagements`.
|
|
164
|
+
|
|
165
|
+
Each `.fde/` is a local git repo (no remote, no telemetry) - dated entries carry an author tag; every write commits so receipts are tamper-evident. Worst-of `[signal:...]` per stakeholder drives trust; signals older than 21 days show as stale.
|
|
166
|
+
|
|
167
|
+
</details>
|
|
168
|
+
|
|
169
|
+
<p align="center"><img src="media/terminal-demo.svg" alt="fde CLI - status, scan, dashboard" width="720"/></p>
|
|
170
|
+
|
|
171
|
+
`fde dashboard` (FieldBook) renders the **current** engagement by default. Pass `--all` for every client sorted by trust:
|
|
172
|
+
|
|
173
|
+
<p align="center"><img width="1336" height="624" alt="fde dashboard FieldBook" src="https://github.com/user-attachments/assets/5683614c-7730-4a3a-860d-185053a377eb" /></p>
|
|
117
174
|
|
|
118
175
|
---
|
|
119
176
|
|
|
120
177
|
## Who this is for
|
|
121
178
|
|
|
122
|
-
|
|
179
|
+
| You are... | What fdeops does for you |
|
|
180
|
+
|----------|-------------------|
|
|
181
|
+
| **Forward Deployed Engineer** | The role this was built for - the full lifecycle, first meeting to final handoff |
|
|
182
|
+
| **Consultant or contractor at a client site** | Remembers the engagement so you stop re-explaining it |
|
|
183
|
+
| **Solutions architect / engineer** | Methods for the politics as well as the architecture |
|
|
184
|
+
| **Agency developer running 3-5 clients** | One `.fde/` per client - details stop blurring |
|
|
185
|
+
| **Fractional CTO doing client work** | The fieldbook is your second brain - and your audit trail for billable work |
|
|
123
186
|
|
|
124
|
-
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Your data stays yours
|
|
190
|
+
|
|
191
|
+
- **Local only.** Pure `git` + file reads - no network calls, no telemetry, no account. Works air-gapped.
|
|
192
|
+
- **Plain markdown.** No database, no lock-in.
|
|
193
|
+
- **No new data path.** The AI sees client code only when *you* point your agent at it; `<private>`-tagged data never enters the model's context.
|
|
194
|
+
- **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.
|
|
195
|
+
- **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
|
+
|
|
197
|
+
Details: [PRIVACY.md](PRIVACY.md) · [SECURITY.md](SECURITY.md)
|
|
125
198
|
|
|
126
199
|
---
|
|
127
200
|
|
|
128
201
|
## Principles
|
|
129
202
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
203
|
+
- **The artifact is the memory** - producing work and recording it are one action
|
|
204
|
+
- **Methods, not autonomy** - each skill tells you what to check; the judgment, the trust, and the consequences stay yours
|
|
205
|
+
- **Brief is a hypothesis** - discover before building the wrong thing
|
|
206
|
+
- **Evidence on every claim** - these files get defended in front of skeptical clients
|
|
207
|
+
- **One customer, one folder** - context never bleeds
|
|
135
208
|
|
|
136
209
|
---
|
|
137
210
|
|
|
138
|
-
##
|
|
139
|
-
|
|
140
|
-
| Doc | |
|
|
141
|
-
|-----|--|
|
|
142
|
-
| [Install](docs/install.md) | Global, Cursor, upgrades |
|
|
143
|
-
| [Usage](docs/USAGE.md) | Methods in depth |
|
|
144
|
-
| [Skills](docs/skills.md) | `@fde` method reference |
|
|
145
|
-
| [CHANGELOG](CHANGELOG.md) | What changed |
|
|
211
|
+
## Updating
|
|
146
212
|
|
|
147
213
|
```bash
|
|
148
|
-
|
|
149
|
-
|
|
214
|
+
# Plugin / skills install: re-run the install command from Quickstart
|
|
215
|
+
# From a git clone:
|
|
216
|
+
cd fdeops && git pull && node bin/install.js
|
|
150
217
|
```
|
|
151
218
|
|
|
152
219
|
---
|
|
153
220
|
|
|
154
|
-
##
|
|
221
|
+
## Contributing
|
|
222
|
+
|
|
223
|
+
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).
|
|
155
224
|
|
|
156
|
-
MIT
|
|
225
|
+
[FDE Methodology](FDE-METHODOLOGY.md) - [ATTRIBUTION.md](ATTRIBUTION.md) - [SECURITY.md](SECURITY.md) - [PRIVACY.md](PRIVACY.md) - [Repo layout](docs/REPO_LAYOUT.md) - [Skills matrix](docs/skills.md) - MIT
|
package/bin/check.js
CHANGED
|
@@ -111,7 +111,7 @@ for (const section of [
|
|
|
111
111
|
'Quickstart',
|
|
112
112
|
'Engagement memory',
|
|
113
113
|
'Who this is for',
|
|
114
|
-
'
|
|
114
|
+
'The week',
|
|
115
115
|
'Principles',
|
|
116
116
|
]) {
|
|
117
117
|
if (!readme.includes(section)) fail(`README missing section: ${section}`)
|
|
@@ -205,6 +205,22 @@ const hook = read('hooks/session-start')
|
|
|
205
205
|
if (!hook.includes('FDEOPS_ENGAGEMENT')) {
|
|
206
206
|
fail('session-start hook must read FDEOPS_ENGAGEMENT env var')
|
|
207
207
|
} else ok('hook FDEOPS_ENGAGEMENT')
|
|
208
|
+
// Token discipline: SessionStart must not dump the full skill (L1 progressive disclosure).
|
|
209
|
+
// Strip comments before scanning for a real `cat …SKILL.md` / BOOTSTRAP inject.
|
|
210
|
+
const hookCode = hook.replace(/^[ \t]*#.*$/gm, '')
|
|
211
|
+
if (/\$\(cat\s+"\$BOOTSTRAP"\)|cat\s+"\$BOOTSTRAP"|cat\s+[^\n]*SKILL\.md/.test(hookCode)) {
|
|
212
|
+
fail('session-start must not cat SKILL.md - inject TRIAGE + bounded context + pointer only')
|
|
213
|
+
}
|
|
214
|
+
if (hookCode.includes('BOOTSTRAP=')) {
|
|
215
|
+
fail('session-start must not resolve BOOTSTRAP skill path for inject')
|
|
216
|
+
}
|
|
217
|
+
if (!hook.includes('invoke @fde')) {
|
|
218
|
+
fail('session-start must include a lean @fde pointer (not full skill)')
|
|
219
|
+
}
|
|
220
|
+
if (!/\btriage\b/.test(hook)) {
|
|
221
|
+
fail('session-start must still inject TRIAGE')
|
|
222
|
+
}
|
|
223
|
+
ok('session-start lean inject (no SKILL dump)')
|
|
208
224
|
|
|
209
225
|
// v3: write-side memory backstop
|
|
210
226
|
if (!fs.existsSync(path.join(root, 'hooks', 'session-stop'))) {
|
package/hooks/session-start
CHANGED
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# fdeops SessionStart -
|
|
2
|
+
# fdeops SessionStart - inject TRIAGE + bounded engagement context (not the full skill).
|
|
3
|
+
# Token discipline (L1 progressive disclosure): Claude/Cursor already discover @fde via
|
|
4
|
+
# skill metadata. Dumping skills/fde/SKILL.md here paid ~6-8k tokens every session even
|
|
5
|
+
# when the FDE was not doing field work. Load the skill body only when @fde triggers.
|
|
3
6
|
|
|
4
7
|
CONTEXT_FILE=""
|
|
5
|
-
BOOTSTRAP=""
|
|
6
|
-
|
|
7
|
-
for candidate in \
|
|
8
|
-
"${CLAUDE_PLUGIN_ROOT:+$CLAUDE_PLUGIN_ROOT/skills/fde/SKILL.md}" \
|
|
9
|
-
"$(dirname "$0")/../skills/fde/SKILL.md" \
|
|
10
|
-
"$HOME/.claude/skills/fde/SKILL.md"; do
|
|
11
|
-
if [ -n "$candidate" ] && [ -f "$candidate" ]; then
|
|
12
|
-
BOOTSTRAP="$candidate"
|
|
13
|
-
break
|
|
14
|
-
fi
|
|
15
|
-
done
|
|
16
8
|
|
|
17
9
|
resolve_engagement_dir() {
|
|
18
10
|
local raw="$1"
|
|
@@ -143,9 +135,8 @@ bounded_context() {
|
|
|
143
135
|
|
|
144
136
|
CONTENT=""
|
|
145
137
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
fi
|
|
138
|
+
# Lean pointer only - never cat SKILL.md. Methods load on @fde / skill trigger.
|
|
139
|
+
CONTENT="${CONTENT}fdeops: engagement fieldbook active. For field methods, invoke @fde (loads skills/fde/SKILL.md + one references/*.md). Plumbing is zero-token CLI: fde triage | resume | debrief | prep | receipts | status.\n\n"
|
|
149
140
|
|
|
150
141
|
# Same TRIAGE block as `fde resume` / `fde triage` - Monday morning must not
|
|
151
142
|
# depend on the model remembering to run a CLI command. Prefer the installed
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fdeops",
|
|
3
|
-
"version": "3.9.
|
|
3
|
+
"version": "3.9.5",
|
|
4
4
|
"description": "Field kit for engineers embedded in client work - a real CLI (recon, memory, portfolio), one @fde skill with field judgment on top, and hooks that make it automatic. Claude Code plugin and any agent that loads skills.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"fdeops": "bin/install.js",
|
package/skills/fde/SKILL.md
CHANGED
|
@@ -70,7 +70,7 @@ When NOT to interrogate or challenge: unambiguous one-liners, mechanical ops, FD
|
|
|
70
70
|
|
|
71
71
|
CLI missing → use the manual fallback commands inside each reference.
|
|
72
72
|
|
|
73
|
-
**Token model - where the cost goes.** Deterministic work is the CLI's job and costs **zero model tokens**: memory writes, recon, receipts, status, dashboard, and the bounded `fde resume`. Spend tokens only on judgment - reading the situation, routing, running the phase method, writing the artifact. Three rules keep a full day of FDE work cheap: load the router first and pull **one** reference only when you route to it; never dump a whole `.fde/` file into context - read the bounded resume, or `fde receipts <term>` for a targeted slice; don't re-read files you already have. The expensive model should fire for real decisions, not for plumbing the CLI already does.
|
|
73
|
+
**Token model - where the cost goes.** Deterministic work is the CLI's job and costs **zero model tokens**: memory writes, recon, receipts, status, dashboard, and the bounded `fde resume`. Session-start hooks inject **TRIAGE + bounded `context.md` + a one-line pointer** - never this full skill body (that loads only when `@fde` triggers). Spend tokens only on judgment - reading the situation, routing, running the phase method, writing the artifact. Three rules keep a full day of FDE work cheap: load the router first and pull **one** reference only when you route to it; never dump a whole `.fde/` file into context - read the bounded resume, or `fde receipts <term>` for a targeted slice; don't re-read files you already have. The expensive model should fire for real decisions, not for plumbing the CLI already does.
|
|
74
74
|
|
|
75
75
|
## Proactive intelligence (run on every session start)
|
|
76
76
|
|
|
@@ -146,19 +146,27 @@ The FDE can nod (zero friction) or correct ("billing-service too"). This replace
|
|
|
146
146
|
|
|
147
147
|
**Never:** fire multiple questions at once, probe where the answer doesn't change the work, repeat what's already in the artifacts, or slow down a confident FDE to prove you're being thorough. One well-placed observation beats five careful questions.
|
|
148
148
|
|
|
149
|
-
## Forward momentum
|
|
149
|
+
## Forward momentum (after writing memory)
|
|
150
150
|
|
|
151
|
-
After
|
|
151
|
+
After updating `.fde/` artifacts, suggest the ONE next move that accelerates the engagement - but only when the next step isn't already obvious to the FDE.
|
|
152
152
|
|
|
153
|
-
**
|
|
153
|
+
**Do this when:**
|
|
154
|
+
- The FDE just finished a phase and the natural next step saves them thinking time
|
|
155
|
+
- There's a dependency that unblocks faster if acted on now (access request, stakeholder conversation, spec generation)
|
|
156
|
+
- The engagement is at a decision point (plan needs approval, risk needs escalation)
|
|
154
157
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
| **ship** (pre-blast proceed) | `Next: set the pulse in delivery.md, or fde log contact if Denise hasn't seen the canary.` |
|
|
158
|
+
**Don't do this when:**
|
|
159
|
+
- The FDE is clearly in flow and already knows what's next
|
|
160
|
+
- You just finished a minor update (logging a risk, updating a signal)
|
|
161
|
+
- The next step is obvious from context (mid-build, next task in sequence)
|
|
160
162
|
|
|
161
|
-
**
|
|
163
|
+
**The format:** One line, directed, based on engagement state. Not a menu.
|
|
164
|
+
|
|
165
|
+
> "Updated. Terrain is mapped - ready to plan the slices, or does Denise need to see this first?"
|
|
166
|
+
|
|
167
|
+
> "Shipped and logged. Task 4 touches the billing module where that open risk sits. Worth addressing that before starting?"
|
|
168
|
+
|
|
169
|
+
> "Brief written. You don't have repo access yet - want me to draft the request or are you handling that?"
|
|
162
170
|
|
|
163
171
|
## Routing - 6 domains
|
|
164
172
|
|