fdeops 5.1.8 → 5.1.10
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 +24 -0
- package/adapters/AGENTS.md +1 -1
- package/adapters/GEMINI.md +1 -1
- package/adapters/LOCAL-LLM.md +1 -1
- package/adapters/README.md +2 -2
- package/adapters/copilot-instructions.md +1 -1
- package/adapters/cursor.fde.mdc +1 -1
- 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 +2 -1
- package/skills/build/SKILL.md +2 -2
- package/skills/build/agents/openai.yaml +4 -0
- 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 +2 -1
- package/skills/debug/SKILL.md +2 -2
- package/skills/debug/agents/openai.yaml +4 -0
- 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 +1 -0
- package/skills/evaluate/agents/openai.yaml +4 -0
- package/skills/fde/agents/openai.yaml +4 -0
- package/skills/fde/references/switch-clients.md +29 -90
- 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 +1 -0
- package/skills/integrate/agents/openai.yaml +4 -0
- 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 +1 -0
- package/skills/poc/agents/openai.yaml +4 -0
- package/skills/prioritize/.fde-generated.json +1 -0
- package/skills/prioritize/agents/openai.yaml +4 -0
- package/skills/qa/.fde-generated.json +1 -0
- package/skills/qa/agents/openai.yaml +4 -0
- 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 +1 -0
- package/skills/review/agents/openai.yaml +4 -0
- 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 +1 -0
- package/skills/ship/agents/openai.yaml +4 -0
- package/skills/switch-clients/.fde-generated.json +4 -2
- package/skills/switch-clients/agents/openai.yaml +4 -0
- package/skills/switch-clients/references/switch-clients.md +29 -90
- package/skills/switch-clients/references/verification.md +45 -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/hooks/run-hook.cmd +0 -3
package/README.md
CHANGED
|
@@ -52,8 +52,13 @@ Separate decisions, requests and open questions. Return a draft only.
|
|
|
52
52
|
|
|
53
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.
|
|
54
54
|
|
|
55
|
+
<details>
|
|
56
|
+
<summary>Installation requirements and alternatives</summary>
|
|
57
|
+
|
|
55
58
|
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.
|
|
56
59
|
|
|
60
|
+
</details>
|
|
61
|
+
|
|
57
62
|
**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).
|
|
58
63
|
|
|
59
64
|
## Three things it helps with
|
|
@@ -67,6 +72,15 @@ A repository tells you where the code lives. It may not tell you why the custome
|
|
|
67
72
|
|
|
68
73
|
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.
|
|
69
74
|
|
|
75
|
+
For example, the fictional demo's `fde resume` output includes these next actions (excerpt):
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
next: get the reconciliation runbook from Tom before touching anything. [source: meeting 2026-09-10]
|
|
79
|
+
do first: Ask the acceptance owner to review the reported result and its evidence (delivery.md: 1 reported result awaiting acceptance)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The next session can pick up the work while keeping acceptance pending.
|
|
83
|
+
|
|
70
84
|
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).
|
|
71
85
|
|
|
72
86
|
### 2. Keeping a request from becoming an agreement
|
|
@@ -94,6 +108,16 @@ This is a draft, not a saved agreement. Use [who-decides](skills/who-decides/SKI
|
|
|
94
108
|
|
|
95
109
|
A local test, a deployed change and a customer-accepted result answer different questions.
|
|
96
110
|
|
|
111
|
+
| Claim | Evidence it needs |
|
|
112
|
+
|---|---|
|
|
113
|
+
| Implemented | The change exists in the identified revision |
|
|
114
|
+
| Verified | Applicable checks passed under stated conditions |
|
|
115
|
+
| Deployed | The intended environment is running the change |
|
|
116
|
+
| Measured | A result was observed against the agreed measure |
|
|
117
|
+
| Accepted | The agreed owner or mechanism accepted the outcome |
|
|
118
|
+
|
|
119
|
+
These are separate claims, not five automatic dashboard states.
|
|
120
|
+
|
|
97
121
|
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.
|
|
98
122
|
|
|
99
123
|
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).
|
package/adapters/AGENTS.md
CHANGED
|
@@ -16,7 +16,7 @@ Do **not** load `@fde` for a one-line typo in an unbound repo. On a bound client
|
|
|
16
16
|
|
|
17
17
|
Read and write engagement files under the workspace's bound engagement: follow the skill’s entry rule to resolve it (binding created once with `fde resume --init <name>`; default `~/fde-engagements/<name>/.fde/`). `FDEOPS_ENGAGEMENT` (expand `~`) overrides when set. Use `./.fde/` only when the engagement approves it and it is gitignored.
|
|
18
18
|
|
|
19
|
-
Follow **
|
|
19
|
+
Follow **Entry (every session)** in `skills/fde/SKILL.md` for setup, context reuse and refresh. Use the CLI for deterministic work - `fde scan | log | receipts | status | dashboard` - instead of improvising shell.
|
|
20
20
|
|
|
21
21
|
## Voice
|
|
22
22
|
|
package/adapters/GEMINI.md
CHANGED
|
@@ -16,7 +16,7 @@ Do **not** load `@fde` for a one-line typo in an unbound repo. On a bound client
|
|
|
16
16
|
|
|
17
17
|
Read and write engagement files under the workspace's bound engagement: follow the skill’s entry rule to resolve it (binding created once with `fde resume --init <name>`; default `~/fde-engagements/<name>/.fde/`). `FDEOPS_ENGAGEMENT` (expand `~`) overrides when set. Use `./.fde/` only when the engagement approves it and it is gitignored.
|
|
18
18
|
|
|
19
|
-
Follow **
|
|
19
|
+
Follow **Entry (every session)** in `skills/fde/SKILL.md` for setup, context reuse and refresh. Use the CLI for deterministic work - `fde scan | log | receipts | status | dashboard` - instead of improvising shell.
|
|
20
20
|
|
|
21
21
|
## Voice
|
|
22
22
|
|
package/adapters/LOCAL-LLM.md
CHANGED
|
@@ -7,7 +7,7 @@ The FDEOps CLI and offline dashboard need Node.js and Git, not a model. AI-assis
|
|
|
7
7
|
1. Download FDEOps, your agent host and your model while online. After that, the CLI operates offline. Model/provider configuration belongs to the host; FDEOps does not start or configure an inference server.
|
|
8
8
|
2. From the client workspace, run `node /path/to/fdeops/bin/fde.js resume --init my-client` to create and bind a local record.
|
|
9
9
|
3. Make `skills/fde/SKILL.md` and its references available to the host. Use the host's documented skill/file mechanism. Give it the FDEOps CLI path and permission to read the bound record and execute the requested commands.
|
|
10
|
-
4. Follow **
|
|
10
|
+
4. Follow **Entry (every session)** in `skills/fde/SKILL.md`, then ask for the next action. Inspect the tool calls, cited records and any proposed writes before trusting the workflow.
|
|
11
11
|
|
|
12
12
|
Use `fde recall <topic>` for relevant evidence. `resume` and `recall` default to a 16 KiB output ceiling; `--max-bytes 4096` requests a smaller allowance. This limits FDEOps output, not the host's entire context window. Keep unrelated transcripts and tools out of the active context. Private blocks must stay out of direct file reads as well as prompts.
|
|
13
13
|
|
package/adapters/README.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
| Gemini CLI | `GEMINI.md` | `GEMINI.md` |
|
|
14
14
|
| Cursor | `.cursor/rules/fde.mdc` | `cursor.fde.mdc` |
|
|
15
15
|
| GitHub Copilot | `.github/copilot-instructions.md` | `copilot-instructions.md` |
|
|
16
|
-
| Local LLMs (Ollama, LM Studio, llama.cpp, vLLM) |
|
|
16
|
+
| Local LLMs (Ollama, LM Studio, llama.cpp, vLLM) | Capable agent host with `SKILL.md`, its references, and approved CLI access | [`LOCAL-LLM.md`](LOCAL-LLM.md) (guide) |
|
|
17
17
|
|
|
18
18
|
`AGENTS.md` is the emerging cross-tool standard - many agents read it, so it doubles as the universal fallback. For local/self-hosted models, see [`LOCAL-LLM.md`](LOCAL-LLM.md).
|
|
19
19
|
|
|
@@ -31,4 +31,4 @@ Defaults to the current directory if no path is given. Existing files are never
|
|
|
31
31
|
|
|
32
32
|
## The principle
|
|
33
33
|
|
|
34
|
-
The adapter only tells the tool **where the brain is and how to behave**.
|
|
34
|
+
The adapter only tells the tool **where the brain is and how to behave**. The 35 task methods and supporting guidance live in `skills/fde/references/`; `skills/fde/SKILL.md` coordinates them and the memory contract. Update the brain, every platform gets it. That's why fdeops feels native in whatever the FDE already uses, without five things to keep in sync.
|
|
@@ -16,7 +16,7 @@ Do **not** load `@fde` for a one-line typo in an unbound repo. On a bound client
|
|
|
16
16
|
|
|
17
17
|
Read and write engagement files under the workspace's bound engagement: follow the skill’s entry rule to resolve it (binding created once with `fde resume --init <name>`; default `~/fde-engagements/<name>/.fde/`). `FDEOPS_ENGAGEMENT` (expand `~`) overrides when set. Use `./.fde/` only when the engagement approves it and it is gitignored.
|
|
18
18
|
|
|
19
|
-
Follow **
|
|
19
|
+
Follow **Entry (every session)** in `skills/fde/SKILL.md` for setup, context reuse and refresh. Use the CLI for deterministic work - `fde scan | log | receipts | status | dashboard` - instead of improvising shell.
|
|
20
20
|
|
|
21
21
|
## Voice
|
|
22
22
|
|
package/adapters/cursor.fde.mdc
CHANGED
|
@@ -21,7 +21,7 @@ Do **not** load `@fde` for a one-line typo in an unbound repo. On a bound client
|
|
|
21
21
|
|
|
22
22
|
Read and write engagement files under the workspace's bound engagement: follow the skill’s entry rule to resolve it (binding created once with `fde resume --init <name>`; default `~/fde-engagements/<name>/.fde/`). `FDEOPS_ENGAGEMENT` (expand `~`) overrides when set. Use `./.fde/` only when the engagement approves it and it is gitignored.
|
|
23
23
|
|
|
24
|
-
Follow **
|
|
24
|
+
Follow **Entry (every session)** in `skills/fde/SKILL.md` for setup, context reuse and refresh. The entry packet includes TRIAGE; use it for trust, phase, open risks and next action. Do not invent stakeholders or status.
|
|
25
25
|
|
|
26
26
|
You run the CLI for deterministic work - `fde scan | log | debrief | prep | doctor | receipts | status | dashboard` - instead of improvising shell or handing commands to the human.
|
|
27
27
|
|
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.10",
|
|
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.10",
|
|
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,7 +2,8 @@
|
|
|
2
2
|
"generator": "bin/generate-skills.js",
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
|
-
"SKILL.md": "
|
|
5
|
+
"SKILL.md": "77570e69b8d708d60cd6ab1dcc79c95a75824ab668f60a83a0dedbe668de2a70",
|
|
6
|
+
"agents/openai.yaml": "abd0a33ab4efa25ea038932d37eae2faa2527baa96ebae8732ea90f1ebc3865e",
|
|
6
7
|
"references/build.md": "03c52eda90642c62053b53ef1e85c97b4e647600f454aee9da0e415c9d98903e",
|
|
7
8
|
"references/debug.md": "3273a921a98522431ae821a283814897270c719cbfab83d14b99175537d869e5",
|
|
8
9
|
"references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
|
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).
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "1105f7e78b5e73e54aafb8150e03be8c3ccd3443bc3ae667555763a839c1abe4",
|
|
6
|
+
"agents/openai.yaml": "dd2676346caea1b53ae2bee6662aea064eea74c8ca6edf721382526f5fc42ef5",
|
|
6
7
|
"references/business-case.md": "32e000e8351cd59f9eaad8be40babb276df69948ea4f81e01a4672e47f48cb25",
|
|
7
8
|
"references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "1bfb43ee4b7d5633d8ce996d4ce3c12a75df09e9bb8457ab35597f48f85b2beb",
|
|
6
|
+
"agents/openai.yaml": "6be7812fcf2f56c9fc52b3fd0f0899e3a93a7ee482a901c48b6422e71f326fed",
|
|
6
7
|
"references/connect.md": "37ad703ece7fe3596be4d5d3697cc4ba5e6062615f9576733c20d055fc3e4927",
|
|
7
8
|
"references/debrief.md": "2d2db9a177f5341a9a2721a9d6ea32a6d07e7e982e621429ca408a38bc5617c1",
|
|
8
9
|
"references/ingest.md": "24880bc3d95cda09ec6c2f5edebd17fba99deb912f93e15c8b715a287283da84",
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "e06df3f2da2586c14e12f2599091231083c0a2f43af70b427c0ab307641610a3",
|
|
6
|
+
"agents/openai.yaml": "abbfc923f66cea302d6fb06b02ff5d2a9f9faa24f30904344785abab1e627999",
|
|
6
7
|
"references/dashboard.md": "dd842c17a2689a6017fecf34a6a24ee5cd40f504af4397eaeb2493ef4ffceda0",
|
|
7
8
|
"references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "f17036d3f4494abf5505a408d23d2b6fb5e7b34e2bc1217eb5f3603fcef1e5e5",
|
|
6
|
+
"agents/openai.yaml": "b56f5462c41c09ff1ff3022ed13ebf43749bee3c0578e32d5853d2580998939c",
|
|
6
7
|
"references/connect.md": "37ad703ece7fe3596be4d5d3697cc4ba5e6062615f9576733c20d055fc3e4927",
|
|
7
8
|
"references/debrief.md": "2d2db9a177f5341a9a2721a9d6ea32a6d07e7e982e621429ca408a38bc5617c1",
|
|
8
9
|
"references/ingest.md": "24880bc3d95cda09ec6c2f5edebd17fba99deb912f93e15c8b715a287283da84",
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
"generator": "bin/generate-skills.js",
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
|
-
"SKILL.md": "
|
|
5
|
+
"SKILL.md": "00b6f8c7c56be7a665f9401c58319fc4cd344e1c865d88021c116d94149a4a35",
|
|
6
|
+
"agents/openai.yaml": "f9178e65a1e2e9ee27f2f5917a36a50e3ebe64bd6e331b43379efcf1c7d5aac3",
|
|
6
7
|
"references/build.md": "03c52eda90642c62053b53ef1e85c97b4e647600f454aee9da0e415c9d98903e",
|
|
7
8
|
"references/debug.md": "3273a921a98522431ae821a283814897270c719cbfab83d14b99175537d869e5",
|
|
8
9
|
"references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
|
package/skills/debug/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: debug
|
|
3
|
-
description: Investigate
|
|
3
|
+
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.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# debug
|
|
@@ -9,7 +9,7 @@ description: Investigate and repair a reproducible failure in a customer integra
|
|
|
9
9
|
|
|
10
10
|
## Purpose
|
|
11
11
|
|
|
12
|
-
Investigate
|
|
12
|
+
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.
|
|
13
13
|
|
|
14
14
|
Before investigating or acting:
|
|
15
15
|
1. Read [the task context contract](references/task-context.md).
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "a9c477a1f2f2d44ba1893ea1299c3b30f07c772064b8c28d5bb31d87f032ef67",
|
|
6
|
+
"agents/openai.yaml": "14df03f4ac1652773b277fbe8e9c501f253dbe550b29f4df1ec0e15a9b6eb6aa",
|
|
6
7
|
"references/demo-prep.md": "2166d4104c8da995ea1dbdf27e36fe288a83c6e18ff1de2650fb0eec769ec84f",
|
|
7
8
|
"references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "bed4347f467126b6aafd035b2e91c05f37ae3fe5ef6dc9fc2b1a313fce4ccd8d",
|
|
6
|
+
"agents/openai.yaml": "77306e5aa72884b8c06afe91ae4991910bf3ad38a72375c2fc5251fc7744789a",
|
|
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": "a739454cd58e6beba57877e8b1c0d888d1068617b63959014c7b142fd12d68c3",
|
|
6
|
+
"agents/openai.yaml": "3157721445a01f3f840106c23f775305155946669cf44d056e5eb4641f47a84d",
|
|
6
7
|
"references/earn-trust.md": "ec31c339a39d9a7f3855ff77478684bc1d6cae473362489456f0c17b64c33399",
|
|
7
8
|
"references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "396110a1cb9a555b4096ef77bf45e531b60d78b18bd617c654f19c8e07506ce1",
|
|
6
|
+
"agents/openai.yaml": "731f3c81d46444af542369f0aa27736d24530d00fc1aa717436ddefe3f3bdef7",
|
|
6
7
|
"references/build.md": "03c52eda90642c62053b53ef1e85c97b4e647600f454aee9da0e415c9d98903e",
|
|
7
8
|
"references/debug.md": "3273a921a98522431ae821a283814897270c719cbfab83d14b99175537d869e5",
|
|
8
9
|
"references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
|