@esoteric-logic/praxis-harness 2.16.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +60 -0
  2. package/base/skills/px-prompt/SKILL.md +917 -107
  3. package/bin/praxis.js +73 -1
  4. package/bin/prompt-compile.js +129 -26
  5. package/bin/prompt-knowledge.js +152 -0
  6. package/lib/assemblers.js +25 -6
  7. package/lib/loader.js +172 -13
  8. package/package.json +3 -2
  9. package/prompts/blocks/behaviors/first-action-rule.md +21 -0
  10. package/prompts/blocks/behaviors/no-flattery.md +1 -2
  11. package/prompts/blocks/behaviors/phase-aware-reasoning.md +41 -0
  12. package/prompts/blocks/behaviors/radical-candor.md +23 -0
  13. package/prompts/blocks/context/mcp-servers.md +1 -1
  14. package/prompts/blocks/domains/federal-cost-analysis.md +33 -0
  15. package/prompts/blocks/domains/govcon-capture.md +89 -0
  16. package/prompts/blocks/domains/govcon-proposal.md +153 -0
  17. package/prompts/blocks/domains/pamasi-framework.md +58 -0
  18. package/prompts/blocks/domains/proposal-writing-rules.md +59 -0
  19. package/prompts/blocks/domains/red-team-review.md +45 -0
  20. package/prompts/blocks/formats/perplexity-generation.md +37 -0
  21. package/prompts/blocks/formats/scorecard-output.md +51 -0
  22. package/prompts/blocks/identity/federal-deal-sa.md +81 -0
  23. package/prompts/blocks/skills/mermaid-diagrams.md +39 -0
  24. package/prompts/{projects → personal}/praxis/CLAUDE.md +2 -3
  25. package/prompts/personal/praxis/project-instructions-claude-desktop.md +30 -0
  26. package/prompts/{projects/praxis/space-instructions.md → personal/praxis/space-instructions-perplexity.md} +2 -1
  27. package/prompts/profiles/_base.yaml +1 -0
  28. package/prompts/profiles/maximus-sa.yaml +27 -0
  29. package/prompts/projects/_template/prompt-config.yaml +4 -0
  30. package/prompts/templates/knowledge/architecture-constraints.md +19 -0
  31. package/prompts/templates/knowledge/corporate-reference.md +25 -0
  32. package/prompts/templates/knowledge/deal-context.md +27 -0
  33. package/prompts/work/elect/client-config.yaml +9 -0
  34. package/prompts/work/elect/deals/azure-architecture/CLAUDE.md +61 -0
  35. package/prompts/work/elect/deals/azure-architecture/prompt-config.yaml +16 -0
  36. package/prompts/work/elect/deals/azure-architecture/space-instructions-perplexity.md +39 -0
  37. package/prompts/work/elect/deals/azure-architecture/system-prompt.md +72 -0
  38. package/prompts/work/maximus/client-config.yaml +81 -0
  39. package/prompts/{projects/maximus/system-prompt.md → work/maximus/deals/dha-tricare/CLAUDE.md} +279 -314
  40. package/prompts/work/maximus/deals/dha-tricare/knowledge/deal-context.md +21 -0
  41. package/prompts/work/maximus/deals/dha-tricare/knowledge/maximus-corporate.md +30 -0
  42. package/prompts/work/maximus/deals/dha-tricare/project-instructions-claude-desktop.md +58 -0
  43. package/prompts/work/maximus/deals/dha-tricare/prompt-config.yaml +41 -0
  44. package/prompts/work/maximus/deals/dha-tricare/references/dha-tricare-intel.md +104 -0
  45. package/prompts/work/maximus/deals/dha-tricare/space-instructions-perplexity.md +42 -0
  46. package/prompts/work/maximus/references/maximus-corporate.md +39 -0
  47. package/prompts/projects/maximus/prompt-config.yaml +0 -13
  48. package/prompts/projects/maximus/space-instructions.md +0 -67
  49. package/prompts/projects/praxis/project-instructions.md +0 -24
  50. /package/prompts/{projects → personal}/praxis/prompt-config.yaml +0 -0
  51. /package/prompts/{projects → work}/maximus/references/maturity-questions.md +0 -0
  52. /package/prompts/{projects → work}/maximus/references/phase-maturity-matrix.md +0 -0
  53. /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 single-level extends. */
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 basePath = path.join(PROFILES_DIR, `${profile.extends}.yaml`);
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": "2.16.0",
3
+ "version": "3.0.0",
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. Always recommend with reasoning.
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: context7 (live library docs), github (PRs/issues), perplexity (web search).
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.