fdeops 4.1.1 → 5.1.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 +2 -2
- package/README.md +85 -246
- package/bin/catalog-doc.js +38 -0
- package/bin/check.js +20 -49
- package/bin/fde.js +2 -2
- package/bin/generate-skills.js +11 -3
- package/bin/install.js +37 -3
- package/bin/skill-catalog.js +283 -16
- package/mcp/fdeops-ingest/package.json +1 -1
- package/package.json +2 -2
- package/plugin.json +1 -1
- package/skills/README.md +7 -0
- package/skills/audit/.fde-generated.json +10 -0
- package/skills/audit/SKILL.md +21 -0
- package/skills/audit/references/discover.md +112 -0
- package/skills/{fde-build → audit}/references/task-context.md +7 -1
- package/skills/board-memo/.fde-generated.json +10 -0
- package/skills/board-memo/SKILL.md +21 -0
- package/skills/{fde-debug → board-memo}/references/task-context.md +7 -1
- package/skills/brief/.fde-generated.json +9 -0
- package/skills/brief/SKILL.md +21 -0
- package/skills/brief/references/land.md +136 -0
- package/skills/{fde-discover → brief}/references/task-context.md +7 -1
- package/skills/{fde-build → build}/.fde-generated.json +2 -2
- package/skills/{fde-build → build}/SKILL.md +2 -2
- package/skills/{fde-evaluate → build}/references/task-context.md +7 -1
- package/skills/business-case/.fde-generated.json +9 -0
- package/skills/business-case/SKILL.md +21 -0
- package/skills/business-case/references/task-context.md +18 -0
- package/skills/connect/.fde-generated.json +12 -0
- package/skills/connect/SKILL.md +21 -0
- package/skills/connect/references/connect.md +24 -0
- package/skills/connect/references/debrief.md +91 -0
- package/skills/connect/references/ingest.md +75 -0
- package/skills/connect/references/source-setup.md +30 -0
- package/skills/connect/references/task-context.md +18 -0
- package/skills/dashboard/.fde-generated.json +9 -0
- package/skills/dashboard/SKILL.md +21 -0
- package/skills/dashboard/references/dashboard.md +40 -0
- package/skills/dashboard/references/task-context.md +18 -0
- package/skills/debrief/.fde-generated.json +12 -0
- package/skills/debrief/SKILL.md +21 -0
- package/skills/debrief/references/connect.md +24 -0
- package/skills/debrief/references/debrief.md +91 -0
- package/skills/debrief/references/ingest.md +75 -0
- package/skills/debrief/references/source-setup.md +30 -0
- package/skills/debrief/references/task-context.md +18 -0
- package/skills/{fde-debug → debug}/.fde-generated.json +2 -2
- package/skills/{fde-debug → debug}/SKILL.md +2 -2
- package/skills/debug/references/task-context.md +18 -0
- package/skills/demo-prep/.fde-generated.json +9 -0
- package/skills/demo-prep/SKILL.md +21 -0
- package/skills/demo-prep/references/demo-prep.md +31 -0
- package/skills/demo-prep/references/task-context.md +18 -0
- package/skills/discover/.fde-generated.json +10 -0
- package/skills/{fde-discover → discover}/SKILL.md +2 -2
- package/skills/discover/references/discover.md +112 -0
- package/skills/discover/references/task-context.md +18 -0
- package/skills/earn-trust/.fde-generated.json +9 -0
- package/skills/earn-trust/SKILL.md +21 -0
- package/skills/earn-trust/references/earn-trust.md +100 -0
- package/skills/earn-trust/references/task-context.md +18 -0
- package/skills/{fde-integrate → evaluate}/.fde-generated.json +2 -2
- package/skills/{fde-evaluate → evaluate}/SKILL.md +2 -2
- package/skills/evaluate/references/task-context.md +18 -0
- package/skills/fde/SKILL.md +11 -10
- package/skills/fde/references/connect.md +14 -24
- package/skills/fde/references/debrief.md +2 -0
- package/skills/fde/references/discover.md +66 -208
- package/skills/fde/references/ingest.md +4 -2
- package/skills/fde/references/plan.md +6 -6
- package/skills/fde/references/runbook.md +52 -120
- package/skills/fde/references/source-setup.md +30 -0
- package/skills/fde/references/task-context.md +7 -1
- package/skills/feedback/.fde-generated.json +9 -0
- package/skills/{fde-feedback → feedback}/SKILL.md +2 -2
- package/skills/feedback/references/task-context.md +18 -0
- package/skills/{fde-handoff → handoff}/.fde-generated.json +2 -2
- package/skills/{fde-handoff → handoff}/SKILL.md +2 -2
- package/skills/handoff/references/task-context.md +18 -0
- package/skills/ingest/.fde-generated.json +12 -0
- package/skills/ingest/SKILL.md +21 -0
- package/skills/ingest/references/connect.md +24 -0
- package/skills/ingest/references/debrief.md +91 -0
- package/skills/ingest/references/ingest.md +75 -0
- package/skills/ingest/references/source-setup.md +30 -0
- package/skills/ingest/references/task-context.md +18 -0
- package/skills/{fde-evaluate → integrate}/.fde-generated.json +2 -2
- package/skills/{fde-integrate → integrate}/SKILL.md +2 -2
- package/skills/integrate/references/task-context.md +18 -0
- package/skills/{fde-options → options}/.fde-generated.json +2 -2
- package/skills/{fde-options → options}/SKILL.md +2 -2
- package/skills/options/references/task-context.md +18 -0
- package/skills/plan/.fde-generated.json +10 -0
- package/skills/plan/SKILL.md +21 -0
- package/skills/plan/references/business-case.md +90 -0
- package/skills/{fde-poc → plan}/references/plan.md +6 -6
- package/skills/plan/references/task-context.md +18 -0
- package/skills/{fde-poc → poc}/.fde-generated.json +4 -4
- package/skills/{fde-poc → poc}/SKILL.md +2 -2
- package/skills/poc/references/audit.md +71 -0
- package/skills/poc/references/business-case.md +90 -0
- package/skills/poc/references/discover.md +112 -0
- package/skills/poc/references/plan.md +167 -0
- package/skills/poc/references/task-context.md +18 -0
- package/skills/prioritize/.fde-generated.json +10 -0
- package/skills/prioritize/SKILL.md +21 -0
- package/skills/prioritize/references/business-case.md +90 -0
- package/skills/prioritize/references/pick-three.md +95 -0
- package/skills/prioritize/references/task-context.md +18 -0
- package/skills/qa/.fde-generated.json +16 -0
- package/skills/{fde-qa → qa}/SKILL.md +2 -2
- package/skills/qa/references/task-context.md +18 -0
- package/skills/{fde-readout → readout}/.fde-generated.json +2 -2
- package/skills/{fde-readout → readout}/SKILL.md +2 -2
- package/skills/readout/references/board-memo.md +108 -0
- package/skills/readout/references/business-case.md +90 -0
- package/skills/readout/references/task-context.md +18 -0
- package/skills/red-team/.fde-generated.json +9 -0
- package/skills/red-team/SKILL.md +21 -0
- package/skills/red-team/references/red-team.md +105 -0
- package/skills/red-team/references/task-context.md +18 -0
- package/skills/rescue/.fde-generated.json +9 -0
- package/skills/rescue/SKILL.md +21 -0
- package/skills/rescue/references/rescue.md +82 -0
- package/skills/rescue/references/task-context.md +18 -0
- package/skills/review/.fde-generated.json +16 -0
- package/skills/{fde-review → review}/SKILL.md +2 -2
- package/skills/review/references/task-context.md +18 -0
- package/skills/rollback/.fde-generated.json +9 -0
- package/skills/rollback/SKILL.md +21 -0
- package/skills/rollback/references/rollback.md +102 -0
- package/skills/rollback/references/task-context.md +18 -0
- package/skills/runbook/.fde-generated.json +11 -0
- package/skills/runbook/SKILL.md +21 -0
- package/skills/runbook/references/close.md +66 -0
- package/skills/runbook/references/encode-pattern.md +96 -0
- package/skills/runbook/references/runbook.md +73 -0
- package/skills/runbook/references/task-context.md +18 -0
- package/skills/scope/.fde-generated.json +9 -0
- package/skills/{fde-scope → scope}/SKILL.md +2 -2
- package/skills/scope/references/task-context.md +18 -0
- package/skills/score-use-cases/.fde-generated.json +10 -0
- package/skills/score-use-cases/SKILL.md +21 -0
- package/skills/score-use-cases/references/business-case.md +90 -0
- package/skills/score-use-cases/references/score-use-cases.md +70 -0
- package/skills/score-use-cases/references/task-context.md +18 -0
- package/skills/ship/.fde-generated.json +16 -0
- package/skills/{fde-ship → ship}/SKILL.md +2 -2
- package/skills/ship/references/task-context.md +18 -0
- package/skills/switch-clients/.fde-generated.json +9 -0
- package/skills/switch-clients/SKILL.md +21 -0
- package/skills/switch-clients/references/switch-clients.md +114 -0
- package/skills/switch-clients/references/task-context.md +18 -0
- package/skills/test-assumptions/.fde-generated.json +9 -0
- package/skills/test-assumptions/SKILL.md +21 -0
- package/skills/test-assumptions/references/task-context.md +18 -0
- package/skills/test-assumptions/references/test-assumptions.md +102 -0
- package/skills/what-breaks/.fde-generated.json +9 -0
- package/skills/what-breaks/SKILL.md +21 -0
- package/skills/what-breaks/references/task-context.md +18 -0
- package/skills/what-breaks/references/what-breaks.md +91 -0
- package/skills/who-decides/.fde-generated.json +9 -0
- package/skills/who-decides/SKILL.md +21 -0
- package/skills/who-decides/references/task-context.md +18 -0
- package/skills/who-decides/references/who-decides.md +91 -0
- package/skills/fde-discover/.fde-generated.json +0 -10
- package/skills/fde-discover/references/discover.md +0 -254
- package/skills/fde-feedback/.fde-generated.json +0 -9
- package/skills/fde-feedback/references/task-context.md +0 -12
- package/skills/fde-handoff/references/task-context.md +0 -12
- package/skills/fde-integrate/references/task-context.md +0 -12
- package/skills/fde-options/references/task-context.md +0 -12
- package/skills/fde-poc/references/discover.md +0 -254
- package/skills/fde-poc/references/task-context.md +0 -12
- package/skills/fde-qa/.fde-generated.json +0 -16
- package/skills/fde-qa/references/task-context.md +0 -12
- package/skills/fde-readout/references/task-context.md +0 -12
- package/skills/fde-review/.fde-generated.json +0 -16
- package/skills/fde-review/references/task-context.md +0 -12
- package/skills/fde-scope/.fde-generated.json +0 -9
- package/skills/fde-scope/references/task-context.md +0 -12
- package/skills/fde-ship/.fde-generated.json +0 -16
- package/skills/fde-ship/references/task-context.md +0 -12
- /package/skills/{fde-discover → audit}/references/audit.md +0 -0
- /package/skills/{fde-readout → board-memo}/references/board-memo.md +0 -0
- /package/skills/{fde-options → board-memo}/references/business-case.md +0 -0
- /package/skills/{fde-build → build}/references/build.md +0 -0
- /package/skills/{fde-build → build}/references/debug.md +0 -0
- /package/skills/{fde-build → build}/references/eval-pack.md +0 -0
- /package/skills/{fde-build → build}/references/integrate.md +0 -0
- /package/skills/{fde-build → build}/references/qa.md +0 -0
- /package/skills/{fde-build → build}/references/review.md +0 -0
- /package/skills/{fde-build → build}/references/ship.md +0 -0
- /package/skills/{fde-build → build}/references/verification.md +0 -0
- /package/skills/{fde-poc → business-case}/references/business-case.md +0 -0
- /package/skills/{fde-debug → debug}/references/build.md +0 -0
- /package/skills/{fde-debug → debug}/references/debug.md +0 -0
- /package/skills/{fde-debug → debug}/references/eval-pack.md +0 -0
- /package/skills/{fde-debug → debug}/references/integrate.md +0 -0
- /package/skills/{fde-debug → debug}/references/qa.md +0 -0
- /package/skills/{fde-debug → debug}/references/review.md +0 -0
- /package/skills/{fde-debug → debug}/references/ship.md +0 -0
- /package/skills/{fde-debug → debug}/references/verification.md +0 -0
- /package/skills/{fde-poc → discover}/references/audit.md +0 -0
- /package/skills/{fde-evaluate → evaluate}/references/build.md +0 -0
- /package/skills/{fde-evaluate → evaluate}/references/debug.md +0 -0
- /package/skills/{fde-evaluate → evaluate}/references/eval-pack.md +0 -0
- /package/skills/{fde-evaluate → evaluate}/references/integrate.md +0 -0
- /package/skills/{fde-evaluate → evaluate}/references/qa.md +0 -0
- /package/skills/{fde-evaluate → evaluate}/references/review.md +0 -0
- /package/skills/{fde-evaluate → evaluate}/references/ship.md +0 -0
- /package/skills/{fde-evaluate → evaluate}/references/verification.md +0 -0
- /package/skills/{fde-feedback → feedback}/references/encode-pattern.md +0 -0
- /package/skills/{fde-handoff → handoff}/references/close.md +0 -0
- /package/skills/{fde-handoff → handoff}/references/encode-pattern.md +0 -0
- /package/skills/{fde-integrate → integrate}/references/build.md +0 -0
- /package/skills/{fde-integrate → integrate}/references/debug.md +0 -0
- /package/skills/{fde-integrate → integrate}/references/eval-pack.md +0 -0
- /package/skills/{fde-integrate → integrate}/references/integrate.md +0 -0
- /package/skills/{fde-integrate → integrate}/references/qa.md +0 -0
- /package/skills/{fde-integrate → integrate}/references/review.md +0 -0
- /package/skills/{fde-integrate → integrate}/references/ship.md +0 -0
- /package/skills/{fde-integrate → integrate}/references/verification.md +0 -0
- /package/skills/{fde-readout → options}/references/business-case.md +0 -0
- /package/skills/{fde-options → options}/references/test-assumptions.md +0 -0
- /package/skills/{fde-options → options}/references/three-options.md +0 -0
- /package/skills/{fde-poc → poc}/references/build.md +0 -0
- /package/skills/{fde-poc → poc}/references/debug.md +0 -0
- /package/skills/{fde-poc → poc}/references/eval-pack.md +0 -0
- /package/skills/{fde-poc → poc}/references/integrate.md +0 -0
- /package/skills/{fde-poc → poc}/references/poc.md +0 -0
- /package/skills/{fde-poc → poc}/references/qa.md +0 -0
- /package/skills/{fde-poc → poc}/references/review.md +0 -0
- /package/skills/{fde-poc → poc}/references/ship.md +0 -0
- /package/skills/{fde-poc → poc}/references/test-assumptions.md +0 -0
- /package/skills/{fde-poc → poc}/references/three-options.md +0 -0
- /package/skills/{fde-poc → poc}/references/verification.md +0 -0
- /package/skills/{fde-qa → qa}/references/build.md +0 -0
- /package/skills/{fde-qa → qa}/references/debug.md +0 -0
- /package/skills/{fde-qa → qa}/references/eval-pack.md +0 -0
- /package/skills/{fde-qa → qa}/references/integrate.md +0 -0
- /package/skills/{fde-qa → qa}/references/qa.md +0 -0
- /package/skills/{fde-qa → qa}/references/review.md +0 -0
- /package/skills/{fde-qa → qa}/references/ship.md +0 -0
- /package/skills/{fde-qa → qa}/references/verification.md +0 -0
- /package/skills/{fde-readout → readout}/references/readout.md +0 -0
- /package/skills/{fde-review → review}/references/build.md +0 -0
- /package/skills/{fde-review → review}/references/debug.md +0 -0
- /package/skills/{fde-review → review}/references/eval-pack.md +0 -0
- /package/skills/{fde-review → review}/references/integrate.md +0 -0
- /package/skills/{fde-review → review}/references/qa.md +0 -0
- /package/skills/{fde-review → review}/references/review.md +0 -0
- /package/skills/{fde-review → review}/references/ship.md +0 -0
- /package/skills/{fde-review → review}/references/verification.md +0 -0
- /package/skills/{fde-scope → scope}/references/hold-scope.md +0 -0
- /package/skills/{fde-ship → ship}/references/build.md +0 -0
- /package/skills/{fde-ship → ship}/references/debug.md +0 -0
- /package/skills/{fde-ship → ship}/references/eval-pack.md +0 -0
- /package/skills/{fde-ship → ship}/references/integrate.md +0 -0
- /package/skills/{fde-ship → ship}/references/qa.md +0 -0
- /package/skills/{fde-ship → ship}/references/review.md +0 -0
- /package/skills/{fde-ship → ship}/references/ship.md +0 -0
- /package/skills/{fde-ship → ship}/references/verification.md +0 -0
package/AGENTS.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# AGENTS.md - working in the fdeops repository
|
|
2
2
|
|
|
3
|
-
This repository **is**
|
|
3
|
+
This repository **is** FDEOps: skills for Forward Deployed Engineers. The `fde` coordinator selects the relevant instructions for customer work. All 35 task skills also work individually. The local CLI manages customer records in `.fde/` files; users confirm consequential judgments.
|
|
4
4
|
|
|
5
5
|
## If you are helping use fdeops in an engagement
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
For ongoing customer work, use **`@fde`**: read `skills/fde/SKILL.md`, select the relevant instructions, and follow its record rules. When the user selects a task such as `discover` or `build`, run that task directly with the supplied context; a customer record is optional. Do not make users choose a task when they have asked the coordinator for help. Other tools use thin pointer files in [`adapters/`](adapters/README.md).
|
|
8
8
|
|
|
9
9
|
## If you are contributing to this repository
|
|
10
10
|
|
package/README.md
CHANGED
|
@@ -1,333 +1,172 @@
|
|
|
1
1
|
# FDEOps
|
|
2
2
|
|
|
3
|
-
**Forward deployed engineering skills for AI coding
|
|
3
|
+
**Forward deployed engineering skills for your AI coding agent.**
|
|
4
4
|
|
|
5
5
|
<a name="why-use-it"></a>
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Work through a customer project from the first conversation to a system their team can run. FDEOps helps your agent clarify the problem, compare solutions, write and test code, connect customer systems, and prepare delivery and handover evidence.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
A **skill** is a set of instructions your AI coding agent follows. FDEOps includes **35 task skills + one coordinator, `fde`**. Use any skill directly, or ask `fde` to select the relevant skills as a customer project progresses.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Use it for a single integration, a small client project, or work within a larger enterprise team. You bring the customer context, repository tools and access. FDEOps supplies the working method; you and the responsible teams make the decisions.
|
|
12
12
|
|
|
13
|
-
[
|
|
13
|
+
[Get started](#quick-start) · [Choose a task](#task-skills) · [Keep a customer record](#keep-a-customer-record) · [Documentation](docs/README.md)
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
## Quick start
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
You need an AI coding agent that supports skills. The installation commands and FDEOps CLI require **Node.js 18+ and Git** on your machine.
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
### Work on a customer project
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
| Work | Skill |
|
|
24
|
-
|------|-------|
|
|
25
|
-
| Understand the workflow | `fde-discover` |
|
|
26
|
-
| Handle a new scope request | `fde-scope` |
|
|
27
|
-
| Compare approaches | `fde-options` |
|
|
28
|
-
| Test a risky assumption | `fde-poc` |
|
|
29
|
-
| Implement, integrate, repair | `fde-build`, `fde-integrate`, `fde-debug` |
|
|
30
|
-
| Review, evaluate AI, test the journey | `fde-review`, `fde-evaluate`, `fde-qa` |
|
|
31
|
-
| Release a verified increment | `fde-ship` |
|
|
32
|
-
| Present evidence, transfer operation, reuse a lesson | `fde-readout`, `fde-handoff`, `fde-feedback` |
|
|
33
|
-
|
|
34
|
-
For example, install just the integration skill:
|
|
21
|
+
Run this in your terminal and select your agent in the installer:
|
|
35
22
|
|
|
36
23
|
```bash
|
|
37
|
-
npx skills add suboss87/fdeops --skill fde
|
|
24
|
+
npx skills add suboss87/fdeops --skill fde
|
|
38
25
|
```
|
|
39
26
|
|
|
40
|
-
|
|
27
|
+
Then start a conversation with your agent:
|
|
41
28
|
|
|
42
|
-
|
|
29
|
+
```text
|
|
30
|
+
@fde this is client01. Their support team reads incoming requests,
|
|
31
|
+
checks internal documents, then assigns each request to another team.
|
|
32
|
+
Help me prepare for the first meeting. Here is the brief: …
|
|
33
|
+
```
|
|
43
34
|
|
|
44
|
-
|
|
35
|
+
`fde` asks for the information needed next and uses the relevant instructions. As work progresses, it can help you investigate delays, compare approaches, implement a change, test it, and prepare a customer update. You do not have to choose a skill at each step.
|
|
45
36
|
|
|
46
|
-
|
|
47
|
-
npx fdeops scan
|
|
48
|
-
```
|
|
37
|
+
Naming the customer starts a local project record at `~/fde-engagements/client01/.fde/`. It keeps the brief, decisions, evidence and next actions together. Review proposed agreements and corrections before saving them. [How customer records work](#keep-a-customer-record).
|
|
49
38
|
|
|
50
|
-
|
|
39
|
+
### Use just one task
|
|
51
40
|
|
|
52
|
-
|
|
41
|
+
For example, install only `discover`:
|
|
53
42
|
|
|
54
43
|
```bash
|
|
55
|
-
npx skills add suboss87/fdeops --skill
|
|
44
|
+
npx skills add suboss87/fdeops --skill discover
|
|
56
45
|
```
|
|
57
46
|
|
|
58
|
-
|
|
47
|
+
Then ask your agent:
|
|
59
48
|
|
|
60
49
|
```text
|
|
61
|
-
|
|
50
|
+
Use FDEOps discover with these meeting notes. Show how the team handles
|
|
51
|
+
an incoming request today, where time goes, and what we still need to ask.
|
|
52
|
+
[Paste notes you are permitted to share.]
|
|
62
53
|
```
|
|
63
54
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
### Make it fit your work
|
|
55
|
+
The agent works from your notes and returns its findings. You do not need to create a customer record for this task. Each task skill includes the instructions it needs and works without installing `fde` or another skill pack.
|
|
67
56
|
|
|
68
|
-
|
|
57
|
+
**Want every task available by name?** Install the full pack using the [installation guide](docs/install.md#individual-skills-and-the-full-pack). Installing `fde` alone gives the coordinator all the underlying instructions; it does not add the 35 separate names to your agent's skill menu.
|
|
69
58
|
|
|
70
|
-
|
|
71
|
-
npx fdeops@latest setup
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
[See the choices and custom masking options](docs/USAGE.md#make-fdeops-fit-your-day).
|
|
59
|
+
Skill invocation differs between agents. Ask for the FDEOps skill by name or select it in your agent's skill picker. For Claude Code plugin installs, use `/fdeops:fde` or `/fdeops:discover`. See [host setup and name conflicts](docs/install.md#individual-skills-and-the-full-pack).
|
|
75
60
|
|
|
76
|
-
|
|
61
|
+
## Choose a skill
|
|
77
62
|
|
|
78
|
-
|
|
79
|
-
npx fdeops dashboard --open
|
|
80
|
-
```
|
|
63
|
+
<a name="task-skills"></a>
|
|
81
64
|
|
|
82
|
-
|
|
65
|
+
Use the skill that matches the work in front of you. All skills are individually installable; the [complete catalog](docs/skills-reference.md) lists the input and result for each one.
|
|
83
66
|
|
|
84
|
-
|
|
85
|
-
|
|
67
|
+
| You need to… | Start with |
|
|
68
|
+
|---|---|
|
|
69
|
+
| Clarify a new customer request | `brief` or `discover` |
|
|
70
|
+
| Understand who can approve the change | `who-decides` |
|
|
71
|
+
| Decide what to build and what to leave out | `options`, `scope` or `plan` |
|
|
72
|
+
| Implement or connect customer systems | `build` or `integrate` |
|
|
73
|
+
| Find a failure or test the result | `debug`, `review`, `evaluate` or `qa` |
|
|
74
|
+
| Prepare an authorized release | `ship` |
|
|
75
|
+
| Review meeting notes or report progress | `debrief` or `readout` |
|
|
76
|
+
| Prepare the team to run the system | `runbook` or `handoff` |
|
|
86
77
|
|
|
87
|
-
|
|
88
|
-
/plugin marketplace add suboss87/fdeops
|
|
89
|
-
/plugin install fdeops@fdeops
|
|
90
|
-
```
|
|
78
|
+
These examples are starting points, not a required sequence. The catalog also covers inherited projects, business cases, incidents, recovery, source connections and multiple customer records. `fde` uses the same instructions and loads additional detail only when needed.
|
|
91
79
|
|
|
92
|
-
|
|
80
|
+
**Which mode should I choose?** Use an individual skill for a specific task. Use `fde` when you want help across several tasks and a continuing customer record. Installing a skill makes it available independently; it does not remove its real input requirements. For example, `dashboard` needs records to display, while `debrief` can review pasted notes without saving anything.
|
|
93
81
|
|
|
94
|
-
|
|
82
|
+
<a name="how-skills-work"></a>
|
|
95
83
|
|
|
96
|
-
|
|
97
|
-
<summary><b>Cursor</b></summary>
|
|
84
|
+
## Keep a customer record
|
|
98
85
|
|
|
99
|
-
|
|
86
|
+
An **engagement** is your ongoing project with a customer. Its record lives in a separate folder on your machine, outside the customer's application code:
|
|
100
87
|
|
|
101
|
-
```
|
|
102
|
-
|
|
88
|
+
```text
|
|
89
|
+
~/fde-engagements/client01/.fde/
|
|
103
90
|
```
|
|
104
91
|
|
|
105
|
-
|
|
92
|
+
The files are readable Markdown. They track what the customer asked for, who can decide, what success means, what changed, and the evidence behind each result. You can inspect, copy or keep them if you stop using FDEOps.
|
|
93
|
+
|
|
94
|
+
After a meeting, paste permitted notes into the same agent conversation. It proposes the new requests, decisions, unresolved questions and next actions. Correct anything it misunderstood, then confirm the update.
|
|
106
95
|
|
|
107
|
-
|
|
96
|
+
A request is not automatically an agreement. A passing test is not a production deployment. A measured improvement is not customer acceptance. FDEOps keeps those distinctions in the record.
|
|
108
97
|
|
|
109
|
-
|
|
110
|
-
<summary><b>Codex, other agents, and offline setup</b></summary>
|
|
98
|
+
At the next session, the coordinator retrieves a short summary rather than loading the full history. The default summary is capped at 16 KiB; older evidence is retrieved when needed. This cap applies to FDEOps output, not everything your agent loads.
|
|
111
99
|
|
|
112
|
-
|
|
100
|
+
If your agent cannot start the record, run this in your terminal from the workspace where you work on that customer:
|
|
113
101
|
|
|
114
102
|
```bash
|
|
115
103
|
npx fdeops resume --init client01
|
|
116
104
|
```
|
|
117
105
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
</details>
|
|
121
|
-
|
|
106
|
+
This links that workspace to the customer's record. [Daily use and meeting walkthrough](docs/USAGE.md) · [Record format](docs/schema.md).
|
|
122
107
|
|
|
123
108
|
<a name="what-a-working-day-looks-like"></a>
|
|
124
109
|
|
|
125
110
|
## Your daily fieldbook
|
|
126
111
|
|
|
127
|
-
|
|
112
|
+
The fieldbook is a read-only browser view of your customer records. It shows next actions, open risks, missing evidence and results waiting for acceptance.
|
|
113
|
+
|
|
114
|
+

|
|
128
115
|
|
|
129
|
-
|
|
116
|
+
Run this in your terminal to view all your customers:
|
|
130
117
|
|
|
131
118
|
```bash
|
|
132
119
|
npx fdeops dashboard --all --open
|
|
133
120
|
```
|
|
134
121
|
|
|
135
|
-
Open a
|
|
136
|
-
|
|
137
|
-
**Want to see the whole loop first?** `npx fdeops demo` runs fictional notes through review and prints a sample fieldbook path to open. It writes and resets its own folder under `~/fde-engagements/.demo/`, needs no AI model, and can be removed with `npx fdeops demo --clean`.
|
|
138
|
-
|
|
139
|
-
⭐ If FDEOps makes your client work easier, star the repo.
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
<a name="from-the-first-meeting-to-handover"></a>
|
|
144
|
-
|
|
145
|
-
## Commands
|
|
146
|
-
|
|
147
|
-
Describe the situation to `@fde`. It selects the relevant skill. The Claude Code plugin also provides these stage commands; other hosts use the same method through `@fde`.
|
|
148
|
-
|
|
149
|
-
| What you're doing | Command | Stage |
|
|
150
|
-
|-------------------|---------|-------|
|
|
151
|
-
| First days. Get the brief. Name who signs. | `/brief` | Land |
|
|
152
|
-
| Check the brief is the real job. | `/discover` | Discover |
|
|
153
|
-
| Sequence from done, not from the ticket. | `/plan` | Plan |
|
|
154
|
-
| Prove it on their staging, then go live. | `/ship` | Ship |
|
|
155
|
-
| What you promised, measured, and who accepted. | `/outcome` | Outcome |
|
|
156
|
-
| Hand it over. They run it without you. | `/close` | Close |
|
|
157
|
-
|
|
158
|
-
Claude Code shortcuts for the moments between stages: `/debrief` (notes into the record), `/prep` (one page before you walk in), `/trust` (process gap, or they stopped trusting you), `/receipts` (find what was recorded and where it came from), `/readout` (Friday page for the sponsor; not a seventh stage).
|
|
159
|
-
|
|
160
|
-
You can also just say it: “Prep me for the sponsor meeting,” “What did we agree about scope?” or “Help me hand this over.”
|
|
161
|
-
|
|
162
|
-
---
|
|
163
|
-
|
|
164
|
-
## Engagement workflows
|
|
165
|
-
|
|
166
|
-
Thirty-four workflows, grouped by stage. Each skill gives the agent steps to follow, a record or report to produce, and a checkpoint with you. You describe the work; `@fde` finds the skill.
|
|
167
|
-
|
|
168
|
-
Full detail: [docs/skills-reference.md](docs/skills-reference.md).
|
|
122
|
+
Open a customer's record and copy an action into your agent to continue. Run the command again after updates to refresh the view.
|
|
169
123
|
|
|
170
|
-
|
|
124
|
+
**Try a fictional example first:** `npx fdeops demo` runs sample meeting notes through review and produces a fieldbook without using an AI model. It creates or resets its demo folder under `~/fde-engagements/.demo/`. Remove that example with `npx fdeops demo --clean`.
|
|
171
125
|
|
|
172
|
-
|
|
173
|
-
|--------|--------------|----------|
|
|
174
|
-
| [land](skills/fde/references/land.md) | Interrogate the brief | New client, first meeting, just got the brief |
|
|
175
|
-
| [audit](skills/fde/references/audit.md) | Verify inherited claims | Taking over, previous consultant left |
|
|
176
|
-
| [who-decides](skills/fde/references/who-decides.md) | Map decision rights | Need to know who matters |
|
|
177
|
-
| [earn-trust](skills/fde/references/earn-trust.md) | Earn access | Need access or credibility |
|
|
178
|
-
| [hold-scope](skills/fde/references/hold-scope.md) | Hold scope | "Also can you…", timeline unchanged |
|
|
126
|
+
## Fit it to the project
|
|
179
127
|
|
|
180
|
-
|
|
128
|
+
For a small task, use the supplied notes or code and return the result. For an ongoing project, use the customer record. For enterprise work, include the relevant teams, access rules, release checks and operating responsibilities in the plan.
|
|
181
129
|
|
|
182
|
-
|
|
183
|
-
|--------|--------------|----------|
|
|
184
|
-
| [discover](skills/fde/references/discover.md) | Frame the problem | Brief feels wrong, shadow processes |
|
|
185
|
-
| [test-assumptions](skills/fde/references/test-assumptions.md) | Test assumptions | Brief feels too neat |
|
|
186
|
-
| [score-use-cases](skills/fde/references/score-use-cases.md) | Score use cases | Everything is P0 |
|
|
187
|
-
| [poc](skills/fde/references/poc.md) | Validate the solution | POC, spike, need to de-risk |
|
|
130
|
+
The pack includes implementation, integration, debugging and QA instructions. It uses the repository's existing tools. It does not supply customer credentials, infrastructure, specialist approvals or production authority.
|
|
188
131
|
|
|
189
|
-
|
|
132
|
+
Optional setup:
|
|
190
133
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
| [three-options](skills/fde/references/three-options.md) | Generate options | "What should we do?" |
|
|
196
|
-
| [pick-three](skills/fde/references/pick-three.md) | Prioritize three | Everything is urgent |
|
|
134
|
+
- **Personal preferences:** `npx fdeops setup` records how you work and what to mask before sharing context.
|
|
135
|
+
- **Repository reconnaissance:** `npx fdeops scan` reads local files and returns an initial assessment and questions. It does not change the repository.
|
|
136
|
+
- **Other agent hosts:** [Adapters](adapters/README.md) add a pointer to the coordinator in your workspace.
|
|
137
|
+
- **External sources:** [Connection recipes](mcp/recipes/) explain how to pull permitted material from tools you already use.
|
|
197
138
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
| Skill | What it does | Use when |
|
|
201
|
-
|--------|--------------|----------|
|
|
202
|
-
| [build](skills/fde/references/build.md) | Implement the increment | A scoped change in their repository |
|
|
203
|
-
| [integrate](skills/fde/references/integrate.md) | Prove the system boundary | APIs, imports and write-back |
|
|
204
|
-
| [debug](skills/fde/references/debug.md) | Reproduce and repair a failure | Unexpected behavior or a regression |
|
|
205
|
-
| [qa](skills/fde/references/qa.md) | Exercise the delivered journey | Functional acceptance or browser QA |
|
|
206
|
-
| [ship](skills/fde/references/ship.md) | Release with evidence | Ready for an authorized rollout |
|
|
207
|
-
| [what-breaks](skills/fde/references/what-breaks.md) | Assess impact | Touching shared infrastructure |
|
|
208
|
-
| [rescue](skills/fde/references/rescue.md) | Resolve the incident | Down, or they went quiet |
|
|
209
|
-
| [review](skills/fde/references/review.md) | Review the change | Before merge, scope creep |
|
|
210
|
-
| [rollback](skills/fde/references/rollback.md) | Rehearse rollback | "We can always revert" |
|
|
211
|
-
|
|
212
|
-
### Outcome
|
|
213
|
-
|
|
214
|
-
| Skill | What it does | Use when |
|
|
215
|
-
|--------|--------------|----------|
|
|
216
|
-
| [readout](skills/fde/references/readout.md) | Report the outcome | Friday, sponsor update |
|
|
217
|
-
| [demo-prep](skills/fde/references/demo-prep.md) | Prepare the demo | Demo or exec walkthrough |
|
|
218
|
-
| [debrief](skills/fde/references/debrief.md) | Capture the meeting | Just left a meeting |
|
|
219
|
-
| [board-memo](skills/fde/references/board-memo.md) | Brief the board | Justify continued investment |
|
|
220
|
-
| [dashboard](skills/fde/references/dashboard.md) | Open the fieldbook | This customer, or all of them |
|
|
221
|
-
| [ingest](skills/fde/references/ingest.md) | Ingest sources | Transcript, Notion, Slack |
|
|
222
|
-
| [connect](skills/fde/references/connect.md) | Connect a source | Connect Granola |
|
|
223
|
-
|
|
224
|
-
### Close
|
|
225
|
-
|
|
226
|
-
| Skill | What it does | Use when |
|
|
227
|
-
|--------|--------------|----------|
|
|
228
|
-
| [close](skills/fde/references/close.md) | Transfer operations | Wrapping up |
|
|
229
|
-
| [runbook](skills/fde/references/runbook.md) | Write the runbook | They must operate without you |
|
|
230
|
-
| [switch-clients](skills/fde/references/switch-clients.md) | Switch engagements | 2+ clients |
|
|
231
|
-
| [encode-pattern](skills/fde/references/encode-pattern.md) | Encode the pattern | It will apply again |
|
|
232
|
-
| [red-team](skills/fde/references/red-team.md) | Challenge the plan | "Poke holes in this" |
|
|
233
|
-
|
|
234
|
-
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). AI companion (not a sixth overlay): [eval-pack](skills/fde/references/eval-pack.md).
|
|
235
|
-
|
|
236
|
-
Optional pull: you add the source MCP; we **pull** on request. [mcp/recipes/](mcp/recipes/)
|
|
237
|
-
|
|
238
|
-
---
|
|
239
|
-
|
|
240
|
-
<a name="use-the-cli-directly"></a>
|
|
241
|
-
|
|
242
|
-
## How Skills Work
|
|
243
|
-
|
|
244
|
-
One `@fde`. One file per situation. One folder per client.
|
|
245
|
-
|
|
246
|
-
Tell the agent what is happening. It reads the client record, opens the relevant skill, and works through the situation with you. After a meeting, it proposes the decisions, open questions, and next action. You correct what it misunderstood and confirm the update.
|
|
247
|
-
|
|
248
|
-
A request stays a request until agreed. A staging result stays separate from production. Recording a result does not mean the customer accepted it.
|
|
249
|
-
|
|
250
|
-
At the next session, FDEOps supplies a short summary instead of the whole history. Older detail stays on disk; `recall` finds relevant records when needed. The default summary is capped at 16 KiB, which limits FDEOps output rather than everything your agent loads.
|
|
251
|
-
|
|
252
|
-
Before a sponsor meeting, `npx fdeops defend` separates recorded acceptance from claims and missing evidence. For a successor, `npx fdeops handoff --out successor.md` creates a portable summary with risks and sources.
|
|
253
|
-
|
|
254
|
-
For free-form notes, start with `@fde`. The CLI's `debrief --smart` recognizes common phrases; it can miss details that your agent needs to help interpret. [Follow the notes → review → apply walkthrough](docs/USAGE.md#new-here-5-minutes).
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
## Engagement memory (`.fde/`)
|
|
259
|
-
|
|
260
|
-
One folder per client. Plain markdown. Grep it, copy it, take it into a meeting.
|
|
261
|
-
|
|
262
|
-
| File | Holds |
|
|
263
|
-
|------|-------|
|
|
264
|
-
| `context.md` | Where you are |
|
|
265
|
-
| `brief.md` / `success.md` | What they asked; what “done” is and who signs |
|
|
266
|
-
| `reality.md` / `terrain.md` | The real problem; the map |
|
|
267
|
-
| `stakeholders.md` | `[signal:green\|amber\|red]` - worst active signal wins; empty is **new**, not green |
|
|
268
|
-
| `trust-profile.md` | Sacred data, AI policy, approval chain |
|
|
269
|
-
| `decisions.md` / `risks.md` / `delivery.md` | Dated choices; live risks; what shipped, evidence, rollback, acceptance |
|
|
270
|
-
|
|
271
|
-
Schema: [docs/schema.md](docs/schema.md). Fieldbook: `npx fdeops dashboard --open` (bound) or `--all --open` (portfolio).
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
## Who this is for
|
|
276
|
-
|
|
277
|
-
Forward deployed engineers, independent consultants, and small agencies working with customer teams. You need to carry the brief, decisions, delivery evidence, and handover across meetings, repositories, and sometimes several clients.
|
|
278
|
-
|
|
279
|
-
If your work has no client commitments or operating handover to track, a simpler project note may be enough.
|
|
139
|
+
Use the [installation guide](docs/install.md) for the full pack, Claude Code hooks, offline setup and upgrading from earlier versions.
|
|
280
140
|
|
|
281
141
|
<a name="your-records-your-control"></a>
|
|
282
142
|
|
|
283
143
|
## Your data stays yours
|
|
284
144
|
|
|
285
|
-
The CLI
|
|
286
|
-
|
|
287
|
-
Your AI host may send the material it reads to its configured model. CLI context and smart proposals mask common email, phone, SSN-shaped, and credential patterns locally; this is not complete PII detection. FDEOps redacts `<private>` blocks from CLI, dashboard, and hook outputs; do not load those raw blocks through the agent's file tools. Review reports before sharing client information.
|
|
145
|
+
The CLI reads local files and Git, with no network calls or telemetry. Installation through `npx` may download packages. Your AI host may send material it reads to its configured model.
|
|
288
146
|
|
|
289
|
-
|
|
147
|
+
FDEOps masks common sensitive patterns and excludes `<private>` blocks from CLI, dashboard and hook outputs. This is not complete sensitive-data detection. Do not ask the agent to read private blocks directly, and use only material allowed by the customer's AI policy.
|
|
290
148
|
|
|
291
|
-
|
|
149
|
+
You review proposed decisions. Enabled session hooks can save mechanical session progress automatically; direct CLI write commands update records when you run them.
|
|
292
150
|
|
|
293
|
-
[Privacy](PRIVACY.md) · [Security](SECURITY.md)
|
|
151
|
+
[Privacy](PRIVACY.md) · [Security](SECURITY.md) · [What has been tested and its limits](docs/verification.md)
|
|
294
152
|
|
|
295
|
-
##
|
|
296
|
-
|
|
297
|
-
- **Who signs** - name who can accept the work.
|
|
298
|
-
- **Brief vs real job** - check what happens on the floor, not only the slide.
|
|
299
|
-
- **Back from done** - agree how you will test success before planning the build.
|
|
300
|
-
- **Their staging, then live** - prove the change and agree the release and rollback.
|
|
301
|
-
- **Promised, measured, accepted** - keep each separate, with its evidence.
|
|
302
|
-
- **They run it** - hand over the knowledge and ownership, not just the code.
|
|
303
|
-
- **The kit says what to check. You still decide.**
|
|
304
|
-
|
|
305
|
-
---
|
|
153
|
+
## Who this is for
|
|
306
154
|
|
|
307
|
-
|
|
155
|
+
Forward deployed engineers, consultants and small delivery teams working with customers across meetings, codebases and operating environments. The pack supports the engineering and customer work together. Its checks help expose missing evidence; they do not replace professional judgment or prove every deployment safe.
|
|
308
156
|
|
|
309
|
-
##
|
|
157
|
+
## Find your way around
|
|
310
158
|
|
|
311
159
|
| You want to… | Start here |
|
|
312
160
|
|---|---|
|
|
313
|
-
| Install or
|
|
314
|
-
|
|
|
315
|
-
|
|
|
316
|
-
|
|
|
317
|
-
| Check
|
|
318
|
-
|
|
319
|
-
[Full repository map](docs/REPO_LAYOUT.md).
|
|
320
|
-
|
|
321
|
-
---
|
|
322
|
-
|
|
323
|
-
<a name="contribute"></a>
|
|
324
|
-
|
|
325
|
-
## Contributing
|
|
326
|
-
|
|
327
|
-
**[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)
|
|
161
|
+
| Install or upgrade | [Installation](docs/install.md) |
|
|
162
|
+
| Work through your first customer project | [Usage](docs/USAGE.md) and [examples](examples/) |
|
|
163
|
+
| Explore the instructions | [Skill reference](docs/skills-reference.md) |
|
|
164
|
+
| Understand the repository | [Repository layout](docs/REPO_LAYOUT.md) |
|
|
165
|
+
| Check the test evidence | [Verification](docs/verification.md) |
|
|
166
|
+
| Improve the pack | [Contributing](CONTRIBUTING.md) |
|
|
328
167
|
|
|
329
|
-
|
|
168
|
+
Built by [Subash Natarajan](https://www.linkedin.com/in/subashn/). [Issues](https://github.com/suboss87/fdeops/issues) · [Discussions](https://github.com/suboss87/fdeops/discussions)
|
|
330
169
|
|
|
331
170
|
## License
|
|
332
171
|
|
|
333
|
-
MIT
|
|
172
|
+
MIT. Use FDEOps in your customer work. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const fs = require('node:fs')
|
|
3
|
+
const path = require('node:path')
|
|
4
|
+
const catalog = require('./skill-catalog')
|
|
5
|
+
const root = path.resolve(__dirname, '..')
|
|
6
|
+
const inputs = {
|
|
7
|
+
context: 'Supplied notes, code or evidence',
|
|
8
|
+
records: 'Existing customer records + CLI',
|
|
9
|
+
source: 'Host source tools or setup documentation',
|
|
10
|
+
'record-write': 'Notes or source tools; selected record for staging/saving',
|
|
11
|
+
}
|
|
12
|
+
const cell = value => value.replace(/\|/g, '\\|').replace(/\n/g, ' ')
|
|
13
|
+
function renderCatalog(items = catalog) {
|
|
14
|
+
const out = ['# FDEOps skills', '', `**${items.length} task skills + one coordinator, \`fde\` = ${items.length + 1} installable skills.**`, '',
|
|
15
|
+
'Every task below can be installed and used directly. Ask `fde` to select the relevant skills when working across a customer project. The groups help you find a task; they are not required phases.', '',
|
|
16
|
+
'Install a task with `npx skills add suboss87/fdeops --skill <name>`, replacing `<name>` with its catalog name. See [installation](install.md#individual-skills-and-the-full-pack) for the full pack and host-specific invocation.', '',
|
|
17
|
+
'Customer records live at `~/fde-engagements/<customer>/.fde/`. A skill provides instructions, not customer credentials or infrastructure. Drafting from supplied notes does not need a customer record. Viewing records does; staging or saving requires the intended customer and applicable confirmation.', '']
|
|
18
|
+
for (const group of [...new Set(items.map(item => item.group))]) {
|
|
19
|
+
out.push(`## ${group}`, '', '| Skill | Use it when | Result | Input needed |', '|---|---|---|---|')
|
|
20
|
+
for (const item of items.filter(item => item.group === group)) {
|
|
21
|
+
out.push(`| [${item.name}](../skills/${item.name}/SKILL.md) | ${cell(item.description)} | ${cell(item.result)} | ${inputs[item.inputMode]} |`)
|
|
22
|
+
}
|
|
23
|
+
out.push('')
|
|
24
|
+
}
|
|
25
|
+
out.push('## Domain guidance', '', 'The skills can apply supporting guidance for AI systems, financial services, healthcare, government work and customer-facing artifacts when relevant. These references are included instructions, not additional installable skills or a substitute for the responsible specialists.', '', '[Starting examples](skills.md) · [Customer records](schema.md) · [Verification and limits](verification.md)', '')
|
|
26
|
+
return out.join('\n')
|
|
27
|
+
}
|
|
28
|
+
function checkCatalog(base = root) {
|
|
29
|
+
const file = path.join(base, 'docs/skills-reference.md')
|
|
30
|
+
if (fs.readFileSync(file, 'utf8') !== renderCatalog()) throw new Error('Public skill catalog is stale; run npm run generate:skills')
|
|
31
|
+
const readme = fs.readFileSync(path.join(base, 'README.md'), 'utf8')
|
|
32
|
+
if (!readme.includes(`**${catalog.length} task skills + one coordinator, \`fde\`**`)) throw new Error('README skill count differs from the catalog')
|
|
33
|
+
}
|
|
34
|
+
module.exports = { renderCatalog, checkCatalog }
|
|
35
|
+
if (require.main === module) {
|
|
36
|
+
if (process.argv.includes('--check')) checkCatalog()
|
|
37
|
+
else fs.writeFileSync(path.join(root, 'docs/skills-reference.md'), renderCatalog())
|
|
38
|
+
}
|
package/bin/check.js
CHANGED
|
@@ -115,9 +115,8 @@ for (const refFile of mentioned) {
|
|
|
115
115
|
}
|
|
116
116
|
ok(`router dispatch (${mentioned.length} reference targets verified) + memory contract`)
|
|
117
117
|
|
|
118
|
-
// Public
|
|
119
|
-
//
|
|
120
|
-
// routed but undocumented), and a number nobody can verify is worse than none.
|
|
118
|
+
// Public names, routed instructions, installation entries and generated docs
|
|
119
|
+
// must agree. A task must never be advertised without a usable package.
|
|
121
120
|
{
|
|
122
121
|
// Every routing row must parse. A row this misses is a method that could go
|
|
123
122
|
// undocumented for free, so an unparsed row is a hard failure, not a silent skip.
|
|
@@ -150,55 +149,23 @@ ok(`router dispatch (${mentioned.length} reference targets verified) + memory co
|
|
|
150
149
|
fail(`check.js cannot read the method name in a SKILL.md routing row: ${line.trim().slice(0, 80)}`)
|
|
151
150
|
continue
|
|
152
151
|
}
|
|
152
|
+
const entry = catalog.find(item => item.name === method)
|
|
153
|
+
const target = (line.match(/references\/([a-z0-9-]+)\.md/) || [])[1]
|
|
154
|
+
if (entry && entry.method !== target) fail(`Router points ${method} at ${target}, expected ${entry.method}`)
|
|
153
155
|
routed.add(method)
|
|
154
156
|
}
|
|
155
157
|
if (!routed.size) fail('check.js could not parse the SKILL.md routing table')
|
|
156
158
|
|
|
157
|
-
//
|
|
158
|
-
|
|
159
|
-
const
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
const m = line.match(/^\|\s*\[([a-z0-9-]+)\]\(\.\.\/skills\/fde\/references\/([a-z0-9-]+\.md)\)/)
|
|
164
|
-
if (!m) continue
|
|
165
|
-
documentedRows++
|
|
166
|
-
documented.add(m[1])
|
|
167
|
-
// A link nobody followed is the same unverifiable claim this gate exists for:
|
|
168
|
-
// the target must exist, and it must be the skill the text names.
|
|
169
|
-
if (m[2] !== `${m[1]}.md`) {
|
|
170
|
-
fail(`docs/skills-reference.md links [${m[1]}] at references/${m[2]}`)
|
|
171
|
-
} else if (!fs.existsSync(path.join(root, 'skills', 'fde', 'references', m[2]))) {
|
|
172
|
-
fail(`docs/skills-reference.md links references/${m[2]}, which does not exist`)
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
if (documented.size !== documentedRows) {
|
|
176
|
-
fail(`docs/skills-reference.md lists ${documentedRows} skill rows for ${documented.size} skills - a duplicate row inflates the count`)
|
|
177
|
-
}
|
|
178
|
-
const undocumented = [...routed].filter(name => !documented.has(name))
|
|
179
|
-
if (undocumented.length) {
|
|
180
|
-
fail(`SKILL.md routes skill(s) missing from docs/skills-reference.md: ${undocumented.join(', ')}`)
|
|
181
|
-
}
|
|
182
|
-
// and the other direction: a documented skill nothing routes to is a skill
|
|
183
|
-
// the agent can never reach, advertised anyway.
|
|
184
|
-
const unrouted = [...documented].filter(name => !routed.has(name))
|
|
185
|
-
if (unrouted.length) {
|
|
186
|
-
fail(`docs/skills-reference.md documents skill(s) SKILL.md never routes to: ${unrouted.join(', ')}`)
|
|
187
|
-
}
|
|
188
|
-
for (const rel of ['docs/skills.md', 'docs/skills-reference.md']) {
|
|
189
|
-
const body = read(rel)
|
|
190
|
-
// `-` is a word boundary, so \bscore\b matches inside `score-use-cases`:
|
|
191
|
-
// a skill could disappear from the docs behind a hyphenated sibling.
|
|
192
|
-
const absent = [...documented].filter(name => !new RegExp(`(?<![\\w-])${name}(?![\\w-])`).test(body))
|
|
193
|
-
if (absent.length) fail(`${rel} does not list skill(s): ${absent.join(', ')}`)
|
|
194
|
-
const claims = [...body.matchAll(/(\d+)\s+workflows/g)].map(m => Number(m[1]))
|
|
195
|
-
if (!claims.length) fail(`${rel} must state how many workflows it documents`)
|
|
196
|
-
const wrong = [...new Set(claims.filter(n => n !== documented.size))]
|
|
197
|
-
if (wrong.length) {
|
|
198
|
-
fail(`${rel} claims ${wrong.join('/')} skills; ${documented.size} are documented`)
|
|
199
|
-
}
|
|
159
|
+
// Every routed task is installable and every public entry is reachable.
|
|
160
|
+
const names = new Set(catalog.map(item => item.name))
|
|
161
|
+
for (const name of routed) if (!names.has(name)) fail(`Routed task has no installable skill: ${name}`)
|
|
162
|
+
for (const item of catalog) {
|
|
163
|
+
if (!routed.has(item.name)) fail(`Installable skill has no coordinator route: ${item.name}`)
|
|
164
|
+
if (!router.includes(`references/${item.method}.md`)) fail(`Missing canonical instruction for ${item.name}`)
|
|
200
165
|
}
|
|
201
|
-
|
|
166
|
+
if (names.size !== catalog.length || new Set(catalog.map(item => item.method)).size !== catalog.length) fail('Duplicate public skill name or method')
|
|
167
|
+
try { require('./catalog-doc').checkCatalog(); ok('Public catalog matches installable skills') }
|
|
168
|
+
catch (error) { fail(error.message) }
|
|
202
169
|
|
|
203
170
|
const refDir = path.join(root, 'skills', 'fde', 'references')
|
|
204
171
|
const extra = fs.readdirSync(refDir).filter(f => f.endsWith('.md') && !mentioned.includes(f))
|
|
@@ -560,10 +527,14 @@ if (plugin.commands !== './.claude/commands' || plugin.skills !== './skills') {
|
|
|
560
527
|
} else {
|
|
561
528
|
for (const cmd of ['brief', 'discover', 'plan', 'ship', 'outcome', 'close', 'debrief', 'prep', 'trust', 'receipts', 'readout']) {
|
|
562
529
|
const rel = `.claude/commands/${cmd}.md`
|
|
563
|
-
|
|
530
|
+
const task = catalog.find(item => item.name === cmd)
|
|
531
|
+
if (task) {
|
|
532
|
+
if (!fs.existsSync(path.join(root, 'skills', cmd, 'SKILL.md'))) fail(`Missing command skill: ${cmd}`)
|
|
533
|
+
if (fs.existsSync(path.join(root, rel))) fail(`Duplicate command and task skill: ${cmd}`)
|
|
534
|
+
} else if (!fs.existsSync(path.join(root, rel))) fail(`${rel} missing`)
|
|
564
535
|
else if (!read(rel).includes('@fde')) fail(`${rel} must load @fde`)
|
|
565
536
|
}
|
|
566
|
-
ok('
|
|
537
|
+
ok('Task commands have one entry; legacy engagement shortcuts load @fde')
|
|
567
538
|
}
|
|
568
539
|
|
|
569
540
|
if (!fs.existsSync(path.join(root, 'mcp', 'fdeops-ingest', 'server.js'))) {
|
package/bin/fde.js
CHANGED
|
@@ -569,8 +569,8 @@ function withFileLock(targetPath, fn, opts = {}) {
|
|
|
569
569
|
console.error(msg)
|
|
570
570
|
process.exit(1)
|
|
571
571
|
}
|
|
572
|
-
|
|
573
|
-
|
|
572
|
+
// This CLI is synchronous; yield CPU while the other writer finishes.
|
|
573
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 20)
|
|
574
574
|
continue
|
|
575
575
|
}
|
|
576
576
|
if (opts.soft) throw e
|