fdeops 5.1.7 → 5.1.9
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 +73 -102
- package/bin/generate-skills.js +9 -6
- package/bin/skill-catalog.js +2 -2
- package/bin/skill-ui.js +47 -0
- package/mcp/fdeops-ingest/package.json +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/audit/.fde-generated.json +1 -0
- package/skills/audit/agents/openai.yaml +4 -0
- package/skills/board-memo/.fde-generated.json +1 -0
- package/skills/board-memo/agents/openai.yaml +4 -0
- package/skills/brief/.fde-generated.json +1 -0
- package/skills/brief/agents/openai.yaml +4 -0
- package/skills/build/.fde-generated.json +6 -5
- package/skills/build/SKILL.md +2 -2
- package/skills/build/agents/openai.yaml +4 -0
- package/skills/build/references/build.md +24 -13
- package/skills/build/references/debug.md +26 -11
- package/skills/build/references/integrate.md +33 -18
- package/skills/build/references/qa.md +24 -11
- package/skills/business-case/.fde-generated.json +1 -0
- package/skills/business-case/agents/openai.yaml +4 -0
- package/skills/connect/.fde-generated.json +1 -0
- package/skills/connect/agents/openai.yaml +4 -0
- package/skills/dashboard/.fde-generated.json +1 -0
- package/skills/dashboard/agents/openai.yaml +4 -0
- package/skills/debrief/.fde-generated.json +1 -0
- package/skills/debrief/agents/openai.yaml +4 -0
- package/skills/debug/.fde-generated.json +6 -5
- package/skills/debug/SKILL.md +2 -2
- package/skills/debug/agents/openai.yaml +4 -0
- package/skills/debug/references/build.md +24 -13
- package/skills/debug/references/debug.md +26 -11
- package/skills/debug/references/integrate.md +33 -18
- package/skills/debug/references/qa.md +24 -11
- package/skills/demo-prep/.fde-generated.json +1 -0
- package/skills/demo-prep/agents/openai.yaml +4 -0
- package/skills/discover/.fde-generated.json +1 -0
- package/skills/discover/agents/openai.yaml +4 -0
- package/skills/earn-trust/.fde-generated.json +1 -0
- package/skills/earn-trust/agents/openai.yaml +4 -0
- package/skills/evaluate/.fde-generated.json +5 -4
- package/skills/evaluate/agents/openai.yaml +4 -0
- package/skills/evaluate/references/build.md +24 -13
- package/skills/evaluate/references/debug.md +26 -11
- package/skills/evaluate/references/integrate.md +33 -18
- package/skills/evaluate/references/qa.md +24 -11
- package/skills/fde/agents/openai.yaml +4 -0
- package/skills/fde/references/build.md +24 -13
- package/skills/fde/references/debug.md +26 -11
- package/skills/fde/references/integrate.md +33 -18
- package/skills/fde/references/qa.md +24 -11
- package/skills/feedback/.fde-generated.json +1 -0
- package/skills/feedback/agents/openai.yaml +4 -0
- package/skills/handoff/.fde-generated.json +1 -0
- package/skills/handoff/agents/openai.yaml +4 -0
- package/skills/ingest/.fde-generated.json +1 -0
- package/skills/ingest/agents/openai.yaml +4 -0
- package/skills/integrate/.fde-generated.json +5 -4
- package/skills/integrate/agents/openai.yaml +4 -0
- package/skills/integrate/references/build.md +24 -13
- package/skills/integrate/references/debug.md +26 -11
- package/skills/integrate/references/integrate.md +33 -18
- package/skills/integrate/references/qa.md +24 -11
- package/skills/options/.fde-generated.json +1 -0
- package/skills/options/agents/openai.yaml +4 -0
- package/skills/plan/.fde-generated.json +1 -0
- package/skills/plan/agents/openai.yaml +4 -0
- package/skills/poc/.fde-generated.json +5 -4
- package/skills/poc/agents/openai.yaml +4 -0
- package/skills/poc/references/build.md +24 -13
- package/skills/poc/references/debug.md +26 -11
- package/skills/poc/references/integrate.md +33 -18
- package/skills/poc/references/qa.md +24 -11
- package/skills/prioritize/.fde-generated.json +1 -0
- package/skills/prioritize/agents/openai.yaml +4 -0
- package/skills/qa/.fde-generated.json +5 -4
- package/skills/qa/agents/openai.yaml +4 -0
- package/skills/qa/references/build.md +24 -13
- package/skills/qa/references/debug.md +26 -11
- package/skills/qa/references/integrate.md +33 -18
- package/skills/qa/references/qa.md +24 -11
- package/skills/readout/.fde-generated.json +1 -0
- package/skills/readout/agents/openai.yaml +4 -0
- package/skills/red-team/.fde-generated.json +1 -0
- package/skills/red-team/agents/openai.yaml +4 -0
- package/skills/rescue/.fde-generated.json +1 -0
- package/skills/rescue/agents/openai.yaml +4 -0
- package/skills/review/.fde-generated.json +5 -4
- package/skills/review/agents/openai.yaml +4 -0
- package/skills/review/references/build.md +24 -13
- package/skills/review/references/debug.md +26 -11
- package/skills/review/references/integrate.md +33 -18
- package/skills/review/references/qa.md +24 -11
- package/skills/rollback/.fde-generated.json +1 -0
- package/skills/rollback/agents/openai.yaml +4 -0
- package/skills/runbook/.fde-generated.json +1 -0
- package/skills/runbook/agents/openai.yaml +4 -0
- package/skills/scope/.fde-generated.json +1 -0
- package/skills/scope/agents/openai.yaml +4 -0
- package/skills/score-use-cases/.fde-generated.json +1 -0
- package/skills/score-use-cases/agents/openai.yaml +4 -0
- package/skills/ship/.fde-generated.json +5 -4
- package/skills/ship/agents/openai.yaml +4 -0
- package/skills/ship/references/build.md +24 -13
- package/skills/ship/references/debug.md +26 -11
- package/skills/ship/references/integrate.md +33 -18
- package/skills/ship/references/qa.md +24 -11
- package/skills/switch-clients/.fde-generated.json +1 -0
- package/skills/switch-clients/agents/openai.yaml +4 -0
- package/skills/test-assumptions/.fde-generated.json +1 -0
- package/skills/test-assumptions/agents/openai.yaml +4 -0
- package/skills/what-breaks/.fde-generated.json +1 -0
- package/skills/what-breaks/agents/openai.yaml +4 -0
- package/skills/who-decides/.fde-generated.json +1 -0
- package/skills/who-decides/agents/openai.yaml +4 -0
package/README.md
CHANGED
|
@@ -4,183 +4,154 @@
|
|
|
4
4
|
|
|
5
5
|
<a name="why-use-it"></a>
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
The codebase does not tell your agent what the customer agreed to last week, why an approach was rejected or who can approve the next release.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
FDEOps brings that context into the work, from the first meeting to a system the customer can run. Use a skill for one task, or let `fde` coordinate the project and keep its record.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
**35 task skills + one coordinator, `fde`**. Use your existing tools and processes. You and the customer keep control of the decisions.
|
|
12
12
|
|
|
13
|
-
[Get started](#quick-start) · [Choose a
|
|
13
|
+
[Get started](#quick-start) · [What it helps with](#three-things-it-helps-with) · [Choose a skill](#task-skills) · [Data boundaries](#your-records-your-control) · [Docs](docs/README.md)
|
|
14
14
|
|
|
15
|
-
<img width="1000" height="586" alt="
|
|
15
|
+
<img width="1000" height="586" alt="FDEOps engagement flow from customer discovery through delivery and handover" src="https://github.com/user-attachments/assets/12bbec6a-d0b3-4d03-81aa-4b842731a044" />
|
|
16
16
|
|
|
17
17
|
## Quick start
|
|
18
18
|
|
|
19
|
-
**Use customer-approved data and AI tools.**
|
|
19
|
+
**Use customer-approved data and AI tools.** Your agent may send what it reads to its provider, even though the FDEOps CLI runs locally. If approval is unclear, use fictional data. [Safe setup](SECURITY.md#before-customer-work).
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
### Let `fde` coordinate a customer project
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
### Work on a customer project
|
|
26
|
-
|
|
27
|
-
Run this in the terminal where your coding agent runs, then select your agent in the installer:
|
|
23
|
+
Install in the terminal where your AI coding agent runs, then select your agent:
|
|
28
24
|
|
|
29
25
|
```bash
|
|
30
26
|
npx skills add suboss87/fdeops --skill fde
|
|
31
27
|
```
|
|
32
28
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Then select `fde` in your agent and start a conversation. In agents that support `@fde`, use:
|
|
29
|
+
Select `fde` in your agent, or use `@fde` where supported:
|
|
36
30
|
|
|
37
31
|
```text
|
|
38
32
|
@fde this is client01. Their support team reads incoming requests,
|
|
39
33
|
checks internal documents, then assigns each request to another team.
|
|
40
|
-
Help me prepare for the first meeting. Here is the brief:
|
|
34
|
+
Help me prepare for the first meeting. Here is the brief: ...
|
|
41
35
|
```
|
|
42
36
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
For an ongoing project, naming the customer starts a local 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).
|
|
37
|
+
The coordinator uses the relevant instructions as the work changes. You do not need to choose a skill at each step. For an ongoing project, it keeps decisions, evidence and next actions in a local customer record.
|
|
46
38
|
|
|
47
|
-
### Use
|
|
48
|
-
|
|
49
|
-
For example, install only `discover`:
|
|
39
|
+
### Use one skill for one task
|
|
50
40
|
|
|
51
41
|
```bash
|
|
52
|
-
npx skills add suboss87/fdeops --skill
|
|
42
|
+
npx skills add suboss87/fdeops --skill debrief
|
|
53
43
|
```
|
|
54
44
|
|
|
55
45
|
Then ask your agent:
|
|
56
46
|
|
|
57
47
|
```text
|
|
58
|
-
Use FDEOps
|
|
59
|
-
|
|
48
|
+
Use FDEOps debrief to review these meeting notes.
|
|
49
|
+
Separate decisions, requests and open questions. Return a draft only.
|
|
60
50
|
[Paste notes you are permitted to share.]
|
|
61
51
|
```
|
|
62
52
|
|
|
63
|
-
|
|
53
|
+
No customer record is needed for this draft. Each task includes its required instructions; you do not need to install `fde` or another pack.
|
|
64
54
|
|
|
65
|
-
|
|
55
|
+
These installation commands use Node.js and Git; the optional record CLI requires Node.js 18+. See [installation and upgrades](docs/install.md) for host-specific invocation, the full pack and alternatives. Installing `fde` includes all underlying instructions, but does not add the 35 separate task names to your agent's menu.
|
|
66
56
|
|
|
67
|
-
|
|
57
|
+
**Try it with fictional data:** `npx fdeops demo` runs sample notes through review and creates a fieldbook without calling an AI model. It requires Node.js 18+ and Git, may download the package, and creates or resets only its separate `.demo` workspace. [Five-minute walkthrough](docs/USAGE.md#new-here-5-minutes).
|
|
68
58
|
|
|
69
|
-
##
|
|
59
|
+
## Three things it helps with
|
|
70
60
|
|
|
71
|
-
|
|
61
|
+
### 1. Starting the next session without starting over
|
|
72
62
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
| You need to… | Start with |
|
|
76
|
-
|---|---|
|
|
77
|
-
| Clarify a new customer request | `brief` or `discover` |
|
|
78
|
-
| Understand who can approve the change | `who-decides` |
|
|
79
|
-
| Decide what to build and what to leave out | `options`, `scope` or `plan` |
|
|
80
|
-
| Implement or connect customer systems | `build` or `integrate` |
|
|
81
|
-
| Find a failure or test the result | `debug`, `review`, `evaluate` or `qa` |
|
|
82
|
-
| Prepare an authorized release | `ship` |
|
|
83
|
-
| Review meeting notes or report progress | `debrief` or `readout` |
|
|
84
|
-
| Prepare the team to run the system | `runbook` or `handoff` |
|
|
85
|
-
|
|
86
|
-
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.
|
|
87
|
-
|
|
88
|
-
**Which mode should I choose?** Use an individual skill for a specific task. Use `fde` when you want help selecting the next task or maintaining a continuing customer record. You can also ask it for a one-off result without creating records. 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.
|
|
63
|
+
A repository tells you where the code lives. It may not tell you why the customer rejected an approach, which access is still blocked or what the team promised on Tuesday.
|
|
89
64
|
|
|
65
|
+
<a name="keep-a-customer-record"></a>
|
|
90
66
|
<a name="how-skills-work"></a>
|
|
91
67
|
|
|
92
|
-
|
|
68
|
+
For an ongoing engagement, FDEOps keeps a separate plain-Markdown record at `~/fde-engagements/<customer>/.fde/`. The coordinator retrieves a bounded summary and looks up details when needed. A saved implementation checkpoint points back to the current task record; the agent checks it before continuing.
|
|
93
69
|
|
|
94
|
-
|
|
70
|
+
Use [debrief](skills/debrief/SKILL.md) after a meeting and [switch-clients](skills/switch-clients/SKILL.md) when changing customers. [How records work](docs/USAGE.md).
|
|
95
71
|
|
|
96
|
-
|
|
97
|
-
~/fde-engagements/client01/.fde/
|
|
98
|
-
```
|
|
72
|
+
### 2. Keeping a request from becoming an agreement
|
|
99
73
|
|
|
100
|
-
|
|
74
|
+
A stakeholder asks for more scope. A demo looks promising. Neither establishes a new commitment or an accepted result.
|
|
101
75
|
|
|
102
|
-
|
|
76
|
+
FDEOps separates requests, confirmed decisions, reported results and unresolved questions. You review proposed record changes before confirming them. Dates and sources make a claim traceable; they do not authenticate customer approval.
|
|
103
77
|
|
|
104
|
-
|
|
78
|
+
For example, these fictional notes:
|
|
105
79
|
|
|
106
|
-
|
|
80
|
+
> Mara agreed to keep CSV upload this phase. Devon asked for real-time sync; Mara has not answered. Two staging runs took 12 minutes. Production has not been measured.
|
|
107
81
|
|
|
108
|
-
|
|
82
|
+
A review should keep those distinctions:
|
|
109
83
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
84
|
+
| Record | What the notes support |
|
|
85
|
+
|---|---|
|
|
86
|
+
| Decision | Keep CSV upload this phase; attributed to Mara in the supplied notes |
|
|
87
|
+
| Request | Real-time sync remains unapproved |
|
|
88
|
+
| Evidence | Two staging runs took 12 minutes; production benefit is unmeasured |
|
|
89
|
+
| Next step | Resolve the scope request with Mara before changing the commitment |
|
|
113
90
|
|
|
114
|
-
This
|
|
91
|
+
This is a draft, not a saved agreement. Use [who-decides](skills/who-decides/SKILL.md), [scope](skills/scope/SKILL.md) or [readout](skills/readout/SKILL.md) for the decision in front of you.
|
|
115
92
|
|
|
116
|
-
|
|
93
|
+
### 3. Knowing what is actually ready
|
|
117
94
|
|
|
118
|
-
|
|
95
|
+
A local test, a deployed change and a customer-accepted result answer different questions.
|
|
119
96
|
|
|
120
|
-
|
|
97
|
+
FDEOps carries the agreed checks into implementation and binds verification to the relevant revision and environment. Release guidance asks for operating limits, recovery evidence and an owner. Missing access or evidence stays visible; a passing local test does not fill that gap.
|
|
121
98
|
|
|
122
|
-
|
|
99
|
+
Use [build](skills/build/SKILL.md), [integrate](skills/integrate/SKILL.md), [review](skills/review/SKILL.md), [ship](skills/ship/SKILL.md) and [handoff](skills/handoff/SKILL.md) as needed. [See the tests and their limits](docs/verification.md).
|
|
123
100
|
|
|
124
|
-
|
|
101
|
+
## Choose a skill
|
|
125
102
|
|
|
126
|
-
|
|
127
|
-
npx fdeops dashboard --all --open
|
|
128
|
-
```
|
|
103
|
+
<a name="task-skills"></a>
|
|
129
104
|
|
|
130
|
-
|
|
105
|
+
| Work in front of you | Start with |
|
|
106
|
+
|---|---|
|
|
107
|
+
| An unclear customer request | `brief`, `discover` |
|
|
108
|
+
| Unclear ownership or access | `who-decides`, `earn-trust` |
|
|
109
|
+
| A decision about scope or approach | `scope`, `options`, `plan` |
|
|
110
|
+
| An implementation or system connection | `build`, `integrate` |
|
|
111
|
+
| A failure or a result to verify | `debug`, `review`, `qa`, `evaluate` |
|
|
112
|
+
| A release or operating handover | `ship`, `runbook`, `handoff` |
|
|
113
|
+
| Meeting notes or a customer update | `debrief`, `readout` |
|
|
131
114
|
|
|
132
|
-
|
|
115
|
+
These are entry points, not a required sequence. Every task can be called directly or selected by `fde`. Some tasks need records to work with: `dashboard` displays saved records, while `debrief` can review supplied notes without saving them. [Full skill catalog](docs/skills-reference.md).
|
|
133
116
|
|
|
134
|
-
|
|
117
|
+
<a name="what-a-working-day-looks-like"></a>
|
|
135
118
|
|
|
136
|
-
|
|
119
|
+
<details>
|
|
120
|
+
<summary><strong>View your customer records in the fieldbook</strong></summary>
|
|
137
121
|
|
|
138
|
-
|
|
139
|
-
|---|---|
|
|
140
|
-
| Small fix or analysis | Give a task skill the relevant notes or code. Get the result and its verification; no customer record is required. |
|
|
141
|
-
| Customer integration or ongoing delivery | Use `fde` to connect discovery, implementation, tests and updates in one continuing record. |
|
|
142
|
-
| Enterprise engagement | Work within the customer’s existing access, change-control and operating processes. Record who can approve each decision and what evidence they require. |
|
|
122
|
+
The fieldbook is a read-only browser view of next actions, risks, evidence gaps and results awaiting acceptance.
|
|
143
123
|
|
|
144
|
-
|
|
124
|
+

|
|
145
125
|
|
|
146
|
-
|
|
126
|
+
```bash
|
|
127
|
+
npx fdeops dashboard --all --open
|
|
128
|
+
```
|
|
147
129
|
|
|
148
|
-
|
|
149
|
-
- **Repository reconnaissance:** `npx fdeops scan` reads local files and returns an initial assessment and questions. It does not change the repository.
|
|
150
|
-
- **Other agent hosts:** [Adapters](adapters/README.md) add a pointer to the coordinator in your workspace.
|
|
151
|
-
- **External sources:** [Connection recipes](mcp/recipes/) explain how to pull permitted material from tools you already use.
|
|
130
|
+
Copy an action into your agent to continue. Regenerate the view after record updates. [Daily use](docs/USAGE.md).
|
|
152
131
|
|
|
153
|
-
|
|
132
|
+
</details>
|
|
154
133
|
|
|
155
134
|
<a name="your-records-your-control"></a>
|
|
135
|
+
<a name="your-data-stays-yours"></a>
|
|
156
136
|
|
|
157
|
-
##
|
|
158
|
-
|
|
159
|
-
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.
|
|
137
|
+
## Local records, explicit data boundaries
|
|
160
138
|
|
|
161
|
-
|
|
139
|
+
The CLI reads local files and Git without network calls or telemetry. Installation may download packages. Your AI host controls model connections and may transmit what it reads.
|
|
162
140
|
|
|
163
|
-
|
|
141
|
+
CLI and hook outputs mask common identifier patterns. `<private>` blocks are redacted from those outputs and the dashboard. Local reports retain unmarked identifiers by default. Masking is partial; raw file reads and pasted text bypass it. Anonymisation does not grant permission to use customer material.
|
|
164
142
|
|
|
165
|
-
[Privacy](PRIVACY.md) · [Security](SECURITY.md) · [
|
|
143
|
+
You review consequential record updates. Enabled hooks can save mechanical session progress; direct CLI write commands update records when run. [Privacy](PRIVACY.md) · [Security](SECURITY.md) · [Local-model results](docs/verification.md#local-model-results).
|
|
166
144
|
|
|
167
145
|
## Who this is for
|
|
168
146
|
|
|
169
|
-
Forward deployed engineers, consultants and
|
|
147
|
+
Forward deployed engineers, consultants and delivery teams working across customer meetings, codebases and operating environments. Start with one task or coordinate an ongoing engagement. The skills use your existing tools and processes; they do not provide infrastructure, access rights or customer approval.
|
|
170
148
|
|
|
171
|
-
##
|
|
149
|
+
## Go deeper
|
|
172
150
|
|
|
173
|
-
|
|
174
|
-
|---|---|
|
|
175
|
-
| Install or upgrade | [Installation](docs/install.md) |
|
|
176
|
-
| Work through your first customer project | [Usage](docs/USAGE.md) and [examples](examples/) |
|
|
177
|
-
| Explore the instructions | [Skill reference](docs/skills-reference.md) |
|
|
178
|
-
| Understand the repository | [Repository layout](docs/REPO_LAYOUT.md) |
|
|
179
|
-
| Check the test evidence | [Verification](docs/verification.md) |
|
|
180
|
-
| Improve the pack | [Contributing](CONTRIBUTING.md) |
|
|
151
|
+
[Install or upgrade](docs/install.md) · [Daily use](docs/USAGE.md) · [Worked examples](examples/) · [Skill catalog](docs/skills-reference.md) · [Source connections](mcp/recipes/) · [Repository layout](docs/REPO_LAYOUT.md) · [Verification](docs/verification.md) · [Contribute](CONTRIBUTING.md)
|
|
181
152
|
|
|
182
|
-
Built by [Subash Natarajan](https://www.linkedin.com/in/subashn/). [Issues](https://github.com/suboss87/fdeops/issues) · [Discussions](https://github.com/suboss87/fdeops/discussions)
|
|
153
|
+
Built and maintained by [Subash Natarajan](https://www.linkedin.com/in/subashn/). [Issues](https://github.com/suboss87/fdeops/issues) · [Discussions](https://github.com/suboss87/fdeops/discussions).
|
|
183
154
|
|
|
184
155
|
## License
|
|
185
156
|
|
|
186
|
-
MIT. Use FDEOps in your customer work.
|
|
157
|
+
[MIT](LICENSE). Use FDEOps in your customer work.
|
package/bin/generate-skills.js
CHANGED
|
@@ -4,6 +4,7 @@ const fs = require('node:fs')
|
|
|
4
4
|
const path = require('node:path')
|
|
5
5
|
const { createHash } = require('node:crypto')
|
|
6
6
|
const catalog = require('./skill-catalog')
|
|
7
|
+
const { interfaceYaml } = require('./skill-ui')
|
|
7
8
|
const root = path.resolve(__dirname, '..')
|
|
8
9
|
const source = path.join(root, 'skills/fde/references')
|
|
9
10
|
|
|
@@ -44,6 +45,8 @@ function entrypoint(item) {
|
|
|
44
45
|
}
|
|
45
46
|
function expectedFiles(item, referenceRoot = source) {
|
|
46
47
|
const files = new Map([['SKILL.md', entrypoint(item)]])
|
|
48
|
+
const ui = interfaceYaml(item.name, item.ui)
|
|
49
|
+
if (ui) files.set('agents/openai.yaml', ui)
|
|
47
50
|
for (const ref of referencesFor(item.method, referenceRoot)) files.set(`references/${ref}`, fs.readFileSync(path.join(referenceRoot, ref), 'utf8'))
|
|
48
51
|
return files
|
|
49
52
|
}
|
|
@@ -59,7 +62,7 @@ function walk(dir, prefix = '') {
|
|
|
59
62
|
const rel = prefix + e.name
|
|
60
63
|
if (e.isSymbolicLink() || (!e.isDirectory() && !e.isFile()) || (e.isFile() && fs.lstatSync(path.join(dir, e.name)).nlink > 1)) throw new Error(`Unsafe generated path: ${path.join(dir, e.name)}`)
|
|
61
64
|
if (e.isDirectory()) {
|
|
62
|
-
if (rel !== 'references') throw new Error(`Unowned generated directory: ${path.join(dir, e.name)}`)
|
|
65
|
+
if (rel !== 'references' && rel !== 'agents') throw new Error(`Unowned generated directory: ${path.join(dir, e.name)}`)
|
|
63
66
|
entries.push(...walk(path.join(dir, e.name), rel + '/'))
|
|
64
67
|
} else entries.push(rel)
|
|
65
68
|
}
|
|
@@ -103,7 +106,7 @@ function generate(check = false, options = {}) {
|
|
|
103
106
|
if (manifest.generator !== 'bin/generate-skills.js' || manifest.version !== 1 || !manifest.files || Array.isArray(manifest.files) || typeof manifest.files !== 'object') throw new Error(`Invalid ownership manifest: ${name}`)
|
|
104
107
|
owned = manifest.files
|
|
105
108
|
for (const [rel, hash] of Object.entries(owned)) {
|
|
106
|
-
if (!/^(?:SKILL\.md|references\/[a-z][a-z-]*\.md)$/.test(rel) || !/^[a-f0-9]{64}$/.test(hash)) throw new Error(`Invalid ownership entry: ${name}/${rel}`)
|
|
109
|
+
if (!/^(?:SKILL\.md|agents\/openai\.yaml|references\/[a-z][a-z-]*\.md)$/.test(rel) || !/^[a-f0-9]{64}$/.test(hash)) throw new Error(`Invalid ownership entry: ${name}/${rel}`)
|
|
107
110
|
}
|
|
108
111
|
} else {
|
|
109
112
|
// Migrate 4.1.0 packages conservatively: only the marked entry and exact
|
|
@@ -138,11 +141,11 @@ function generate(check = false, options = {}) {
|
|
|
138
141
|
fs.mkdirSync(path.dirname(path.join(dest, rel)), { recursive: true })
|
|
139
142
|
fs.writeFileSync(path.join(dest, rel), body)
|
|
140
143
|
}
|
|
141
|
-
|
|
142
|
-
const
|
|
143
|
-
if (stat(
|
|
144
|
-
fs.rmdirSync(dest)
|
|
144
|
+
for (const directory of ['references', 'agents']) {
|
|
145
|
+
const target = path.join(dest, directory)
|
|
146
|
+
if (stat(target)?.isDirectory() && fs.readdirSync(target).length === 0) fs.rmdirSync(target)
|
|
145
147
|
}
|
|
148
|
+
if (!output.size) fs.rmdirSync(dest)
|
|
146
149
|
}
|
|
147
150
|
}
|
|
148
151
|
module.exports = { referencesFor, expectedFiles, generate }
|
package/bin/skill-catalog.js
CHANGED
|
@@ -116,7 +116,7 @@ module.exports = [
|
|
|
116
116
|
{
|
|
117
117
|
"name": "build",
|
|
118
118
|
"method": "build",
|
|
119
|
-
"description": "Implement a scoped
|
|
119
|
+
"description": "Implement a scoped software change for a customer and verify its behavior. Use for delivery work with an understood outcome, not incident response.",
|
|
120
120
|
"group": "Build and verify",
|
|
121
121
|
"result": "An implemented change with verification evidence.",
|
|
122
122
|
"inputMode": "context"
|
|
@@ -132,7 +132,7 @@ module.exports = [
|
|
|
132
132
|
{
|
|
133
133
|
"name": "debug",
|
|
134
134
|
"method": "debug",
|
|
135
|
-
"description": "Investigate
|
|
135
|
+
"description": "Investigate a failure, regression or incorrect result in an integration or application, even before it can be reproduced. Use for diagnosis and repair; follow incident authority for live mitigation.",
|
|
136
136
|
"group": "Build and verify",
|
|
137
137
|
"result": "A diagnosed failure, repair and regression evidence.",
|
|
138
138
|
"inputMode": "context"
|
package/bin/skill-ui.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// Optional host UI metadata. Task routing and methods live in skill-catalog.js.
|
|
2
|
+
const entries = {
|
|
3
|
+
brief: ['Customer Brief', 'Clarify the outcome, constraints, and evidence', 'clarify this customer brief and its open questions'],
|
|
4
|
+
audit: ['Engagement Audit', 'Check inherited claims against delivery evidence', 'audit this inherited engagement and its risks'],
|
|
5
|
+
'who-decides': ['Who Decides', 'Map stakeholders and decision ownership', 'map the stakeholders and decision rights for this work'],
|
|
6
|
+
'earn-trust': ['Earn Trust', 'Plan credible next steps and appropriate access', 'plan how to earn trust and appropriate customer access'],
|
|
7
|
+
discover: ['Discover', 'Trace the workflow and identify the real problem', 'trace this customer workflow and identify evidence gaps'],
|
|
8
|
+
'test-assumptions': ['Test Assumptions', 'Find consequential assumptions and test them', 'identify and test the assumptions behind this proposal'],
|
|
9
|
+
'score-use-cases': ['Score Use Cases', 'Compare customer use cases and their trade-offs', 'compare these customer use cases using the available evidence'],
|
|
10
|
+
poc: ['Proof of Concept', 'Test a delivery uncertainty with a bounded pilot', 'design a bounded proof of concept for this uncertainty'],
|
|
11
|
+
scope: ['Scope', 'Assess new requests against agreed commitments', 'assess this request against the agreed scope'],
|
|
12
|
+
options: ['Delivery Options', 'Compare feasible approaches to a customer problem', 'compare feasible approaches and recommend a delivery path'],
|
|
13
|
+
plan: ['Delivery Plan', 'Sequence delivery into verifiable increments', 'turn this agreed outcome into a sequenced delivery plan'],
|
|
14
|
+
'business-case': ['Business Case', 'Connect investment decisions to costs and evidence', 'develop a business case with explicit assumptions'],
|
|
15
|
+
prioritize: ['Prioritize', 'Choose immediate priorities and explicit deferrals', 'choose the immediate priorities from this competing work'],
|
|
16
|
+
'red-team': ['Red Team', 'Challenge a plan with evidence and failure modes', 'stress-test this plan and identify corrective actions'],
|
|
17
|
+
build: ['Build', 'Implement and verify an agreed software change', 'implement this scoped change and verify the agreed behavior'],
|
|
18
|
+
integrate: ['Integrate', 'Prove system connections and failure handling', 'implement this integration and verify its downstream result'],
|
|
19
|
+
debug: ['Debug', 'Investigate failures and verify the repair', 'investigate this failure using the available evidence'],
|
|
20
|
+
review: ['Code Review', 'Review a change for delivery and operational risks', 'review this change against its outcome and operational risks'],
|
|
21
|
+
evaluate: ['Evaluate AI', 'Measure AI workflow behavior and failure modes', 'evaluate this AI workflow using representative cases'],
|
|
22
|
+
qa: ['Journey QA', 'Verify the real customer journey and its results', 'exercise the changed customer journey and report evidence'],
|
|
23
|
+
'what-breaks': ['What Breaks', 'Assess the blast radius before changing a system', 'assess the impact of this change on dependent systems'],
|
|
24
|
+
rollback: ['Rollback', 'Rehearse recovery and expose remaining gaps', 'prepare a recovery drill within the permitted environment'],
|
|
25
|
+
ship: ['Ship', 'Prepare a controlled release with recovery evidence', 'prepare this increment for an authorized release'],
|
|
26
|
+
readout: ['Sponsor Readout', 'Separate promises, measured results, and acceptance', 'prepare a sponsor readout from the delivery evidence'],
|
|
27
|
+
'demo-prep': ['Demo Prep', 'Rehearse an evidenced demo with a fallback', 'prepare a customer demo and its failure fallback'],
|
|
28
|
+
debrief: ['Meeting Debrief', 'Extract sourced decisions and next actions', 'turn these meeting notes into sourced decisions and actions'],
|
|
29
|
+
'board-memo': ['Board Memo', 'Draft an executive account of outcomes and risks', 'draft an executive memo from the engagement evidence'],
|
|
30
|
+
rescue: ['Rescue', 'Triage urgent delivery and engagement failures', 'triage this failing engagement and identify recovery steps'],
|
|
31
|
+
dashboard: ['Engagement Dashboard', 'Review status across existing engagement records', 'review the portfolio using available engagement records'],
|
|
32
|
+
'switch-clients': ['Switch Clients', 'Refresh customer context and triage competing needs', 'switch to the requested engagement and refresh its context'],
|
|
33
|
+
runbook: ['Operating Runbook', 'Document verified operations and recovery steps', 'draft an operating runbook from these verified procedures'],
|
|
34
|
+
handoff: ['Handoff', 'Transfer operation with evidence and clear ownership', 'prepare an operating handoff with evidence and ownership'],
|
|
35
|
+
feedback: ['Field Feedback', 'Assess field lessons for safe and useful reuse', 'assess this field lesson for reuse or product feedback'],
|
|
36
|
+
connect: ['Connect a Source', 'Check source setup and available host capabilities', 'check the requested source connection and available capabilities'],
|
|
37
|
+
ingest: ['Ingest Notes', 'Prepare sourced engagement updates for review', 'prepare sourced engagement updates from this requested material'],
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function interfaceYaml(name, fields = entries[name]) {
|
|
41
|
+
if (!fields) return null
|
|
42
|
+
const [displayName, shortDescription, prompt] = fields
|
|
43
|
+
if (typeof displayName !== 'string' || !displayName.trim() || typeof shortDescription !== 'string' || shortDescription.length < 25 || shortDescription.length > 64 || typeof prompt !== 'string' || !prompt.trim()) throw new Error(`Invalid skill UI metadata: ${name}`)
|
|
44
|
+
// JSON string literals are also YAML double-quoted scalars; no parser dependency.
|
|
45
|
+
return `interface:\n display_name: ${JSON.stringify(displayName)}\n short_description: ${JSON.stringify(shortDescription)}\n default_prompt: ${JSON.stringify(`Use $${name} to ${prompt}.`)}\n`
|
|
46
|
+
}
|
|
47
|
+
module.exports = { entries, interfaceYaml }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fdeops",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.9",
|
|
4
4
|
"description": "Forward deployed engineering skills for AI coding agents. Use focused task skills or @fde for discovery, implementation, verification and handoff, with local engagement records.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"fdeops": "bin/install.js",
|
package/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
3
|
"name": "fdeops",
|
|
4
|
-
"version": "5.1.
|
|
4
|
+
"version": "5.1.9",
|
|
5
5
|
"description": "Forward deployed engineering skills for AI coding agents. Use focused task skills or @fde for discovery, implementation, verification and handoff, with local engagement records.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Subash Natarajan",
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "b0dee139ba4f681a61eb0c3d8c802f06857502fd479843edb8e3b8cb27229ae5",
|
|
6
|
+
"agents/openai.yaml": "3b08e2e6a4149545da08238463955501bc60b7bf628cf4e344e893330590bbde",
|
|
6
7
|
"references/audit.md": "ed32ea78cbccb100742dd838e8cf4cd4b6f33ad44b3de7424fc624670d571dbc",
|
|
7
8
|
"references/discover.md": "f65aa11a539b4dbbed70cfaa94ec2a35595aa9a2d0282790510b933ac9c721ce",
|
|
8
9
|
"references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "5782488d9878335cdc1db68c08eccd613486370164284ff11d93422eced6423a",
|
|
6
|
+
"agents/openai.yaml": "a3ce2dc79d3732da6c9aa2d45d09541c09c8f7bdf44f34c6603b5dbaf8624095",
|
|
6
7
|
"references/board-memo.md": "44eb3c27f164da63af694591025b3fc96bb23d149c29de400997c1653e3322f8",
|
|
7
8
|
"references/business-case.md": "32e000e8351cd59f9eaad8be40babb276df69948ea4f81e01a4672e47f48cb25",
|
|
8
9
|
"references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "5d88b9818951f8a8a44c39ad2b36ccdca74fef5e6ed31e67788b50d3ca1bb006",
|
|
6
|
+
"agents/openai.yaml": "8dc0b43545004419bad49e1d50cd3beb968bbcc24baacdaf7fb7304a5fd03bba",
|
|
6
7
|
"references/land.md": "7a82ac999d23b51b602cd815777a853c4879ca8be40dc6c84c66f154d1f77951",
|
|
7
8
|
"references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
|
|
8
9
|
}
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
"generator": "bin/generate-skills.js",
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
|
-
"SKILL.md": "
|
|
6
|
-
"
|
|
7
|
-
"references/
|
|
5
|
+
"SKILL.md": "77570e69b8d708d60cd6ab1dcc79c95a75824ab668f60a83a0dedbe668de2a70",
|
|
6
|
+
"agents/openai.yaml": "abd0a33ab4efa25ea038932d37eae2faa2527baa96ebae8732ea90f1ebc3865e",
|
|
7
|
+
"references/build.md": "03c52eda90642c62053b53ef1e85c97b4e647600f454aee9da0e415c9d98903e",
|
|
8
|
+
"references/debug.md": "3273a921a98522431ae821a283814897270c719cbfab83d14b99175537d869e5",
|
|
8
9
|
"references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
|
|
9
|
-
"references/integrate.md": "
|
|
10
|
-
"references/qa.md": "
|
|
10
|
+
"references/integrate.md": "1cb7a60d7545b0bf224fce678a04ce6ccdf368c47877d9c8e4dc4272bb0d5b0c",
|
|
11
|
+
"references/qa.md": "41de4d70827c83291efa217e97d777f62ec2849827687fbba7e4b1d17484b87e",
|
|
11
12
|
"references/review.md": "55733ca868c00fb22110bc7b3ec7bb6c6451366c795073b19a2bccd30d2764c8",
|
|
12
13
|
"references/ship.md": "95f51772b29de6f7d174f1f7678f15d46a3a5327dcb8facb94288e27907ae92c",
|
|
13
14
|
"references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5",
|
package/skills/build/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: build
|
|
3
|
-
description: Implement a scoped
|
|
3
|
+
description: Implement a scoped software change for a customer and verify its behavior. Use for delivery work with an understood outcome, not incident response.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# build
|
|
@@ -9,7 +9,7 @@ description: Implement a scoped customer-facing software change in the existing
|
|
|
9
9
|
|
|
10
10
|
## Purpose
|
|
11
11
|
|
|
12
|
-
Implement a scoped
|
|
12
|
+
Implement a scoped software change for a customer and verify its behavior. Use for delivery work with an understood outcome, not incident response.
|
|
13
13
|
|
|
14
14
|
Before investigating or acting:
|
|
15
15
|
1. Read [the task context contract](references/task-context.md).
|
|
@@ -1,22 +1,33 @@
|
|
|
1
1
|
# build - Implement a verifiable increment
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Build the smallest complete change that demonstrates the agreed customer outcome through the real entry point.
|
|
4
4
|
|
|
5
|
-
Use
|
|
5
|
+
**Use when:** agreed behavior needs implementation in a new or existing repository. Use [debug](debug.md) for broken behavior and [integrate](integrate.md) for a system boundary.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Follow [task context](task-context.md). Supplied permitted context or an existing engagement record can provide the contract; do not initialize `.fde/` merely to write code.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
2. State the observable outcome, constraints, and acceptance checks. Reuse agreed criteria for routine fixes. If a consequential product choice is unresolved, surface that choice while continuing independent investigation; do not invent acceptance.
|
|
11
|
-
3. Choose the smallest coherent path that demonstrates the outcome through the real entry point. Include the necessary storage, error handling, and interface behavior in that slice. Name the failure that stops expansion and the recovery path for stateful changes.
|
|
12
|
-
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code. When changing dependencies, inspect the package source, requested version, lockfile changes and repository install-script policy before executing package code. Use the approved package manager and bootstrap controls; do not blanket-enable scripts or apply unrelated dependency upgrades.
|
|
13
|
-
5. Add or update automated coverage for changed behavior when meaningful and feasible, including the relevant failure path. Existing tests must actually exercise the change; explain manual-only coverage and its limits. Run focused checks, then required repository checks. Exercise the actual affected journey with [QA](qa.md) when appropriate. For uncertain model behavior, use [eval-pack](eval-pack.md). Record results with [verification](verification.md), including checks that could not run.
|
|
14
|
-
6. Inspect the final diff against the agreed outcome. If public behavior, interfaces, configuration or operating steps changed, update affected existing documentation and examples; exercise relevant commands or clearly mark checks that could not run. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
9
|
+
## Understand the repository and outcome
|
|
15
10
|
|
|
16
|
-
|
|
11
|
+
Inspect repository instructions, working tree, relevant callers, examples, and test commands. Preserve unrelated edits. Follow its branch policy and choose checkout isolation according to overlapping work. Identify the dependencies and interfaces the change touches. Before changing an untested legacy path, use targeted characterization checks to capture undocumented behavior callers rely on; separate that behavior from the intended change.
|
|
17
12
|
|
|
18
|
-
|
|
13
|
+
State the observable outcome, constraints, and acceptance checks, reusing agreed criteria for routine fixes. Surface unresolved consequential product choices while continuing independent investigation; do not invent acceptance.
|
|
19
14
|
|
|
20
|
-
|
|
15
|
+
## Build one complete slice
|
|
21
16
|
|
|
22
|
-
|
|
17
|
+
Choose a coherent path through the real entry point, including its necessary storage, error handling, and interface behavior. Name the failure that would stop expansion and the recovery path for stateful changes.
|
|
18
|
+
|
|
19
|
+
Use existing services, fixtures, validation, and repository conventions before adding alternatives. Limit cleanup to making the changed path understandable. For dependency changes, inspect the package source, requested version, lockfile changes, and install-script policy before executing package code. Use the approved package manager and bootstrap controls; do not blanket-enable scripts or include unrelated upgrades.
|
|
20
|
+
|
|
21
|
+
## Demonstrate the behavior
|
|
22
|
+
|
|
23
|
+
Add or update automated coverage when meaningful and feasible, including the relevant failure path. Check that existing tests actually exercise the change. Explain manual-only coverage and its limits. Run focused checks, then required repository checks; use [QA](qa.md) for the affected journey when appropriate and [eval-pack](eval-pack.md) for uncertain model behavior. Record evidence and unrun checks with [verification](verification.md).
|
|
24
|
+
|
|
25
|
+
Inspect the final diff against the agreed outcome. Update affected existing documentation and examples when public behavior, interfaces, configuration, or operating steps change. Exercise relevant commands or state what could not run. For substantial or risky work, use [review](review.md) with a separate reviewer when available; label a self-check honestly. Reverify affected behavior after repairs.
|
|
26
|
+
|
|
27
|
+
*Fictional example:* Northstar needs failed imports to be recoverable. A useful first slice takes one failed import through the existing retry action to a persisted result, including the retry's failure behavior. A new button alone does not demonstrate recovery.
|
|
28
|
+
|
|
29
|
+
## Completion
|
|
30
|
+
|
|
31
|
+
Return implemented behavior, relevant paths, evidence, limitations, and any decision needed. The change is ready when agreed checks have applicable evidence and the work is reviewable. Passing tests does not establish deployment or customer acceptance. Commit, open a PR, merge, or publish only when the requested workflow authorizes it.
|
|
32
|
+
|
|
33
|
+
For substantial work, maintain a [recoverable checkpoint](verification.md#recoverable-checkpoint) in the existing task record as slices finish or work pauses. When coordinated through `@fde`, record implementation and verification in existing decisions/delivery records under their write rules. Standalone work can return the receipt directly or use the repository's task record.
|