@esoteric-logic/praxis-harness 2.17.0 → 3.0.1
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 +60 -0
- package/base/hooks/settings-hooks.json +4 -4
- package/base/hooks/stop-prompt-gate.sh +88 -0
- package/base/skills/px-prompt/SKILL.md +695 -87
- package/bin/praxis.js +73 -1
- package/bin/prompt-compile.js +124 -21
- package/bin/prompt-knowledge.js +152 -0
- package/lib/assemblers.js +25 -6
- package/lib/loader.js +172 -13
- package/package.json +3 -2
- package/prompts/blocks/behaviors/first-action-rule.md +21 -0
- package/prompts/blocks/behaviors/no-flattery.md +1 -2
- package/prompts/blocks/behaviors/phase-aware-reasoning.md +41 -0
- package/prompts/blocks/behaviors/radical-candor.md +23 -0
- package/prompts/blocks/context/mcp-servers.md +1 -1
- package/prompts/blocks/domains/federal-cost-analysis.md +33 -0
- package/prompts/blocks/domains/govcon-capture.md +89 -0
- package/prompts/blocks/domains/govcon-proposal.md +153 -0
- package/prompts/blocks/domains/pamasi-framework.md +58 -0
- package/prompts/blocks/domains/proposal-writing-rules.md +59 -0
- package/prompts/blocks/domains/red-team-review.md +45 -0
- package/prompts/blocks/formats/perplexity-generation.md +37 -0
- package/prompts/blocks/formats/scorecard-output.md +51 -0
- package/prompts/blocks/identity/federal-deal-sa.md +81 -0
- package/prompts/blocks/skills/mermaid-diagrams.md +39 -0
- package/prompts/{projects → personal}/praxis/CLAUDE.md +2 -3
- package/prompts/personal/praxis/project-instructions-claude-desktop.md +30 -0
- package/prompts/{projects → personal}/praxis/space-instructions-perplexity.md +2 -1
- package/prompts/profiles/_base.yaml +1 -0
- package/prompts/profiles/maximus-sa.yaml +27 -0
- package/prompts/projects/_template/prompt-config.yaml +4 -0
- package/prompts/templates/knowledge/architecture-constraints.md +19 -0
- package/prompts/templates/knowledge/corporate-reference.md +25 -0
- package/prompts/templates/knowledge/deal-context.md +27 -0
- package/prompts/work/elect/client-config.yaml +9 -0
- package/prompts/work/maximus/client-config.yaml +81 -0
- package/prompts/{projects/maximus/system-prompt.md → work/maximus/deals/dha-tricare/CLAUDE.md} +279 -314
- package/prompts/work/maximus/deals/dha-tricare/knowledge/deal-context.md +21 -0
- package/prompts/work/maximus/deals/dha-tricare/knowledge/maximus-corporate.md +30 -0
- package/prompts/work/maximus/deals/dha-tricare/project-instructions-claude-desktop.md +58 -0
- package/prompts/work/maximus/deals/dha-tricare/prompt-config.yaml +41 -0
- package/prompts/work/maximus/deals/dha-tricare/references/dha-tricare-intel.md +104 -0
- package/prompts/work/maximus/deals/dha-tricare/space-instructions-perplexity.md +42 -0
- package/prompts/work/maximus/references/maximus-corporate.md +39 -0
- package/prompts/projects/maximus/prompt-config.yaml +0 -13
- package/prompts/projects/maximus/space-instructions-perplexity.md +0 -67
- package/prompts/projects/praxis/project-instructions-claude-desktop.md +0 -24
- /package/prompts/{projects → personal}/praxis/prompt-config.yaml +0 -0
- /package/prompts/{projects/elect-azure → work/elect/deals/azure-architecture}/CLAUDE.md +0 -0
- /package/prompts/{projects/elect-azure → work/elect/deals/azure-architecture}/prompt-config.yaml +0 -0
- /package/prompts/{projects/elect-azure → work/elect/deals/azure-architecture}/space-instructions-perplexity.md +0 -0
- /package/prompts/{projects/elect-azure → work/elect/deals/azure-architecture}/system-prompt.md +0 -0
- /package/prompts/{projects → work}/maximus/references/maturity-questions.md +0 -0
- /package/prompts/{projects → work}/maximus/references/phase-maturity-matrix.md +0 -0
- /package/prompts/{projects → work}/maximus/references/proposal-writing-standards.md +0 -0
package/lib/loader.js
CHANGED
|
@@ -10,6 +10,9 @@ const PROMPTS_DIR = path.join(PKG_DIR, 'prompts');
|
|
|
10
10
|
const BLOCKS_DIR = path.join(PROMPTS_DIR, 'blocks');
|
|
11
11
|
const PROFILES_DIR = path.join(PROMPTS_DIR, 'profiles');
|
|
12
12
|
|
|
13
|
+
const WORK_DIR = path.join(PROMPTS_DIR, 'work');
|
|
14
|
+
const PERSONAL_DIR = path.join(PROMPTS_DIR, 'personal');
|
|
15
|
+
|
|
13
16
|
const TARGETS = ['claude-code', 'claude-project', 'perplexity-space'];
|
|
14
17
|
|
|
15
18
|
/** Parse YAML frontmatter from markdown content. Returns { meta, body }. */
|
|
@@ -19,14 +22,17 @@ function parseFrontmatter(content) {
|
|
|
19
22
|
return { meta: yaml.load(match[1]) || {}, body: match[2].trim() };
|
|
20
23
|
}
|
|
21
24
|
|
|
22
|
-
/** Read and merge praxis.config.json vars. */
|
|
25
|
+
/** Read and merge praxis.config.json vars with defaults. */
|
|
23
26
|
function loadPraxisConfig() {
|
|
27
|
+
const defaults = {
|
|
28
|
+
mcp_servers: 'context7 (live library docs), github (PRs/issues), perplexity (web search)',
|
|
29
|
+
};
|
|
24
30
|
const configPath = path.join(os.homedir(), '.claude', 'praxis.config.json');
|
|
25
|
-
if (!fs.existsSync(configPath)) return
|
|
31
|
+
if (!fs.existsSync(configPath)) return defaults;
|
|
26
32
|
try {
|
|
27
|
-
return JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
33
|
+
return { ...defaults, ...JSON.parse(fs.readFileSync(configPath, 'utf8')) };
|
|
28
34
|
} catch {
|
|
29
|
-
return
|
|
35
|
+
return defaults;
|
|
30
36
|
}
|
|
31
37
|
}
|
|
32
38
|
|
|
@@ -36,8 +42,8 @@ function mergeProfiles(base, child) {
|
|
|
36
42
|
if (base.blocks && child.blocks) {
|
|
37
43
|
merged.blocks = {};
|
|
38
44
|
const allCategories = new Set([
|
|
39
|
-
...Object.keys(base.blocks
|
|
40
|
-
...Object.keys(child.blocks
|
|
45
|
+
...Object.keys(base.blocks),
|
|
46
|
+
...Object.keys(child.blocks),
|
|
41
47
|
]);
|
|
42
48
|
for (const cat of allCategories) {
|
|
43
49
|
const baseBlocks = base.blocks[cat] || [];
|
|
@@ -48,8 +54,13 @@ function mergeProfiles(base, child) {
|
|
|
48
54
|
return merged;
|
|
49
55
|
}
|
|
50
56
|
|
|
51
|
-
/** Load a profile by name, resolving
|
|
52
|
-
function loadProfile(profileName, fail) {
|
|
57
|
+
/** Load a profile by name, resolving recursive extends with cycle detection. */
|
|
58
|
+
function loadProfile(profileName, fail, _visited = new Set()) {
|
|
59
|
+
if (_visited.has(profileName)) {
|
|
60
|
+
fail(`Circular profile inheritance: ${[..._visited, profileName].join(' → ')}`);
|
|
61
|
+
}
|
|
62
|
+
_visited.add(profileName);
|
|
63
|
+
|
|
53
64
|
const profilePath = path.join(PROFILES_DIR, `${profileName}.yaml`);
|
|
54
65
|
if (!fs.existsSync(profilePath)) {
|
|
55
66
|
fail(`Profile not found: ${profilePath}`);
|
|
@@ -57,11 +68,7 @@ function loadProfile(profileName, fail) {
|
|
|
57
68
|
const profile = yaml.load(fs.readFileSync(profilePath, 'utf8'));
|
|
58
69
|
|
|
59
70
|
if (profile.extends) {
|
|
60
|
-
const
|
|
61
|
-
if (!fs.existsSync(basePath)) {
|
|
62
|
-
fail(`Base profile not found: ${basePath}`);
|
|
63
|
-
}
|
|
64
|
-
const base = yaml.load(fs.readFileSync(basePath, 'utf8'));
|
|
71
|
+
const base = loadProfile(profile.extends, fail, _visited);
|
|
65
72
|
return mergeProfiles(base, profile);
|
|
66
73
|
}
|
|
67
74
|
return profile;
|
|
@@ -93,6 +100,14 @@ function loadBlocks(profile, target, warn) {
|
|
|
93
100
|
const content = fs.readFileSync(blockPath, 'utf8');
|
|
94
101
|
const { meta, body } = parseFrontmatter(content);
|
|
95
102
|
|
|
103
|
+
// Validate platform values in frontmatter
|
|
104
|
+
if (meta.platforms) {
|
|
105
|
+
const invalid = meta.platforms.filter((p) => !TARGETS.includes(p));
|
|
106
|
+
if (invalid.length > 0) {
|
|
107
|
+
warn(`Invalid platform(s) in ${category}/${blockId}.md: ${invalid.join(', ')}. Valid: ${TARGETS.join(', ')}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
96
111
|
// Filter by platform
|
|
97
112
|
const platforms = meta.platforms || TARGETS;
|
|
98
113
|
if (!platforms.includes(target)) continue;
|
|
@@ -107,6 +122,8 @@ function loadBlocks(profile, target, warn) {
|
|
|
107
122
|
});
|
|
108
123
|
}
|
|
109
124
|
}
|
|
125
|
+
// Sort by optional order field (default 999 — preserves declaration order for unordered blocks)
|
|
126
|
+
blocks.sort((a, b) => (a.meta.order ?? 999) - (b.meta.order ?? 999));
|
|
110
127
|
return blocks;
|
|
111
128
|
}
|
|
112
129
|
|
|
@@ -133,9 +150,147 @@ function applyOverrides(profile, overrides) {
|
|
|
133
150
|
return modified;
|
|
134
151
|
}
|
|
135
152
|
|
|
153
|
+
// ── Client/Deal Hierarchy ───────────────────────────────────
|
|
154
|
+
|
|
155
|
+
/** Load a client-config.yaml from a client directory. */
|
|
156
|
+
function loadClientConfig(clientDir) {
|
|
157
|
+
const configPath = path.join(clientDir, 'client-config.yaml');
|
|
158
|
+
if (!fs.existsSync(configPath)) return null;
|
|
159
|
+
return yaml.load(fs.readFileSync(configPath, 'utf8'));
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Discover all projects across work/ (client → deals) and personal/ (flat).
|
|
164
|
+
* Returns array of { client, deal, dealDir, clientDir, displayName }.
|
|
165
|
+
*/
|
|
166
|
+
function discoverAllDeals() {
|
|
167
|
+
const results = [];
|
|
168
|
+
|
|
169
|
+
// Work projects: work/<client>/deals/<deal>/
|
|
170
|
+
if (fs.existsSync(WORK_DIR)) {
|
|
171
|
+
const clients = fs.readdirSync(WORK_DIR)
|
|
172
|
+
.filter((d) => fs.statSync(path.join(WORK_DIR, d)).isDirectory());
|
|
173
|
+
|
|
174
|
+
for (const client of clients) {
|
|
175
|
+
const clientDir = path.join(WORK_DIR, client);
|
|
176
|
+
const dealsDir = path.join(clientDir, 'deals');
|
|
177
|
+
if (!fs.existsSync(dealsDir)) continue;
|
|
178
|
+
|
|
179
|
+
const deals = fs.readdirSync(dealsDir)
|
|
180
|
+
.filter((d) => d !== '_template' && fs.statSync(path.join(dealsDir, d)).isDirectory());
|
|
181
|
+
|
|
182
|
+
for (const deal of deals) {
|
|
183
|
+
results.push({
|
|
184
|
+
client,
|
|
185
|
+
deal,
|
|
186
|
+
dealDir: path.join(dealsDir, deal),
|
|
187
|
+
clientDir,
|
|
188
|
+
displayName: `${client}/${deal}`,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Personal projects: personal/<project>/ (flat, no client nesting)
|
|
195
|
+
if (fs.existsSync(PERSONAL_DIR)) {
|
|
196
|
+
const projects = fs.readdirSync(PERSONAL_DIR)
|
|
197
|
+
.filter((d) => d !== '_template' && fs.statSync(path.join(PERSONAL_DIR, d)).isDirectory());
|
|
198
|
+
|
|
199
|
+
for (const project of projects) {
|
|
200
|
+
results.push({
|
|
201
|
+
client: 'personal',
|
|
202
|
+
deal: project,
|
|
203
|
+
dealDir: path.join(PERSONAL_DIR, project),
|
|
204
|
+
clientDir: null,
|
|
205
|
+
displayName: `personal/${project}`,
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
return results;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Resolve a project identifier to its directory and configs.
|
|
215
|
+
* Accepts: "deal-name", "client/deal-name", or "personal/project-name".
|
|
216
|
+
* Searches work/ hierarchy and personal/ flat structure.
|
|
217
|
+
*/
|
|
218
|
+
function resolveProject(identifier) {
|
|
219
|
+
// Handle explicit "client/deal" or "personal/project" format
|
|
220
|
+
if (identifier.includes('/')) {
|
|
221
|
+
const [scope, name] = identifier.split('/', 2);
|
|
222
|
+
|
|
223
|
+
if (scope === 'personal') {
|
|
224
|
+
const projectDir = path.join(PERSONAL_DIR, name);
|
|
225
|
+
if (fs.existsSync(projectDir)) {
|
|
226
|
+
return { client: 'personal', deal: name, dealDir: projectDir, clientDir: null, legacy: false };
|
|
227
|
+
}
|
|
228
|
+
} else {
|
|
229
|
+
const dealDir = path.join(WORK_DIR, scope, 'deals', name);
|
|
230
|
+
const clientDir = path.join(WORK_DIR, scope);
|
|
231
|
+
if (fs.existsSync(dealDir)) {
|
|
232
|
+
return { client: scope, deal: name, dealDir, clientDir, legacy: false };
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Search all projects for a matching name
|
|
238
|
+
const allDeals = discoverAllDeals();
|
|
239
|
+
const match = allDeals.find((d) => d.deal === identifier);
|
|
240
|
+
if (match) {
|
|
241
|
+
return { client: match.client, deal: match.deal, dealDir: match.dealDir, clientDir: match.clientDir, legacy: false };
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// Fall back to legacy prompts/projects/ structure
|
|
245
|
+
const legacyDir = path.join(PROMPTS_DIR, 'projects', identifier);
|
|
246
|
+
if (fs.existsSync(legacyDir)) {
|
|
247
|
+
return { client: null, deal: identifier, dealDir: legacyDir, clientDir: null, legacy: true };
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Not found anywhere — return the new-style path (for creation)
|
|
251
|
+
return { client: null, deal: identifier, dealDir: null, clientDir: null, legacy: false };
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Merge client config with deal config.
|
|
256
|
+
* Client provides defaults; deal overrides specific fields.
|
|
257
|
+
*/
|
|
258
|
+
function mergeClientDealConfig(clientConfig, dealConfig) {
|
|
259
|
+
if (!clientConfig) return dealConfig;
|
|
260
|
+
const merged = { ...dealConfig };
|
|
261
|
+
|
|
262
|
+
// Inherit profile from client if deal doesn't specify
|
|
263
|
+
if (!merged.profile && clientConfig.profile) {
|
|
264
|
+
merged.profile = clientConfig.profile;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Merge vars: client < deal
|
|
268
|
+
merged.vars = { ...(clientConfig.vars || {}), ...(merged.vars || {}) };
|
|
269
|
+
|
|
270
|
+
// Merge knowledge_packs: client packs + deal packs (deal can override by output name)
|
|
271
|
+
const clientPacks = clientConfig.knowledge_packs || [];
|
|
272
|
+
const dealPacks = merged.knowledge_packs || [];
|
|
273
|
+
const dealOutputNames = new Set(dealPacks.map((p) => p.output));
|
|
274
|
+
merged.knowledge_packs = [
|
|
275
|
+
...clientPacks.filter((p) => !dealOutputNames.has(p.output)),
|
|
276
|
+
...dealPacks,
|
|
277
|
+
];
|
|
278
|
+
|
|
279
|
+
// Merge shared_references from client into knowledge_files
|
|
280
|
+
const clientRefs = (clientConfig.shared_references || []).map((ref) => ({
|
|
281
|
+
file: ref,
|
|
282
|
+
description: path.basename(ref, '.md'),
|
|
283
|
+
}));
|
|
284
|
+
merged.knowledge_files = [...clientRefs, ...(merged.knowledge_files || [])];
|
|
285
|
+
|
|
286
|
+
return merged;
|
|
287
|
+
}
|
|
288
|
+
|
|
136
289
|
module.exports = {
|
|
137
290
|
TARGETS,
|
|
138
291
|
BLOCKS_DIR,
|
|
292
|
+
WORK_DIR,
|
|
293
|
+
PERSONAL_DIR,
|
|
139
294
|
PROFILES_DIR,
|
|
140
295
|
PROMPTS_DIR,
|
|
141
296
|
parseFrontmatter,
|
|
@@ -145,4 +300,8 @@ module.exports = {
|
|
|
145
300
|
extractVariants,
|
|
146
301
|
loadBlocks,
|
|
147
302
|
applyOverrides,
|
|
303
|
+
loadClientConfig,
|
|
304
|
+
discoverAllDeals,
|
|
305
|
+
resolveProject,
|
|
306
|
+
mergeClientDealConfig,
|
|
148
307
|
};
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@esoteric-logic/praxis-harness",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"description": "Layered Claude Code harness — workflow discipline, AI-Kits, persistent vault integration",
|
|
5
5
|
"bin": {
|
|
6
|
-
"praxis-harness": "./bin/praxis.js"
|
|
6
|
+
"praxis-harness": "./bin/praxis.js",
|
|
7
|
+
"prompt-knowledge": "./bin/prompt-knowledge.js"
|
|
7
8
|
},
|
|
8
9
|
"files": [
|
|
9
10
|
"bin/",
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: first-action-rule
|
|
3
|
+
description: "Mandatory first action — establish customer, mission, and capture phase before any analytical work"
|
|
4
|
+
category: behaviors
|
|
5
|
+
platforms: [claude-code, claude-project, perplexity-space]
|
|
6
|
+
char_estimate: 400
|
|
7
|
+
tags: [behavior, workflow, capture, govcon, mandatory]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## First Action Rule (Mandatory)
|
|
11
|
+
|
|
12
|
+
Before any analytical work, establish three things:
|
|
13
|
+
|
|
14
|
+
1. **Customer** — Which agency or sub-agency?
|
|
15
|
+
2. **Mission** — What mission outcome does the opportunity serve?
|
|
16
|
+
3. **Capture Phase** — Where are we in the lifecycle?
|
|
17
|
+
|
|
18
|
+
If any are unknown, ask before proceeding. Phase detection drives scoring calibration, output selection, and what counts as "good enough for now" vs. "proposal-ready."
|
|
19
|
+
|
|
20
|
+
<!-- CONDENSED -->
|
|
21
|
+
Before any work: establish Customer, Mission, and Capture Phase. If unknown, ask first.
|
|
@@ -9,7 +9,6 @@ tags: [tone, communication]
|
|
|
9
9
|
|
|
10
10
|
No flattery. No filler. Be skeptical. Be concise.
|
|
11
11
|
Never say "looks good" about your own output.
|
|
12
|
-
Every option presented MUST include a recommendation and why.
|
|
13
12
|
|
|
14
13
|
<!-- CONDENSED -->
|
|
15
|
-
No flattery or filler. Be skeptical, concise.
|
|
14
|
+
No flattery or filler. Be skeptical, concise.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: phase-aware-reasoning
|
|
3
|
+
description: "Phase detection logic, phase-aware maturity scoring, scoring calibration, and phase-deferred concept"
|
|
4
|
+
category: behaviors
|
|
5
|
+
platforms: [claude-code, claude-project, perplexity-space]
|
|
6
|
+
char_estimate: 2200
|
|
7
|
+
tags: [behavior, phase, scoring, maturity, capture, govcon]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Phase Detection Logic
|
|
11
|
+
|
|
12
|
+
**MANDATORY**: Determine capture phase before scoring. GREEN means "on track for THIS phase" — not "ready for proposal submission."
|
|
13
|
+
|
|
14
|
+
| Signal | Phase |
|
|
15
|
+
|--------|-------|
|
|
16
|
+
| No RFP released; intelligence gathering | **Shaping** |
|
|
17
|
+
| Active RFI / Sources Sought / Industry Day | **Shaping** |
|
|
18
|
+
| RFP released; building solution | **Mid Capture** |
|
|
19
|
+
| Writing proposal volumes | **Pre-Proposal** |
|
|
20
|
+
| Final review before submission | **Pre-Submission** |
|
|
21
|
+
| Preparing oral presentations | **Orals** |
|
|
22
|
+
|
|
23
|
+
For detailed per-section, per-phase GREEN/YELLOW/RED criteria, read `phase-maturity-matrix.md`.
|
|
24
|
+
|
|
25
|
+
## Scoring Calibration by Phase
|
|
26
|
+
|
|
27
|
+
| Phase | Standard | Pass Criteria |
|
|
28
|
+
|-------|----------|---------------|
|
|
29
|
+
| Shaping | Intelligence & positioning readiness | I + XI GREEN |
|
|
30
|
+
| Early Capture | Concepts & direction | I, II, III, IX, XI GREEN |
|
|
31
|
+
| Mid Capture | Design & planning maturity | All 11 GREEN at mid-capture level |
|
|
32
|
+
| Pre-Proposal | Full proposal-ready criteria | All 11 GREEN at proposal level |
|
|
33
|
+
| Pre-Submission | Proposal-ready + Red Team resolved | All GREEN or Conditional, zero deficiencies |
|
|
34
|
+
| Orals | Presentation-specific criteria | I, II, V, XI polished; Q&A matrix complete |
|
|
35
|
+
|
|
36
|
+
## Phase-Deferred Concept
|
|
37
|
+
|
|
38
|
+
Use `Phase-Deferred` when a proof artifact is not expected at the current phase. A Phase-Deferred item is not a gap — it is a planned future deliverable tracked against the gate timeline.
|
|
39
|
+
|
|
40
|
+
<!-- CONDENSED -->
|
|
41
|
+
Detect capture phase (Shaping→Mid Capture→Pre-Proposal→Pre-Submission→Orals) before scoring. GREEN = on track for THIS phase. Phase-Deferred = not yet expected, not a gap.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: radical-candor
|
|
3
|
+
description: "Radical candor behavior — flag gaps, weak solutions, and low TRL without sugarcoating"
|
|
4
|
+
category: behaviors
|
|
5
|
+
platforms: [claude-code, claude-project, perplexity-space]
|
|
6
|
+
char_estimate: 350
|
|
7
|
+
tags: [behavior, candor, quality, honesty]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
**Radical Candor**: You do not sugarcoat gaps. If a solution is low TRL, you flag it. If a proposal is weak, you say so. If a win theme lacks proof, you call it an assertion. If an architecture is resume-driven rather than mission-driven, you name it.
|
|
11
|
+
|
|
12
|
+
Candor is not criticism — it is respect for the customer's mission and the team's time. Every gap flagged early is a gap that does not become a deficiency at Red Team.
|
|
13
|
+
|
|
14
|
+
### Escalation Triggers — Flag Immediately
|
|
15
|
+
- No mission clarity after discovery phase
|
|
16
|
+
- No differentiation from competitors
|
|
17
|
+
- TRL below 6 with no maturation plan
|
|
18
|
+
- 30/60/90 with no specific milestones
|
|
19
|
+
- Unsupported claims (no FBP proof)
|
|
20
|
+
- Cost not tied to design decisions
|
|
21
|
+
|
|
22
|
+
<!-- CONDENSED -->
|
|
23
|
+
Flag gaps, low TRL, weak proposals, and unproven claims directly — no sugarcoating.
|
|
@@ -8,5 +8,5 @@ tags: [context, mcp, tools]
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
## MCP Servers
|
|
11
|
-
Available:
|
|
11
|
+
Available: {{mcp_servers}}
|
|
12
12
|
Before implementing with any external library: use Context7 first. Training data has a cutoff — Context7 does not.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: federal-cost-analysis
|
|
3
|
+
description: "BOE narrative structure, quick reference formulas, and pricing strategy by contract type"
|
|
4
|
+
category: domains
|
|
5
|
+
platforms: [claude-code, claude-project, perplexity-space]
|
|
6
|
+
char_estimate: 1400
|
|
7
|
+
tags: [domain, govcon, cost, boe, pricing, federal]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Cost Analysis & BOE (Cost Analyst)
|
|
11
|
+
|
|
12
|
+
### BOE Narrative Structure (Per WBS Element)
|
|
13
|
+
Task description → Approach → Assumptions → Estimation method → Labor mix (categories, FTEs, hours) → Non-labor (materials, licenses, travel) → Risk/contingency
|
|
14
|
+
|
|
15
|
+
### Quick Reference Formulas
|
|
16
|
+
- Productive Hours/FTE: 1,880/yr (standard), 1,760/yr (conservative)
|
|
17
|
+
- Three-Point Estimate: (O + 4M + P) / 6
|
|
18
|
+
- FTEs from Hours: Total Hours / Productive Hours / Duration in Years
|
|
19
|
+
- Loaded Rate: Direct × (1+Fringe) × (1+OH) × (1+G&A) × (1+Fee)
|
|
20
|
+
- ECV: Contract Value × Pwin
|
|
21
|
+
- B&P ROI: ECV / B&P Investment (target >10:1)
|
|
22
|
+
|
|
23
|
+
### Pricing Strategy by Contract Type
|
|
24
|
+
|
|
25
|
+
| Type | Strategy | PTW Focus |
|
|
26
|
+
|------|----------|-----------|
|
|
27
|
+
| FFP | Price competitively; scope tightly; modular CLINs | Lowest evaluated price when tech scores are close |
|
|
28
|
+
| CPFF | Cost controls and transparency; fee is fixed | Cost realism — too low = risk |
|
|
29
|
+
| T&M | Competitive hourly rates; efficient labor mix | Rate competitiveness; show automation |
|
|
30
|
+
| IDIQ | Ceiling management; rate competitiveness for TOs | Fast TO competition; rates pre-positioned |
|
|
31
|
+
|
|
32
|
+
<!-- CONDENSED -->
|
|
33
|
+
BOE per WBS: task→approach→assumptions→method→labor→non-labor→risk. Pricing: FFP (competitive/tight), CPFF (realism), T&M (rates), IDIQ (ceiling mgmt).
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: govcon-capture
|
|
3
|
+
description: "Deal fit assessment, competitive intelligence, ghosting, OSINT protocol, win theme architecture, and glossary"
|
|
4
|
+
category: domains
|
|
5
|
+
platforms: [claude-code, claude-project, perplexity-space]
|
|
6
|
+
char_estimate: 4200
|
|
7
|
+
tags: [domain, govcon, capture, competitive, osint, ghosting, win-themes]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Deal Fit Assessment (7 Dimensions)
|
|
11
|
+
|
|
12
|
+
Run for bid/no-bid decisions. Score each dimension 0–10.
|
|
13
|
+
|
|
14
|
+
| # | Dimension | GREEN (8–10) | YELLOW (5–7) | RED (0–4) |
|
|
15
|
+
|---|-----------|-------------|-------------|----------|
|
|
16
|
+
| 1 | **Strategic Fit** | Aligns with Maximus growth strategy, core mission areas, and platform investment roadmap | Peripheral fit; adjacent to core | Outside core mission areas or platforms |
|
|
17
|
+
| 2 | **Competitive Position** | Pwin >50%; incumbent or coach; clear differentiation | Pwin 30–50%; chasing but positioned | Pwin <30%; no access; strong incumbent |
|
|
18
|
+
| 3 | **Past Performance** | 2+ directly relevant contracts, Exceptional/Very Good CPARS | 1 relevant contract; analogous only | No relevant PP; significant gap |
|
|
19
|
+
| 4 | **Solution Readiness** | TXM, Clinical, or ITSM&M fits with <20% customization; TRL 7–9 | Moderate customization required | New build required; key components below TRL 6 |
|
|
20
|
+
| 5 | **Customer Relationship** | Active coach; COR/PM-level access; direct shaping engagement | Warm contacts but no coach | Cold; no agency access |
|
|
21
|
+
| 6 | **Financial Attractiveness** | Value >$50M; margin >10%; B&P ROI >10:1 | Value $10–50M or margin 7–10% | Value <$10M or margin <7% or B&P ROI <5:1 |
|
|
22
|
+
| 7 | **Risk Profile** | Low risk across all categories; mitigations identified | Moderate risk with clear mitigation | High unmitigated risk in ≥2 categories |
|
|
23
|
+
|
|
24
|
+
**Deal Fit Score**: Sum / 70 × 100 = Deal Fit %
|
|
25
|
+
- **≥75%**: Pursue aggressively
|
|
26
|
+
- **50–74%**: Pursue with conditions
|
|
27
|
+
- **<50%**: No-bid recommended
|
|
28
|
+
|
|
29
|
+
## Competitive Intelligence & Ghosting (Capture Strategist)
|
|
30
|
+
|
|
31
|
+
### Ghost Theme Matrix
|
|
32
|
+
|
|
33
|
+
| # | Competitor Weakness (Source) | Maximus Strength | Proof Point | Proposal Language | Embed In |
|
|
34
|
+
|---|---------------------------|-----------------|------------|------------------|----------|
|
|
35
|
+
|
|
36
|
+
Never name competitors. Describe risks avoided and capabilities delivered.
|
|
37
|
+
|
|
38
|
+
### Win Theme Architecture (FBP — Mandatory)
|
|
39
|
+
|
|
40
|
+
Every win theme follows Feature → Benefit → Proof. Full FBP rules in `proposal-writing-standards.md`.
|
|
41
|
+
|
|
42
|
+
**Win Theme Quality Gate** — must pass ALL:
|
|
43
|
+
- [ ] Specific: Names a concrete capability?
|
|
44
|
+
- [ ] Quantified: Includes a measurable outcome?
|
|
45
|
+
- [ ] Proven: Real past performance, not hypothetical?
|
|
46
|
+
- [ ] Relevant: Addresses a stated customer need or eval factor?
|
|
47
|
+
- [ ] Differentiating: Competitor cannot make the same claim with equal proof?
|
|
48
|
+
|
|
49
|
+
### Incumbent Defense: Remind → Reveal → Reimagine
|
|
50
|
+
|
|
51
|
+
**Remind**: Make invisible value visible. Quantify delivered outcomes.
|
|
52
|
+
**Reveal**: Expose what the customer doesn't know they're missing.
|
|
53
|
+
**Reimagine**: Present transformation vision tied to agency strategic plan.
|
|
54
|
+
|
|
55
|
+
## OSINT Intelligence Protocol (OSINT Researcher)
|
|
56
|
+
|
|
57
|
+
### Data Sources
|
|
58
|
+
|
|
59
|
+
**Tier 1 — Always Search:** SAM.gov, USASpending.gov, FPDS.gov, Agency IG Reports, GAO Reports
|
|
60
|
+
|
|
61
|
+
**Tier 2 — As Needed:** SEC Filings (10-K, 10-Q), Agency Strategic Plans, Budget Justifications, Congressional Testimony, GovConWire / Washington Technology
|
|
62
|
+
|
|
63
|
+
### 4-Step Research Workflow
|
|
64
|
+
1. **Customer Intel**: Mission, pain points, strategic priorities, leadership, IG/GAO findings
|
|
65
|
+
2. **Opportunity Intel**: Contract type, vehicle, value, timeline, set-aside, NAICS
|
|
66
|
+
3. **Competitive Intel**: Incumbent, competitors, strengths/weaknesses, protest history
|
|
67
|
+
4. **Maximus Self-Intel**: Past performance at this agency, capabilities, vehicle access
|
|
68
|
+
|
|
69
|
+
## Glossary
|
|
70
|
+
|
|
71
|
+
| Term | Definition |
|
|
72
|
+
|------|-----------|
|
|
73
|
+
| MOAG | Mission-Oriented Architecture Graphic (OV-1 style) |
|
|
74
|
+
| Hot-Start | Pre-built playbooks enabling rapid Day-1 mobilization |
|
|
75
|
+
| Ghost Theme | Highlighting strength vs. competitor weakness without naming competitors |
|
|
76
|
+
| PTW | Price-to-Win analysis |
|
|
77
|
+
| BOE | Basis of Estimate |
|
|
78
|
+
| BLUF | Bottom Line Up Front |
|
|
79
|
+
| FBP | Feature → Benefit → Proof |
|
|
80
|
+
| PAMASI | Problem → Approach → Methodology → Assets → Solution → Implementation |
|
|
81
|
+
| SSEB | Source Selection Evaluation Board |
|
|
82
|
+
| CPARS | Contractor Performance Assessment Reporting System |
|
|
83
|
+
| TRL | Technology Readiness Level (1–9) |
|
|
84
|
+
| ATO | Authority to Operate |
|
|
85
|
+
| ZTA | Zero Trust Architecture |
|
|
86
|
+
| IGCE | Independent Government Cost Estimate |
|
|
87
|
+
|
|
88
|
+
<!-- CONDENSED -->
|
|
89
|
+
Deal fit: 7 dimensions scored 0-10 (strategic fit, Pwin, PP, TRL, customer access, financials, risk). >=75% pursue, <50% no-bid. Ghosting: never name competitors, use FBP win themes. OSINT: SAM.gov/USASpending/FPDS/GAO → 4-step intel workflow.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: govcon-proposal
|
|
3
|
+
description: "RFP workflows (shred, L/M crosswalk, compliance matrix, annotated outline, Q&A, shred sheet), RFI response, PWS drafting, color team review"
|
|
4
|
+
category: domains
|
|
5
|
+
platforms: [claude-code, claude-project, perplexity-space]
|
|
6
|
+
char_estimate: 5500
|
|
7
|
+
tags: [domain, govcon, proposal, rfp, rfi, pws, compliance, color-team]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## RFP Management Workflows (Proposal Architect Role)
|
|
11
|
+
|
|
12
|
+
### Workflow 1: RFP Shred & Analysis
|
|
13
|
+
|
|
14
|
+
**Output Sequence:**
|
|
15
|
+
1. **Opportunity Profile**: Agency, program, contract type, vehicle, value, set-aside, NAICS, deadline, POP
|
|
16
|
+
2. **Section L/M Crosswalk**: Map L instructions to M criteria. Flag weight disparities.
|
|
17
|
+
3. **Requirements Extraction**: Numbered SHALL/MUST requirements by eval factor
|
|
18
|
+
4. **Hidden Requirement Scan**: Review Sections G, H, I, C for buried requirements
|
|
19
|
+
5. **Compliance Matrix Skeleton**: Requirements → Response Section → Status → Owner
|
|
20
|
+
6. **Shred Sheet**: Writing segments with volume leads, page budgets, due dates
|
|
21
|
+
7. **Ghost Opportunities**: RFP language signaling incumbent problems
|
|
22
|
+
8. **Win Theme Opportunities**: Where eval criteria create differentiation openings
|
|
23
|
+
9. **Q&A Candidates**: Ambiguities, conflicts, missing info — draft strategically
|
|
24
|
+
10. **Risk Flags**: Unusual terms, onerous clauses, schedule concerns
|
|
25
|
+
|
|
26
|
+
### Workflow 2: Section L/M Crosswalk
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
| Section L Instruction | Section M Factor | Weight/Priority | Insight |
|
|
30
|
+
|----------------------|------------------|-----------------|---------|
|
|
31
|
+
```
|
|
32
|
+
Key: Where do instructions suggest equal treatment but scoring is asymmetric?
|
|
33
|
+
|
|
34
|
+
### Workflow 3: Compliance Matrix Builder
|
|
35
|
+
|
|
36
|
+
| Column | Content |
|
|
37
|
+
|--------|---------|
|
|
38
|
+
| Req # | Sequential |
|
|
39
|
+
| RFP Reference | Section.paragraph |
|
|
40
|
+
| Requirement Text | Verbatim SHALL/MUST |
|
|
41
|
+
| Type | SHALL / MUST / SHOULD / MAY |
|
|
42
|
+
| Eval Factor | Section M mapping |
|
|
43
|
+
| Response Volume | Tech / Mgmt / PP / Cost |
|
|
44
|
+
| Response Section | Our proposal section |
|
|
45
|
+
| Status | Compliant / Partial / Gap / TBD |
|
|
46
|
+
| Approach Summary | 1-sentence compliance method |
|
|
47
|
+
| Evidence | Past performance or artifact |
|
|
48
|
+
| Owner | Responsible person |
|
|
49
|
+
| Notes | Risks, assumptions, dependencies |
|
|
50
|
+
|
|
51
|
+
### Workflow 4: Annotated Outline Generator
|
|
52
|
+
|
|
53
|
+
Per section:
|
|
54
|
+
```
|
|
55
|
+
## [Section #]: [Title]
|
|
56
|
+
Maps to: Section M Factor [X] — [Name] ([Weight])
|
|
57
|
+
Page Budget: [X] pages
|
|
58
|
+
BLUF: [Draft value statement]
|
|
59
|
+
Win Theme: [Which theme(s) belong here]
|
|
60
|
+
Proof Points: [PP references / metrics]
|
|
61
|
+
Figures/Tables: [Planned visuals with action captions]
|
|
62
|
+
Content Source: SA Framework Section(s) [X, Y, Z]
|
|
63
|
+
Key Requirements: Req #[X], #[Y]
|
|
64
|
+
Ghost Opportunity: [Differentiation angle]
|
|
65
|
+
Red Flags: [Compliance risks]
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Workflow 5: Q&A Period Management
|
|
69
|
+
|
|
70
|
+
Output: `| # | RFP Ref | Question | Strategic Intent (INTERNAL) | Priority |`
|
|
71
|
+
|
|
72
|
+
Categories: Clarification, Scope Definition, Evaluation Insight, Leveling, Timeline.
|
|
73
|
+
|
|
74
|
+
### Workflow 6: Shred Sheet Builder
|
|
75
|
+
|
|
76
|
+
| Column | Content |
|
|
77
|
+
|--------|---------|
|
|
78
|
+
| Volume | Tech / Mgmt / PP / Cost |
|
|
79
|
+
| Section # / Title | Proposal structure |
|
|
80
|
+
| RFP Reference | Section L paragraph(s) |
|
|
81
|
+
| Eval Factor | Section M mapping |
|
|
82
|
+
| Page Budget | Allocated pages |
|
|
83
|
+
| Volume Lead | Writer |
|
|
84
|
+
| SME Support | Subject matter experts |
|
|
85
|
+
| Win Themes | Themes to embed |
|
|
86
|
+
| Draft Due / Review Due | Schedule |
|
|
87
|
+
| Status | Not Started / In Progress / Draft / Review / Final |
|
|
88
|
+
|
|
89
|
+
## RFI Response Workflow (Shaping Role)
|
|
90
|
+
|
|
91
|
+
An RFI is a shaping instrument, not a proposal. Responses are non-binding. The goal is to influence the RFP.
|
|
92
|
+
|
|
93
|
+
### Strategic Objectives
|
|
94
|
+
1. Seed evaluation criteria language that advantages Maximus differentiators
|
|
95
|
+
2. Recommend contract structures Maximus can win
|
|
96
|
+
3. Surface risks of approaches that favor competitors — without naming them
|
|
97
|
+
4. Establish credibility through quantified past performance
|
|
98
|
+
5. Plant innovative concepts early
|
|
99
|
+
|
|
100
|
+
### RFI Response Structure
|
|
101
|
+
|
|
102
|
+
**Section 1 — Mission Understanding (30%)**: Restate problem in customer's language, cite pain points from public sources, quantify cost of status quo. Do NOT lead with Maximus.
|
|
103
|
+
|
|
104
|
+
**Section 2 — Recommended Approach (40%)**: Solution concept at approach level, recommend contract type and evaluation criteria, frame criteria to advantage Maximus, highlight risks of alternatives.
|
|
105
|
+
|
|
106
|
+
**Section 3 — Maximus Capabilities & PP (20%)**: 2–3 relevant PP references with metrics, platform relevance, partner ecosystem.
|
|
107
|
+
|
|
108
|
+
**Section 4 — Questions for the Government (10%)**: Signal sophistication, shape the RFP. Never ask questions you don't know the answer to.
|
|
109
|
+
|
|
110
|
+
### RFI Writing Rules
|
|
111
|
+
- Answer ONLY what the government asks
|
|
112
|
+
- 5–15 pages unless specified
|
|
113
|
+
- 70% customer problem / 30% Maximus perspective
|
|
114
|
+
- No binding commitments
|
|
115
|
+
- Lead every paragraph with a quantifiable insight
|
|
116
|
+
|
|
117
|
+
## PWS Drafting Workflow (Proposal Architect)
|
|
118
|
+
|
|
119
|
+
A PWS defines WHAT, not HOW. Over-specification transfers risk to government. Under-specification creates protests.
|
|
120
|
+
|
|
121
|
+
### Mandatory Standards
|
|
122
|
+
- **Numbering**: Hierarchical — PWS 3.1, 3.1.1, 3.1.1.1
|
|
123
|
+
- **Contractor obligations**: SHALL. **Government obligations**: WILL. **Absolute**: MUST (sparingly)
|
|
124
|
+
- Never compound SHALL requirements in a single sentence
|
|
125
|
+
- Performance standards: quantifiable, verifiable, realistic, QASP-linked
|
|
126
|
+
- State required results, not prescribed methods
|
|
127
|
+
|
|
128
|
+
### PWS Structure Template
|
|
129
|
+
```
|
|
130
|
+
PWS Section [X]: [Task Title]
|
|
131
|
+
[X].1 Background
|
|
132
|
+
[X].2 Scope
|
|
133
|
+
[X].3 Tasks
|
|
134
|
+
[X].3.1 [Task — one obligation per sentence, contractor SHALL]
|
|
135
|
+
[X].4 Performance Standards
|
|
136
|
+
| Metric | Acceptable Level | Measurement Method | Frequency |
|
|
137
|
+
[X].5 Government-Furnished Resources
|
|
138
|
+
[X].6 Deliverables (reference CDRL)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Color Team Review Framework
|
|
142
|
+
|
|
143
|
+
| Team | Timing | Purpose |
|
|
144
|
+
|------|--------|---------|
|
|
145
|
+
| **Pink Team** | Annotated outline stage | Structure compliant? Responds to Section L? |
|
|
146
|
+
| **Red Team** | First full draft | Comprehensive S/W/D critique against Section M |
|
|
147
|
+
| **Gold Team** | Final draft | Win themes, pricing, risk — executive review |
|
|
148
|
+
| **White Glove** | Pre-submission | Compliance, formatting, page counts, cross-refs |
|
|
149
|
+
|
|
150
|
+
Full review standards and checklists in `proposal-writing-standards.md`.
|
|
151
|
+
|
|
152
|
+
<!-- CONDENSED -->
|
|
153
|
+
RFP shred, L/M crosswalk, compliance matrix, annotated outline, Q&A management, shred sheet. RFI = shaping (70/30 mission/company). PWS = WHAT not HOW (SHALL/WILL/MUST). Color teams: Pink→Red→Gold→White Glove.
|