productfoo 0.0.0-stage → 1.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/LICENSE +201 -0
- package/README.md +338 -2
- package/bin/foo +3 -0
- package/bin/foo.mjs +42 -0
- package/commands/bug.md +31 -0
- package/commands/discovery.md +28 -0
- package/commands/ideate.md +27 -0
- package/commands/init.md +28 -0
- package/commands/pitch.md +27 -0
- package/commands/preview.md +25 -0
- package/commands/research.md +31 -0
- package/commands/roast.md +27 -0
- package/commands/spec.md +30 -0
- package/config/pricing.yaml +198 -0
- package/config/routing-policy.yaml +171 -0
- package/dist-public/src/activeModel.d.ts +83 -0
- package/dist-public/src/activeModel.js +331 -0
- package/dist-public/src/agentAdapters.d.ts +122 -0
- package/dist-public/src/agentAdapters.js +178 -0
- package/dist-public/src/agentState.d.ts +43 -0
- package/dist-public/src/agentState.js +177 -0
- package/dist-public/src/bugCapsule.d.ts +94 -0
- package/dist-public/src/bugCapsule.js +227 -0
- package/dist-public/src/bugCapture.d.ts +26 -0
- package/dist-public/src/bugCapture.js +251 -0
- package/dist-public/src/bugOwnerLog.d.ts +93 -0
- package/dist-public/src/bugOwnerLog.js +304 -0
- package/dist-public/src/bugReportStore.d.ts +48 -0
- package/dist-public/src/bugReportStore.js +860 -0
- package/dist-public/src/bugSpecContext.d.ts +7 -0
- package/dist-public/src/bugSpecContext.js +129 -0
- package/dist-public/src/channelFreshness.d.ts +25 -0
- package/dist-public/src/channelFreshness.js +194 -0
- package/dist-public/src/cli.d.ts +30 -0
- package/dist-public/src/cli.js +1667 -0
- package/dist-public/src/cliArgs.d.ts +7 -0
- package/dist-public/src/cliArgs.js +44 -0
- package/dist-public/src/codeCatalog.d.ts +41 -0
- package/dist-public/src/codeCatalog.js +197 -0
- package/dist-public/src/commandContract.d.ts +84 -0
- package/dist-public/src/commandContract.js +390 -0
- package/dist-public/src/commandUsage.d.ts +3 -0
- package/dist-public/src/commandUsage.js +30 -0
- package/dist-public/src/commands/agent.d.ts +60 -0
- package/dist-public/src/commands/agent.js +1353 -0
- package/dist-public/src/commands/asp.d.ts +8 -0
- package/dist-public/src/commands/asp.js +669 -0
- package/dist-public/src/commands/evalCmd.d.ts +4 -0
- package/dist-public/src/commands/evalCmd.js +405 -0
- package/dist-public/src/commands/login.d.ts +25 -0
- package/dist-public/src/commands/login.js +94 -0
- package/dist-public/src/commands/loop.d.ts +16 -0
- package/dist-public/src/commands/loop.js +619 -0
- package/dist-public/src/commands/reconcile.d.ts +41 -0
- package/dist-public/src/commands/reconcile.js +292 -0
- package/dist-public/src/commands/runtime.d.ts +1 -0
- package/dist-public/src/commands/runtime.js +36 -0
- package/dist-public/src/commands/scanRedact.d.ts +8 -0
- package/dist-public/src/commands/scanRedact.js +266 -0
- package/dist-public/src/commands/setup.d.ts +28 -0
- package/dist-public/src/commands/setup.js +398 -0
- package/dist-public/src/commands/shared.d.ts +17 -0
- package/dist-public/src/commands/shared.js +147 -0
- package/dist-public/src/commands/source.d.ts +1 -0
- package/dist-public/src/commands/source.js +134 -0
- package/dist-public/src/commands/specCmd.d.ts +24 -0
- package/dist-public/src/commands/specCmd.js +794 -0
- package/dist-public/src/commands/update.d.ts +61 -0
- package/dist-public/src/commands/update.js +244 -0
- package/dist-public/src/comprehensionSignal.d.ts +20 -0
- package/dist-public/src/comprehensionSignal.js +166 -0
- package/dist-public/src/conductor/diversity.d.ts +48 -0
- package/dist-public/src/conductor/diversity.js +423 -0
- package/dist-public/src/conductor/engine.d.ts +7 -0
- package/dist-public/src/conductor/engine.js +295 -0
- package/dist-public/src/conductor/families/ideate.d.ts +2 -0
- package/dist-public/src/conductor/families/ideate.js +255 -0
- package/dist-public/src/conductor/families/interview.d.ts +2 -0
- package/dist-public/src/conductor/families/interview.js +39 -0
- package/dist-public/src/conductor/families/specSwarm.d.ts +2 -0
- package/dist-public/src/conductor/families/specSwarm.js +146 -0
- package/dist-public/src/conductor/familyDelivery.d.ts +6 -0
- package/dist-public/src/conductor/familyDelivery.js +37 -0
- package/dist-public/src/conductor/familyPackArtifact.d.ts +4 -0
- package/dist-public/src/conductor/familyPackArtifact.js +260 -0
- package/dist-public/src/conductor/ideateDecision.d.ts +6 -0
- package/dist-public/src/conductor/ideateDecision.js +237 -0
- package/dist-public/src/conductor/pack.d.ts +26 -0
- package/dist-public/src/conductor/pack.js +75 -0
- package/dist-public/src/conductor/types.d.ts +111 -0
- package/dist-public/src/conductor/types.js +7 -0
- package/dist-public/src/configPath.d.ts +2 -0
- package/dist-public/src/configPath.js +7 -0
- package/dist-public/src/discoveryArtifacts.d.ts +54 -0
- package/dist-public/src/discoveryArtifacts.js +467 -0
- package/dist-public/src/discoveryCommand.d.ts +127 -0
- package/dist-public/src/discoveryCommand.js +2148 -0
- package/dist-public/src/discoveryConnections.d.ts +339 -0
- package/dist-public/src/discoveryConnections.js +613 -0
- package/dist-public/src/discoveryDocs.d.ts +129 -0
- package/dist-public/src/discoveryDocs.js +577 -0
- package/dist-public/src/discoveryEvidence.d.ts +59 -0
- package/dist-public/src/discoveryEvidence.js +198 -0
- package/dist-public/src/discoveryFireflies.d.ts +25 -0
- package/dist-public/src/discoveryFireflies.js +551 -0
- package/dist-public/src/discoveryGmail.d.ts +12 -0
- package/dist-public/src/discoveryGmail.js +466 -0
- package/dist-public/src/discoveryGong.d.ts +12 -0
- package/dist-public/src/discoveryGong.js +491 -0
- package/dist-public/src/discoveryLearningRouting.d.ts +90 -0
- package/dist-public/src/discoveryLearningRouting.js +405 -0
- package/dist-public/src/discoveryMatching.d.ts +26 -0
- package/dist-public/src/discoveryMatching.js +73 -0
- package/dist-public/src/discoveryOutlook.d.ts +12 -0
- package/dist-public/src/discoveryOutlook.js +492 -0
- package/dist-public/src/discoveryProcess.d.ts +221 -0
- package/dist-public/src/discoveryProcess.js +703 -0
- package/dist-public/src/discoveryProof.d.ts +143 -0
- package/dist-public/src/discoveryProof.js +529 -0
- package/dist-public/src/discoveryProviders.d.ts +152 -0
- package/dist-public/src/discoveryProviders.js +756 -0
- package/dist-public/src/discoveryReadiness.d.ts +219 -0
- package/dist-public/src/discoveryReadiness.js +672 -0
- package/dist-public/src/discoveryReconcile.d.ts +57 -0
- package/dist-public/src/discoveryReconcile.js +424 -0
- package/dist-public/src/discoverySlack.d.ts +12 -0
- package/dist-public/src/discoverySlack.js +452 -0
- package/dist-public/src/discoverySources.d.ts +56 -0
- package/dist-public/src/discoverySources.js +322 -0
- package/dist-public/src/discoverySync.d.ts +52 -0
- package/dist-public/src/discoverySync.js +151 -0
- package/dist-public/src/discoverySynthesis.d.ts +57 -0
- package/dist-public/src/discoverySynthesis.js +215 -0
- package/dist-public/src/discoveryTeams.d.ts +12 -0
- package/dist-public/src/discoveryTeams.js +516 -0
- package/dist-public/src/discoveryZoom.d.ts +12 -0
- package/dist-public/src/discoveryZoom.js +523 -0
- package/dist-public/src/elicitationSurface.d.ts +13 -0
- package/dist-public/src/elicitationSurface.js +77 -0
- package/dist-public/src/errorReport.d.ts +99 -0
- package/dist-public/src/errorReport.js +443 -0
- package/dist-public/src/errorTaxonomy.d.ts +84 -0
- package/dist-public/src/errorTaxonomy.js +189 -0
- package/dist-public/src/evalCalibration.d.ts +82 -0
- package/dist-public/src/evalCalibration.js +169 -0
- package/dist-public/src/evalChecks.d.ts +21 -0
- package/dist-public/src/evalChecks.js +295 -0
- package/dist-public/src/evalCompile.d.ts +56 -0
- package/dist-public/src/evalCompile.js +58 -0
- package/dist-public/src/evalImprove.d.ts +60 -0
- package/dist-public/src/evalImprove.js +175 -0
- package/dist-public/src/evalJudge.d.ts +47 -0
- package/dist-public/src/evalJudge.js +143 -0
- package/dist-public/src/evalLabels.d.ts +100 -0
- package/dist-public/src/evalLabels.js +287 -0
- package/dist-public/src/evalRecord.d.ts +68 -0
- package/dist-public/src/evalRecord.js +165 -0
- package/dist-public/src/evalRoast.d.ts +88 -0
- package/dist-public/src/evalRoast.js +249 -0
- package/dist-public/src/evidenceIntake.d.ts +66 -0
- package/dist-public/src/evidenceIntake.js +356 -0
- package/dist-public/src/feedback.d.ts +78 -0
- package/dist-public/src/feedback.js +294 -0
- package/dist-public/src/firefliesClient.d.ts +106 -0
- package/dist-public/src/firefliesClient.js +258 -0
- package/dist-public/src/firstMoveTensions.d.ts +10 -0
- package/dist-public/src/firstMoveTensions.js +93 -0
- package/dist-public/src/gitRun.d.ts +21 -0
- package/dist-public/src/gitRun.js +50 -0
- package/dist-public/src/githubReconcile.d.ts +94 -0
- package/dist-public/src/githubReconcile.js +205 -0
- package/dist-public/src/gmailNango.d.ts +131 -0
- package/dist-public/src/gmailNango.js +329 -0
- package/dist-public/src/gongNango.d.ts +118 -0
- package/dist-public/src/gongNango.js +308 -0
- package/dist-public/src/grammarGate.d.ts +13 -0
- package/dist-public/src/grammarGate.js +72 -0
- package/dist-public/src/harnessGates.d.ts +65 -0
- package/dist-public/src/harnessGates.js +168 -0
- package/dist-public/src/humanSurfaceEval.d.ts +19 -0
- package/dist-public/src/humanSurfaceEval.js +156 -0
- package/dist-public/src/ideate.d.ts +43 -0
- package/dist-public/src/ideate.js +255 -0
- package/dist-public/src/ideateContext.d.ts +11 -0
- package/dist-public/src/ideateContext.js +83 -0
- package/dist-public/src/index.d.ts +2 -0
- package/dist-public/src/index.js +4 -0
- package/dist-public/src/initCommand.d.ts +25 -0
- package/dist-public/src/initCommand.js +558 -0
- package/dist-public/src/interviewGate.d.ts +25 -0
- package/dist-public/src/interviewGate.js +126 -0
- package/dist-public/src/jsonFile.d.ts +2 -0
- package/dist-public/src/jsonFile.js +22 -0
- package/dist-public/src/loopBudget.d.ts +182 -0
- package/dist-public/src/loopBudget.js +494 -0
- package/dist-public/src/loopContracts.d.ts +35 -0
- package/dist-public/src/loopContracts.js +364 -0
- package/dist-public/src/machineState.d.ts +1 -0
- package/dist-public/src/machineState.js +9 -0
- package/dist-public/src/notionNango.d.ts +93 -0
- package/dist-public/src/notionNango.js +279 -0
- package/dist-public/src/orchestrationResult.d.ts +11 -0
- package/dist-public/src/orchestrationResult.js +73 -0
- package/dist-public/src/outlookNango.d.ts +124 -0
- package/dist-public/src/outlookNango.js +327 -0
- package/dist-public/src/packetCorrections.d.ts +40 -0
- package/dist-public/src/packetCorrections.js +172 -0
- package/dist-public/src/packetGlossary.d.ts +6 -0
- package/dist-public/src/packetGlossary.js +42 -0
- package/dist-public/src/packetIndex.d.ts +54 -0
- package/dist-public/src/packetIndex.js +744 -0
- package/dist-public/src/packetIndexEntry.d.ts +3 -0
- package/dist-public/src/packetIndexEntry.js +128 -0
- package/dist-public/src/packetIndexServe.d.ts +13 -0
- package/dist-public/src/packetIndexServe.js +113 -0
- package/dist-public/src/packetIndexWorker.d.ts +7 -0
- package/dist-public/src/packetIndexWorker.js +45 -0
- package/dist-public/src/packetLifecycle.d.ts +30 -0
- package/dist-public/src/packetLifecycle.js +127 -0
- package/dist-public/src/packetReconcile.d.ts +73 -0
- package/dist-public/src/packetReconcile.js +386 -0
- package/dist-public/src/packetStatus.d.ts +125 -0
- package/dist-public/src/packetStatus.js +770 -0
- package/dist-public/src/packetValidation.d.ts +17 -0
- package/dist-public/src/packetValidation.js +333 -0
- package/dist-public/src/packetVerify.d.ts +73 -0
- package/dist-public/src/packetVerify.js +303 -0
- package/dist-public/src/packetWrite.d.ts +52 -0
- package/dist-public/src/packetWrite.js +448 -0
- package/dist-public/src/pitch.d.ts +38 -0
- package/dist-public/src/pitch.js +154 -0
- package/dist-public/src/processMemo.d.ts +8 -0
- package/dist-public/src/processMemo.js +23 -0
- package/dist-public/src/productDetect.d.ts +30 -0
- package/dist-public/src/productDetect.js +376 -0
- package/dist-public/src/profile.d.ts +62 -0
- package/dist-public/src/profile.js +334 -0
- package/dist-public/src/questionModel.d.ts +46 -0
- package/dist-public/src/questionModel.js +74 -0
- package/dist-public/src/questionText.d.ts +7 -0
- package/dist-public/src/questionText.js +38 -0
- package/dist-public/src/redactConfig.d.ts +2 -0
- package/dist-public/src/redactConfig.js +11 -0
- package/dist-public/src/redactEngine.d.ts +59 -0
- package/dist-public/src/redactEngine.js +509 -0
- package/dist-public/src/redactGate.d.ts +63 -0
- package/dist-public/src/redactGate.js +209 -0
- package/dist-public/src/repoRead.d.ts +29 -0
- package/dist-public/src/repoRead.js +160 -0
- package/dist-public/src/research.d.ts +242 -0
- package/dist-public/src/research.js +1314 -0
- package/dist-public/src/researchCompletion.d.ts +34 -0
- package/dist-public/src/researchCompletion.js +123 -0
- package/dist-public/src/researchExecution.d.ts +47 -0
- package/dist-public/src/researchExecution.js +309 -0
- package/dist-public/src/researchFormat.d.ts +21 -0
- package/dist-public/src/researchFormat.js +77 -0
- package/dist-public/src/researchGate.d.ts +86 -0
- package/dist-public/src/researchGate.js +1036 -0
- package/dist-public/src/researchReceipt.d.ts +76 -0
- package/dist-public/src/researchReceipt.js +148 -0
- package/dist-public/src/researchRender.d.ts +2 -0
- package/dist-public/src/researchRender.js +267 -0
- package/dist-public/src/researchSigningKey.d.ts +19 -0
- package/dist-public/src/researchSigningKey.js +95 -0
- package/dist-public/src/riskClassify.d.ts +42 -0
- package/dist-public/src/riskClassify.js +149 -0
- package/dist-public/src/routines.d.ts +42 -0
- package/dist-public/src/routines.js +269 -0
- package/dist-public/src/routingPolicy.d.ts +172 -0
- package/dist-public/src/routingPolicy.js +646 -0
- package/dist-public/src/secretInput.d.ts +8 -0
- package/dist-public/src/secretInput.js +89 -0
- package/dist-public/src/selfCheck.d.ts +7 -0
- package/dist-public/src/selfCheck.js +473 -0
- package/dist-public/src/selfCheckCache.d.ts +29 -0
- package/dist-public/src/selfCheckCache.js +147 -0
- package/dist-public/src/severityClass.d.ts +15 -0
- package/dist-public/src/severityClass.js +22 -0
- package/dist-public/src/skillClientPolicy.d.ts +8 -0
- package/dist-public/src/skillClientPolicy.js +16 -0
- package/dist-public/src/skillLocal.d.ts +98 -0
- package/dist-public/src/skillLocal.js +463 -0
- package/dist-public/src/skillTreeDigest.d.ts +9 -0
- package/dist-public/src/skillTreeDigest.js +64 -0
- package/dist-public/src/slackNango.d.ts +62 -0
- package/dist-public/src/slackNango.js +208 -0
- package/dist-public/src/social/arxiv.d.ts +19 -0
- package/dist-public/src/social/arxiv.js +96 -0
- package/dist-public/src/social/github.d.ts +2 -0
- package/dist-public/src/social/github.js +78 -0
- package/dist-public/src/social/hackernews.d.ts +2 -0
- package/dist-public/src/social/hackernews.js +67 -0
- package/dist-public/src/social/index.d.ts +10 -0
- package/dist-public/src/social/index.js +79 -0
- package/dist-public/src/social/reddit.d.ts +2 -0
- package/dist-public/src/social/reddit.js +125 -0
- package/dist-public/src/social/types.d.ts +73 -0
- package/dist-public/src/social/types.js +61 -0
- package/dist-public/src/social/xml.d.ts +10 -0
- package/dist-public/src/social/xml.js +49 -0
- package/dist-public/src/social/youtube.d.ts +7 -0
- package/dist-public/src/social/youtube.js +217 -0
- package/dist-public/src/sourceIngress.d.ts +488 -0
- package/dist-public/src/sourceIngress.js +1651 -0
- package/dist-public/src/specAfter.d.ts +187 -0
- package/dist-public/src/specAfter.js +814 -0
- package/dist-public/src/specBudget.d.ts +124 -0
- package/dist-public/src/specBudget.js +424 -0
- package/dist-public/src/specDecisionSignals.d.ts +38 -0
- package/dist-public/src/specDecisionSignals.js +121 -0
- package/dist-public/src/specLinkedCommits.d.ts +7 -0
- package/dist-public/src/specLinkedCommits.js +107 -0
- package/dist-public/src/specSections.d.ts +105 -0
- package/dist-public/src/specSections.js +718 -0
- package/dist-public/src/statusGlyphs.d.ts +18 -0
- package/dist-public/src/statusGlyphs.js +75 -0
- package/dist-public/src/swarmCommand.d.ts +10 -0
- package/dist-public/src/swarmCommand.js +96 -0
- package/dist-public/src/teamsNango.d.ts +114 -0
- package/dist-public/src/teamsNango.js +301 -0
- package/dist-public/src/tokenStore.d.ts +10 -0
- package/dist-public/src/tokenStore.js +77 -0
- package/dist-public/src/trustEnvelope.d.ts +78 -0
- package/dist-public/src/trustEnvelope.js +392 -0
- package/dist-public/src/untrustedText.d.ts +6 -0
- package/dist-public/src/untrustedText.js +20 -0
- package/dist-public/src/updateNotice.d.ts +41 -0
- package/dist-public/src/updateNotice.js +290 -0
- package/dist-public/src/vendorYaml.d.ts +1 -0
- package/dist-public/src/vendorYaml.js +7374 -0
- package/dist-public/src/workflowRunActuals.d.ts +67 -0
- package/dist-public/src/workflowRunActuals.js +184 -0
- package/dist-public/src/zendeskDiscovery.d.ts +12 -0
- package/dist-public/src/zendeskDiscovery.js +513 -0
- package/dist-public/src/zendeskNango.d.ts +131 -0
- package/dist-public/src/zendeskNango.js +344 -0
- package/dist-public/src/zoomNango.d.ts +106 -0
- package/dist-public/src/zoomNango.js +351 -0
- package/docs/CHANGELOG.md +32 -0
- package/docs/THIRD_PARTY_NOTICES.md +36 -0
- package/package.json +71 -4
- package/schemas/bug-capsule-receipt.schema.json +54 -0
- package/schemas/bug-capsule.schema.json +189 -0
- package/schemas/discovery-evidence-envelope.schema.json +79 -0
- package/schemas/discovery-processing-receipt.schema.json +71 -0
- package/schemas/discovery-service-contract.schema.json +189 -0
- package/skills/AGENTS.md +32 -0
- package/skills/README.md +287 -0
- package/skills/bug/SKILL.md +49 -0
- package/skills/build-preview-spec/SKILL.md +103 -0
- package/skills/capture-external-artifact/SKILL.md +23 -0
- package/skills/capture-external-artifact/agents/openai.yaml +4 -0
- package/skills/capture-external-artifact/references/extractor-libraries.md +27 -0
- package/skills/check-spec-health/SKILL.md +45 -0
- package/skills/check-spec-health/agents/openai.yaml +4 -0
- package/skills/competitive-positioning/SKILL.md +86 -0
- package/skills/competitive-positioning/agents/openai.yaml +4 -0
- package/skills/cpo-lens/SKILL.md +398 -0
- package/skills/cpo-lens/agents/openai.yaml +4 -0
- package/skills/create-prd/SKILL.md +26 -0
- package/skills/create-prd/agents/openai.yaml +4 -0
- package/skills/customer-discovery/SKILL.md +192 -0
- package/skills/design-system/SKILL.md +49 -0
- package/skills/design-system/agents/openai.yaml +4 -0
- package/skills/discussion-guide/SKILL.md +75 -0
- package/skills/discussion-guide/agents/openai.yaml +4 -0
- package/skills/firecrawl-research-papers/SKILL.md +96 -0
- package/skills/firecrawl-research-papers/agents/openai.yaml +4 -0
- package/skills/foo-roast/SKILL.md +325 -0
- package/skills/generate-gtm-brief/SKILL.md +41 -0
- package/skills/generate-gtm-brief/agents/openai.yaml +4 -0
- package/skills/generate-gtm-brief/references/gtm-brief-template.md +56 -0
- package/skills/gong-quotes/SKILL.md +43 -0
- package/skills/gong-quotes/agents/openai.yaml +4 -0
- package/skills/grill-me/SKILL.md +27 -0
- package/skills/grill-me/agents/openai.yaml +4 -0
- package/skills/ideate/SKILL.md +180 -0
- package/skills/ideate/references/family-packs.md +5 -0
- package/skills/initiative-tracker/SKILL.md +23 -0
- package/skills/initiative-tracker/agents/openai.yaml +4 -0
- package/skills/interop-review/SKILL.md +25 -0
- package/skills/interop-review/agents/openai.yaml +4 -0
- package/skills/interview-me/SKILL.md +404 -0
- package/skills/interview-me/agents/openai.yaml +4 -0
- package/skills/loop-library-audit/SKILL.md +123 -0
- package/skills/pitch/SKILL.md +110 -0
- package/skills/pitch/references/opportunity-assessment.md +136 -0
- package/skills/pitch/references/prfaq-template.md +54 -0
- package/skills/pmm-release-briefing/SKILL.md +27 -0
- package/skills/pmm-release-briefing/agents/openai.yaml +4 -0
- package/skills/pmm-release-briefing/references/variant-generalized.md +16 -0
- package/skills/positioning-messaging/SKILL.md +70 -0
- package/skills/positioning-messaging/agents/openai.yaml +4 -0
- package/skills/positioning-messaging/references/guest-insights.md +1400 -0
- package/skills/preview-swarm/SKILL.md +418 -0
- package/skills/preview-swarm/agents/openai.yaml +4 -0
- package/skills/preview-swarm/references/html-effectiveness-build-previews.md +168 -0
- package/skills/product-copywriting/SKILL.md +127 -0
- package/skills/product-copywriting/agents/openai.yaml +4 -0
- package/skills/product-copywriting/references/foo-voice.md +26 -0
- package/skills/product-shape-interview/SKILL.md +219 -0
- package/skills/product-shape-interview/agents/openai.yaml +4 -0
- package/skills/ready-for-release/SKILL.md +39 -0
- package/skills/ready-for-release/agents/openai.yaml +4 -0
- package/skills/redact-transcripts/SKILL.md +23 -0
- package/skills/redact-transcripts/agents/openai.yaml +4 -0
- package/skills/research-brief/SKILL.md +48 -0
- package/skills/research-brief/agents/openai.yaml +4 -0
- package/skills/research-refresh/SKILL.md +63 -0
- package/skills/research-refresh/references/worked-cases.md +44 -0
- package/skills/review-loop/SKILL.md +200 -0
- package/skills/review-spec/SKILL.md +32 -0
- package/skills/review-spec/agents/openai.yaml +4 -0
- package/skills/rfc-from-research/SKILL.md +42 -0
- package/skills/rfc-from-research/agents/openai.yaml +4 -0
- package/skills/rfc-from-research/references/rfc-pattern.md +69 -0
- package/skills/skill-registry.yaml +810 -0
- package/skills/spec-cleanup/SKILL.md +103 -0
- package/skills/spec-cleanup/agents/openai.yaml +4 -0
- package/skills/spec-swarm/SKILL.md +87 -0
- package/skills/spec-swarm/agents/openai.yaml +4 -0
- package/skills/spec-swarm/template/SKILL.template.md +94 -0
- package/skills/spec-swarm/template/personas/accessibility-inclusion.md +40 -0
- package/skills/spec-swarm/template/personas/ai-technical-pm.md +69 -0
- package/skills/spec-swarm/template/personas/analytics-engineering.md +39 -0
- package/skills/spec-swarm/template/personas/applied-ai-eval.md +64 -0
- package/skills/spec-swarm/template/personas/business-gm-pm.md +67 -0
- package/skills/spec-swarm/template/personas/consumer-craft-pm.md +68 -0
- package/skills/spec-swarm/template/personas/content-design.md +40 -0
- package/skills/spec-swarm/template/personas/cpo.md +42 -0
- package/skills/spec-swarm/template/personas/data-science.md +42 -0
- package/skills/spec-swarm/template/personas/developer-experience.md +65 -0
- package/skills/spec-swarm/template/personas/dx-product.md +70 -0
- package/skills/spec-swarm/template/personas/field.md +43 -0
- package/skills/spec-swarm/template/personas/finance-cfo.md +40 -0
- package/skills/spec-swarm/template/personas/growth-pm.md +67 -0
- package/skills/spec-swarm/template/personas/platform-pm.md +67 -0
- package/skills/spec-swarm/template/personas/pmm.md +43 -0
- package/skills/spec-swarm/template/personas/principal-product-designer.md +42 -0
- package/skills/spec-swarm/template/personas/product-ops-program.md +41 -0
- package/skills/spec-swarm/template/personas/qa-release.md +41 -0
- package/skills/spec-swarm/template/personas/responsible-ai-safety.md +64 -0
- package/skills/spec-swarm/template/personas/security-privacy-legal.md +40 -0
- package/skills/spec-swarm/template/personas/strategy-competitive.md +41 -0
- package/skills/spec-swarm/template/personas/technical-architect.md +42 -0
- package/skills/spec-swarm/template/personas/technical-lead.md +43 -0
- package/skills/spec-swarm/template/personas/user-research.md +41 -0
- package/skills/spec-swarm-accessibility-inclusion/SKILL.md +95 -0
- package/skills/spec-swarm-accessibility-inclusion/agents/openai.yaml +4 -0
- package/skills/spec-swarm-ai-technical-pm/SKILL.md +124 -0
- package/skills/spec-swarm-analytics-engineering/SKILL.md +94 -0
- package/skills/spec-swarm-analytics-engineering/agents/openai.yaml +4 -0
- package/skills/spec-swarm-applied-ai-eval/SKILL.md +120 -0
- package/skills/spec-swarm-business-gm-pm/SKILL.md +122 -0
- package/skills/spec-swarm-consumer-craft-pm/SKILL.md +122 -0
- package/skills/spec-swarm-content-design/SKILL.md +95 -0
- package/skills/spec-swarm-content-design/agents/openai.yaml +4 -0
- package/skills/spec-swarm-cpo/SKILL.md +94 -0
- package/skills/spec-swarm-cpo/agents/openai.yaml +4 -0
- package/skills/spec-swarm-data-science/SKILL.md +95 -0
- package/skills/spec-swarm-data-science/agents/openai.yaml +4 -0
- package/skills/spec-swarm-developer-experience/SKILL.md +121 -0
- package/skills/spec-swarm-dx-product/SKILL.md +126 -0
- package/skills/spec-swarm-field/SKILL.md +96 -0
- package/skills/spec-swarm-field/agents/openai.yaml +4 -0
- package/skills/spec-swarm-finance-cfo/SKILL.md +95 -0
- package/skills/spec-swarm-finance-cfo/agents/openai.yaml +4 -0
- package/skills/spec-swarm-growth-pm/SKILL.md +122 -0
- package/skills/spec-swarm-platform-pm/SKILL.md +122 -0
- package/skills/spec-swarm-pmm/SKILL.md +96 -0
- package/skills/spec-swarm-pmm/agents/openai.yaml +4 -0
- package/skills/spec-swarm-principal-product-designer/SKILL.md +95 -0
- package/skills/spec-swarm-principal-product-designer/agents/openai.yaml +4 -0
- package/skills/spec-swarm-product-ops-program/SKILL.md +96 -0
- package/skills/spec-swarm-product-ops-program/agents/openai.yaml +4 -0
- package/skills/spec-swarm-qa-release/SKILL.md +96 -0
- package/skills/spec-swarm-qa-release/agents/openai.yaml +4 -0
- package/skills/spec-swarm-responsible-ai-safety/SKILL.md +120 -0
- package/skills/spec-swarm-security-privacy-legal/SKILL.md +95 -0
- package/skills/spec-swarm-security-privacy-legal/agents/openai.yaml +4 -0
- package/skills/spec-swarm-strategy-competitive/SKILL.md +96 -0
- package/skills/spec-swarm-strategy-competitive/agents/openai.yaml +4 -0
- package/skills/spec-swarm-technical-architect/SKILL.md +95 -0
- package/skills/spec-swarm-technical-architect/agents/openai.yaml +4 -0
- package/skills/spec-swarm-technical-lead/SKILL.md +96 -0
- package/skills/spec-swarm-technical-lead/agents/openai.yaml +4 -0
- package/skills/spec-swarm-user-research/SKILL.md +95 -0
- package/skills/spec-swarm-user-research/agents/openai.yaml +4 -0
- package/skills/strategy-check/SKILL.md +170 -0
- package/skills/strategy-check/agents/openai.yaml +4 -0
- package/skills/study-digest/SKILL.md +41 -0
- package/skills/synthetic-customer/SKILL.md +68 -0
- package/skills/update-cli-spec/SKILL.md +69 -0
- package/skills/update-cli-spec/agents/openai.yaml +4 -0
- package/skills/voc-researcher/SKILL.md +45 -0
- package/skills/voc-researcher/agents/openai.yaml +4 -0
- package/skills-lock.json +35 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for reasonable and customary use in describing the
|
|
141
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
+
or other liability obligations and/or rights consistent with this
|
|
169
|
+
License. However, in accepting such obligations, You may act only
|
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
+
of your accepting any such warranty or additional liability.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
+
|
|
180
|
+
To apply the Apache License to your work, attach the following
|
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
182
|
+
replaced with your own identifying information. (Don't include
|
|
183
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
+
comment syntax for the file format. We also recommend that a
|
|
185
|
+
file or class name and description of purpose be included on the
|
|
186
|
+
same "printed page" as the copyright notice for easier
|
|
187
|
+
identification within third-party archives.
|
|
188
|
+
|
|
189
|
+
Copyright 2026 Rachel Wolan
|
|
190
|
+
|
|
191
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
|
+
you may not use this file except in compliance with the License.
|
|
193
|
+
You may obtain a copy of the License at
|
|
194
|
+
|
|
195
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
196
|
+
|
|
197
|
+
Unless required by applicable law or agreed to in writing, software
|
|
198
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
199
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
|
+
See the License for the specific language governing permissions and
|
|
201
|
+
limitations under the License.
|
package/README.md
CHANGED
|
@@ -1,3 +1,339 @@
|
|
|
1
|
-
#
|
|
1
|
+
# productfoo: FSD for your coding agent
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
productfoo is an agentic product management harness you don’t have to micromanage. productfoo shapes the plan, checks the work, and brings you the decisions that matter. productfoo systematizes the art and science of product management.
|
|
4
|
+
|
|
5
|
+
Coding agents can move quickly. Keeping them pointed at the right problem takes work: explaining the goal, challenging assumptions, reviewing the result, and picking up the thread in the next session.
|
|
6
|
+
|
|
7
|
+
productfoo gives that work a repeatable process. You agree on the destination, scope, and checks. Your coding agent builds against that agreement. Decisions, tasks, and evidence stay in your repository, where you and the next agent can inspect them.
|
|
8
|
+
|
|
9
|
+
You talk to your coding agent the way you already do. The agent runs productfoo.
|
|
10
|
+
|
|
11
|
+
<!--
|
|
12
|
+
Link convention: productfoo's README is rendered on GitHub, on npmjs.com, and in an
|
|
13
|
+
unpacked tarball. npm does not reliably rewrite relative links, so every
|
|
14
|
+
cross-file link in tarball-shipped files (README.md, docs/CHANGELOG.md,
|
|
15
|
+
docs/THIRD_PARTY_NOTICES.md) is an absolute GitHub URL; other docs/ files (GitHub-only)
|
|
16
|
+
use relative links. The diagrams are plain text so they render the same on
|
|
17
|
+
GitHub, on npm, and in a terminal.
|
|
18
|
+
-->
|
|
19
|
+
|
|
20
|
+
## How it works
|
|
21
|
+
|
|
22
|
+
Everything flows toward one artifact, the productfoo Spec. The coding agent builds
|
|
23
|
+
against it, and reconciliation compares the result back to it. People make the
|
|
24
|
+
calls shown in brackets.
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
SIGNAL EXPLORE SHAPE
|
|
28
|
+
┌───────────────────────┐ ┌──────────────────────────┐ ┌─────────────────────────┐
|
|
29
|
+
│ Customer calls │─▶│ foo discovery │─▶│ foo spec │
|
|
30
|
+
│ approved sources only │ │ evidence, no transcripts │ │ asks only the questions │
|
|
31
|
+
└───────────────────────┘ └──────────────────────────┘ │ that matter │
|
|
32
|
+
┌───────────────────────┐ ┌──────────────────────────┐ │ │
|
|
33
|
+
│ Public research │─▶│ foo research │─▶│ foo roast │
|
|
34
|
+
│ labeled untrusted │ │ sealed, cited paper │ │ cuts weak scope │
|
|
35
|
+
└───────────────────────┘ └──────────────────────────┘ │ │
|
|
36
|
+
┌───────────────────────┐ ┌──────────────────────────┐ │ foo preview │
|
|
37
|
+
│ An idea or request │─▶│ foo ideate · pitch │─▶│ see it before build │
|
|
38
|
+
│ rough is fine │ │ shortlist · GO / NO-GO │ │ │
|
|
39
|
+
└───────────────────────┘ └──────────────────────────┘ │ [ you agree it ] │
|
|
40
|
+
└────────────┬────────────┘
|
|
41
|
+
┌───────────────────────────────────────────────────────────────┘
|
|
42
|
+
▼
|
|
43
|
+
THE CONTRACT BUILD AND PROVE
|
|
44
|
+
┌─────────────────────────────┐ ┌──────────────────────────┐
|
|
45
|
+
│ productfoo Spec │ tasks + checks │ Coding agent builds │
|
|
46
|
+
│ specs/<packet>/ │ ─────────────▶ │ own branch + worktree │
|
|
47
|
+
│ Intent │ └─────────────┬────────────┘
|
|
48
|
+
│ Decisions + open questions │ ▼
|
|
49
|
+
│ Agreed, suggested, and │ ┌──────────────────────────┐
|
|
50
|
+
│ discovered work │ drift │ foo reconcile │
|
|
51
|
+
│ Tasks + acceptance checks │ ◀───────────── │ diff vs. agreed spec │
|
|
52
|
+
│ Proof + event history │ └─────────────┬────────────┘
|
|
53
|
+
└─────────────────────────────┘ ▼ proven
|
|
54
|
+
┌──────────────────────────┐
|
|
55
|
+
│ Pull request → ship │
|
|
56
|
+
│ [ you approve ] │
|
|
57
|
+
└──────────────────────────┘
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Signal moves left to right into the productfoo Spec. The coding agent builds from that
|
|
61
|
+
spec, and `foo asp reconcile` compares the implementation evidence with it. The
|
|
62
|
+
diagrams use “foo reconcile” as shorthand for this step. Drift goes back to the spec
|
|
63
|
+
for a decision. Work backed by proof goes to a person for approval.
|
|
64
|
+
|
|
65
|
+
## Get started
|
|
66
|
+
|
|
67
|
+
For the CLI, you need Node.js 18 or newer, npm, Git, and a configured coding agent. See [runtime support](https://github.com/rwo572/productfoo/blob/main/docs/runtime-support.md) for tested versions.
|
|
68
|
+
|
|
69
|
+
### 1. Install productfoo
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm install -g productfoo
|
|
73
|
+
cd /path/to/your/project
|
|
74
|
+
foo doctor
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
This installs the release tagged `latest` on npm. The package is `productfoo`. Terminal commands start with `foo`; agent commands use your runtime’s native syntax, such as `/foo:spec` in Claude Code. Local workflows need no productfoo account or hosted service.
|
|
78
|
+
|
|
79
|
+
### 2. Set up your coding agent
|
|
80
|
+
|
|
81
|
+
<details>
|
|
82
|
+
<summary><strong>Claude Code, Cursor, Grok Bot, or OpenCode</strong></summary>
|
|
83
|
+
|
|
84
|
+
Preview the project setup, review the proposed files, then apply it:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
foo agent setup --agent all --scope project --dry-run
|
|
88
|
+
foo agent setup --agent all --scope project --yes
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
To target one agent, replace `all` with `codex` (Codex), `claude-code` (Claude Code), `cursor` (Cursor), `grok` (Grok Bot), or `opencode` (OpenCode). For Codex, use `--scope global` as shown below.
|
|
92
|
+
|
|
93
|
+
[Add productfoo to Grok Bot](https://x.ai/bot/6BQEkzxJ3C_UZHibSbM-G).
|
|
94
|
+
|
|
95
|
+
</details>
|
|
96
|
+
|
|
97
|
+
<details>
|
|
98
|
+
<summary><strong>Codex</strong></summary>
|
|
99
|
+
|
|
100
|
+
Preview and install the personal plugin:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
foo agent setup --agent codex --scope global --dry-run
|
|
104
|
+
foo agent setup --agent codex --scope global --yes
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Start a new Codex task so it loads the commands.
|
|
108
|
+
|
|
109
|
+
</details>
|
|
110
|
+
|
|
111
|
+
See [agent setup](https://github.com/rwo572/productfoo/blob/main/docs/agent-adapters.md) for runtime-specific details.
|
|
112
|
+
|
|
113
|
+
### 3. Give your agent a destination
|
|
114
|
+
|
|
115
|
+
Ask your favorite coding agent to use productfoo to shape the work. In Claude Code:
|
|
116
|
+
|
|
117
|
+
> /foo:spec Customers keep re-creating the same filters. Let's productize this.
|
|
118
|
+
|
|
119
|
+
If you don’t know where to start, run `foo init`. It reads the project and suggests a low-stakes first move.
|
|
120
|
+
|
|
121
|
+
## Why productfoo exists
|
|
122
|
+
|
|
123
|
+
### The agent built the feature, but missed the point
|
|
124
|
+
|
|
125
|
+
“Add saved filters” leaves a lot unsaid. Are filters personal or shared? Who can change them? What happens when the underlying data changes?
|
|
126
|
+
|
|
127
|
+
`foo spec` helps resolve the questions that change the work. It records the problem, scope, decisions, and acceptance checks before the agent builds. The agent should inspect the project first and ask you only what the available evidence cannot answer.
|
|
128
|
+
|
|
129
|
+
For deeper work, `spec-swarm` brings in relevant product, design, engineering, and other expert perspectives. `spec-cleanup` makes the resulting plan specific enough to implement.
|
|
130
|
+
|
|
131
|
+
**Start with:** `foo spec "your feature"`
|
|
132
|
+
|
|
133
|
+
### The agent ran with the first idea
|
|
134
|
+
|
|
135
|
+
A detailed implementation can still solve the wrong problem. Before committing to a direction, you may need customer evidence, public research, or a better alternative.
|
|
136
|
+
|
|
137
|
+
`foo discovery` turns approved customer calls into evidence you can review. `foo research` helps gather and document public research. `foo ideate` explores alternatives, and `foo pitch` builds the case for pursuing an opportunity, postponing it, or walking away.
|
|
138
|
+
|
|
139
|
+
**Start with:** `foo ideate "the problem you want to solve"`
|
|
140
|
+
|
|
141
|
+
### You only discover the wrong product after it is built
|
|
142
|
+
|
|
143
|
+
It is easier to react to a concrete workflow than to imagine one from a spec.
|
|
144
|
+
|
|
145
|
+
`foo preview` turns a spec into a reviewable artifact before implementation. `foo roast` challenges weak assumptions, unnecessary scope, and likely drift. Feedback becomes a proposed change to the agreement for you to accept.
|
|
146
|
+
|
|
147
|
+
**Start with:** `foo preview specs/my-feature`
|
|
148
|
+
|
|
149
|
+
### Every session needs the same explanation
|
|
150
|
+
|
|
151
|
+
A conversation can hold a lot of context. The next agent may not have it.
|
|
152
|
+
|
|
153
|
+
A productfoo Spec keeps the agreement in plain files:
|
|
154
|
+
|
|
155
|
+
| File | What it keeps |
|
|
156
|
+
|---|---|
|
|
157
|
+
| `spec.md` | Intent, requirements, decisions, and open questions |
|
|
158
|
+
| `tasks.yaml` | Work, acceptance checks, and task status |
|
|
159
|
+
| `events.jsonl` | The record of what happened |
|
|
160
|
+
|
|
161
|
+
The record distinguishes work you agreed to, ideas waiting for your decision, and necessary work discovered during implementation. Another agent can read it and continue from the recorded state.
|
|
162
|
+
|
|
163
|
+
**Read:** [The productfoo Spec](https://github.com/rwo572/productfoo/blob/main/docs/foo-spec.md)
|
|
164
|
+
|
|
165
|
+
### “Done” does not tell you what was verified
|
|
166
|
+
|
|
167
|
+
Passing tests is useful evidence. You also need to know whether the result matches the work you agreed to do.
|
|
168
|
+
|
|
169
|
+
`foo asp reconcile` compares implementation evidence with the spec and surfaces differences. A task marked complete without evidence stays **done, proof pending**. The checks, gaps, and decisions remain available for review.
|
|
170
|
+
|
|
171
|
+
For autonomous work, `review-loop` evaluates whether the proposed process has a checkable goal, useful feedback, a stopping condition, and a handoff backed by evidence. Loop validation checks the declared contract and budget.
|
|
172
|
+
|
|
173
|
+
**Start with:** `foo asp reconcile specs/my-feature --git-diff`
|
|
174
|
+
|
|
175
|
+
## What this adds to a bare coding agent
|
|
176
|
+
|
|
177
|
+
A capable coding agent can do this when prompted carefully. productfoo makes the discipline reusable, explicit, and inspectable so you don’t have to supply it every time.
|
|
178
|
+
|
|
179
|
+
| | Bare coding agent | With productfoo |
|
|
180
|
+
|---|---|---|
|
|
181
|
+
| Starting point | Your prompt and repository context | An agreement on the problem, scope, and success criteria |
|
|
182
|
+
| Product judgment | Depends on what you ask it to consider | Repeatable research, critique, and expert-review workflows |
|
|
183
|
+
| Scope changes | Assumptions can accumulate as work proceeds | Changes are recorded and surfaced for decisions |
|
|
184
|
+
| Completion | A summary of implementation and test results | Evidence compared with the agreed spec, including gaps |
|
|
185
|
+
| Handoff | Context may need to be explained again | The agreement and progress live in repository files |
|
|
186
|
+
|
|
187
|
+
For a typo or a small, well-defined fix, keep the process small. The structure matters most when work is ambiguous, spans sessions, or gives an agent meaningful autonomy.
|
|
188
|
+
|
|
189
|
+
## Workflow reference
|
|
190
|
+
|
|
191
|
+
These are terminal commands. You can also describe the work to your coding agent and ask it to use productfoo.
|
|
192
|
+
|
|
193
|
+
```text
|
|
194
|
+
BEFORE A SPEC EXISTS
|
|
195
|
+
|
|
196
|
+
Unfamiliar territory foo research
|
|
197
|
+
PMs · designers · FDEs ──▶ cited, untrusted findings ──┐
|
|
198
|
+
│
|
|
199
|
+
Customer calls and feedback foo discovery │
|
|
200
|
+
FDEs · PMs · CS ──▶ themes you review ──┤
|
|
201
|
+
│
|
|
202
|
+
A raw idea, many directions foo ideate │
|
|
203
|
+
founders · PMs ──▶ stress-tested shortlist ──┤
|
|
204
|
+
│
|
|
205
|
+
Should we build this at all? foo pitch │
|
|
206
|
+
founders · product leads ──▶ GO / NOT-NOW / NO-GO ──┤
|
|
207
|
+
│
|
|
208
|
+
A clear feature request foo spec │
|
|
209
|
+
engineers · everyone ══▶ ~30 seconds to shape ══╡
|
|
210
|
+
▼
|
|
211
|
+
┌───────────────────────────┐
|
|
212
|
+
│ productfoo Spec │
|
|
213
|
+
│ intent, decisions, │
|
|
214
|
+
│ tasks, proof │
|
|
215
|
+
│ [ you agree it ] │
|
|
216
|
+
└─────────────┬─────────────┘
|
|
217
|
+
ONCE A SPEC EXISTS │
|
|
218
|
+
│
|
|
219
|
+
Is the scope tight? foo roast │
|
|
220
|
+
senior engineers ◀── cuts + candidate checks ◀─┤
|
|
221
|
+
│
|
|
222
|
+
Will it look right? foo preview │
|
|
223
|
+
designers · PMs ◀── a reviewable artifact ◀─┤
|
|
224
|
+
│
|
|
225
|
+
Did we ship what we agreed? foo reconcile │
|
|
226
|
+
AI Ops · engineers ◀── drift or proof ◀─┘
|
|
227
|
+
|
|
228
|
+
Not sure which row you are in? foo init reads the project and suggests a first move.
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
| When you want to… | Use |
|
|
232
|
+
|---|---|
|
|
233
|
+
| Find a useful starting point | `foo init` |
|
|
234
|
+
| Research an unfamiliar area | `foo research` |
|
|
235
|
+
| Turn approved customer calls into evidence | `foo discovery` |
|
|
236
|
+
| Explore and compare ideas | `foo ideate` |
|
|
237
|
+
| Decide whether an opportunity is worth pursuing | `foo pitch` |
|
|
238
|
+
| Agree on what to build | `foo spec` |
|
|
239
|
+
| Challenge any spec or prototype | `foo roast` |
|
|
240
|
+
| Preview the proposed product | `foo preview` |
|
|
241
|
+
| Compare the implementation with an existing spec | `foo asp reconcile specs/my-feature --git-diff` |
|
|
242
|
+
|
|
243
|
+
Run `foo help` for the main workflows or `foo help --all` for the complete command surface.
|
|
244
|
+
|
|
245
|
+
### Skills worth knowing
|
|
246
|
+
|
|
247
|
+
The agent uses these skills within the workflows. Read them, or ask your agent to use one for a specific task.
|
|
248
|
+
|
|
249
|
+
- **[interview-me](https://github.com/rwo572/productfoo/blob/main/skills/interview-me/SKILL.md)**: Resolve the consequential questions before writing a spec.
|
|
250
|
+
- **[spec-swarm](https://github.com/rwo572/productfoo/blob/main/skills/spec-swarm/SKILL.md)**: Challenge a plan through relevant expert perspectives.
|
|
251
|
+
- **[spec-cleanup](https://github.com/rwo572/productfoo/blob/main/skills/spec-cleanup/SKILL.md)**: Make requirements, tasks, and checks ready for implementation.
|
|
252
|
+
- **[foo-roast](https://github.com/rwo572/productfoo/blob/main/skills/foo-roast/SKILL.md)**: Find weak assumptions, cut unnecessary scope, and suggest useful checks.
|
|
253
|
+
- **[preview-swarm](https://github.com/rwo572/productfoo/blob/main/skills/preview-swarm/SKILL.md)**: Build an artifact you can inspect before committing to implementation.
|
|
254
|
+
- **[review-loop](https://github.com/rwo572/productfoo/blob/main/skills/review-loop/SKILL.md)**: Evaluate whether autonomous work can converge and finish with evidence.
|
|
255
|
+
|
|
256
|
+
Browse the [skill registry](https://github.com/rwo572/productfoo/blob/main/skills/skill-registry.yaml) for the full inventory and each skill’s active or draft status.
|
|
257
|
+
|
|
258
|
+
## Go deeper
|
|
259
|
+
|
|
260
|
+
- [Getting started](https://github.com/rwo572/productfoo/blob/main/docs/getting-started.md): your first complete workflow.
|
|
261
|
+
- [Firecrawl research](https://github.com/rwo572/productfoo/blob/main/docs/firecrawl.md): connect your own plugin or API key for public-web research. Firecrawl is optional and requires separate setup.
|
|
262
|
+
- [Worked examples](https://github.com/rwo572/productfoo/blob/main/examples/): inspect sample specs and their acceptance checks.
|
|
263
|
+
- [CLI reference](https://github.com/rwo572/productfoo/blob/main/docs/cli-reference.md): commands, flags, and output contracts.
|
|
264
|
+
- [Development setup](https://github.com/rwo572/productfoo/blob/main/.github/CONTRIBUTING.md#development-setup): build and test productfoo from source.
|
|
265
|
+
- [Documentation index](https://github.com/rwo572/productfoo/blob/main/docs/README.md): the complete documentation.
|
|
266
|
+
|
|
267
|
+
## Project status and responsible use
|
|
268
|
+
|
|
269
|
+
productfoo is a personal open-source project, shared for people who find it useful.
|
|
270
|
+
It is under active experimentation; maintenance, compatibility, support, and
|
|
271
|
+
security fixes are best effort, with no guaranteed response or release schedule.
|
|
272
|
+
|
|
273
|
+
Its checks help you review agent work. They are not a sandbox and cannot guarantee
|
|
274
|
+
correct output, prevent every unintended action, detect every secret, or ensure an
|
|
275
|
+
agent follows instructions. Start in a disposable repository with synthetic data
|
|
276
|
+
and limited permissions. Review generated changes and commands before accepting
|
|
277
|
+
them, and keep backups of work you care about.
|
|
278
|
+
|
|
279
|
+
The CLI's local workflows do not require a productfoo account or hosted service.
|
|
280
|
+
Your coding agent, model provider, and connected tools may still send data outside
|
|
281
|
+
your machine and incur charges under their own permissions and settings. Review
|
|
282
|
+
those settings before providing private information or enabling external actions.
|
|
283
|
+
|
|
284
|
+
This is a personal project, unaffiliated with and not endorsed by any current or
|
|
285
|
+
former employer. It is provided under the warranty and liability terms in the
|
|
286
|
+
[Apache License 2.0](https://github.com/rwo572/productfoo/blob/main/LICENSE).
|
|
287
|
+
|
|
288
|
+
## Contributions and support
|
|
289
|
+
|
|
290
|
+
Contributions are welcome. Please open an issue before starting substantial work
|
|
291
|
+
so we can agree on direction. Keep pull requests focused and include relevant
|
|
292
|
+
tests or verification.
|
|
293
|
+
|
|
294
|
+
Rachel Wolan ([@rwo572](https://github.com/rwo572)) maintains productfoo, reviews
|
|
295
|
+
contributions, and makes the final decision on scope and merging. Contribute
|
|
296
|
+
through a fork and pull request; repository write access and merging remain with
|
|
297
|
+
the maintainer. Submitting a contribution does not guarantee acceptance.
|
|
298
|
+
|
|
299
|
+
Maintenance and support are best effort, with no guaranteed response or roadmap.
|
|
300
|
+
|
|
301
|
+
- [Maintenance and contribution policy](https://github.com/rwo572/productfoo/blob/main/.github/CONTRIBUTING.md) —
|
|
302
|
+
review process and development setup.
|
|
303
|
+
- [Code of Conduct](https://github.com/rwo572/productfoo/blob/main/.github/CODE_OF_CONDUCT.md).
|
|
304
|
+
- [Security policy](https://github.com/rwo572/productfoo/blob/main/.github/SECURITY.md) —
|
|
305
|
+
report vulnerabilities privately; do not open a public issue.
|
|
306
|
+
- [Changelog](https://github.com/rwo572/productfoo/blob/main/docs/CHANGELOG.md).
|
|
307
|
+
- [Third-party notices](https://github.com/rwo572/productfoo/blob/main/docs/THIRD_PARTY_NOTICES.md).
|
|
308
|
+
|
|
309
|
+
## Acknowledgments & inspiration
|
|
310
|
+
|
|
311
|
+
productfoo draws on the work of people making product judgment and agent
|
|
312
|
+
workflows more useful. Thank you to:
|
|
313
|
+
|
|
314
|
+
- **[Matt Pocock](https://github.com/mattpocock/skills)** for `grill-me` and its
|
|
315
|
+
approach to pressure-testing plans: ask focused questions, work through the
|
|
316
|
+
decisions, and inspect the code before asking the human. His skills README
|
|
317
|
+
also inspired this README’s setup-first, problem-led organization.
|
|
318
|
+
- **[Paul Bakaus and Impeccable](https://github.com/pbakaus/impeccable)** for
|
|
319
|
+
design critique, accessibility review, and visual craft in agent workflows.
|
|
320
|
+
- **[Lenny Rachitsky and Lenny’s Podcast guests](https://www.lennysnewsletter.com/)**
|
|
321
|
+
for the product judgment, growth, strategy, taste, and AI-product thinking
|
|
322
|
+
referenced throughout the expert lenses. Individual frameworks and ideas
|
|
323
|
+
remain attributed to their original speakers in the relevant skills.
|
|
324
|
+
- **[Thariq Shihipar](https://thariqs.github.io/html-effectiveness/)** for
|
|
325
|
+
“The unreasonable effectiveness of HTML” and its examples of interactive,
|
|
326
|
+
reviewable agent output, which informed the build-preview patterns.
|
|
327
|
+
- **[Anthropic’s frontend-design skill](https://github.com/anthropics/skills/tree/main/skills/frontend-design)**
|
|
328
|
+
for guidance on distinctive, intentional frontend design with coding agents.
|
|
329
|
+
- **[Matt Van Horn’s last30days](https://github.com/mvanhorn/last30days-skill)**
|
|
330
|
+
for inspiration around researching recent conversations and synthesizing
|
|
331
|
+
grounded findings.
|
|
332
|
+
|
|
333
|
+
These acknowledgments describe influences and companion tools. Runtime
|
|
334
|
+
third-party dependencies are documented in
|
|
335
|
+
[Third-party notices](https://github.com/rwo572/productfoo/blob/main/docs/THIRD_PARTY_NOTICES.md).
|
|
336
|
+
|
|
337
|
+
## License
|
|
338
|
+
|
|
339
|
+
productfoo is released under the [Apache License 2.0](https://github.com/rwo572/productfoo/blob/main/LICENSE).
|
package/bin/foo
ADDED
package/bin/foo.mjs
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
5
|
+
|
|
6
|
+
// Repository checkouts run their built CLI from dist/. Packed installations
|
|
7
|
+
// ship dist-public/. Private operator output is never a launcher candidate.
|
|
8
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
const candidates = [
|
|
10
|
+
path.join(here, "..", "dist", "src", "cli.js"),
|
|
11
|
+
path.join(here, "..", "dist-public", "src", "cli.js"),
|
|
12
|
+
];
|
|
13
|
+
const cliPath = candidates.find((candidate) => existsSync(candidate));
|
|
14
|
+
|
|
15
|
+
if (!cliPath) {
|
|
16
|
+
process.stderr.write(
|
|
17
|
+
"foo: CLI build not found (dist/src/cli.js or dist-public/src/cli.js).\n" +
|
|
18
|
+
"This checkout has no built CLI. From the repo root run:\n" +
|
|
19
|
+
" npm ci && npm run build\n",
|
|
20
|
+
);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
import(pathToFileURL(cliPath).href)
|
|
25
|
+
.then(({ main }) => main(process.argv.slice(2)))
|
|
26
|
+
.then((exitCode) => {
|
|
27
|
+
process.exitCode = exitCode;
|
|
28
|
+
})
|
|
29
|
+
.catch((error) => {
|
|
30
|
+
const message = error?.message ?? String(error);
|
|
31
|
+
if (error?.code === "ERR_MODULE_NOT_FOUND" || /Cannot find package/.test(message)) {
|
|
32
|
+
// Explain dependency repair without exposing an import stack trace.
|
|
33
|
+
process.stderr.write(
|
|
34
|
+
"foo: a runtime dependency is missing (node_modules).\n" +
|
|
35
|
+
"For a source checkout, run npm ci && npm run build.\n" +
|
|
36
|
+
"For an installed package, reinstall the reviewed tarball.\n",
|
|
37
|
+
);
|
|
38
|
+
} else {
|
|
39
|
+
process.stderr.write(`foo: failed to start CLI: ${message}\n`);
|
|
40
|
+
}
|
|
41
|
+
process.exit(1);
|
|
42
|
+
});
|
package/commands/bug.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Report something in foo that broke or behaved incorrectly
|
|
3
|
+
argument-hint: [what happened]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- foo-managed-command: bug v0 -->
|
|
7
|
+
|
|
8
|
+
productfoo's **bug** command is a thin adapter over the canonical one-capsule report
|
|
9
|
+
flow. It adds no separate persistence, scrubbing, networking, tracker, or
|
|
10
|
+
repair behavior; `foo report add` remains the only collection implementation.
|
|
11
|
+
|
|
12
|
+
## What the harness ships
|
|
13
|
+
|
|
14
|
+
A thin launcher, and nothing more: ask for missing expected and actual behavior
|
|
15
|
+
one question at a time. In an agent runtime, pass those answers as the exact
|
|
16
|
+
`--expected` and `--actual` argument values, add `--reproduction` only when it
|
|
17
|
+
was provided, and request `--json`. At a human TTY, bare `foo report add` may
|
|
18
|
+
collect the fields interactively. Never interpolate user text into a shell
|
|
19
|
+
command.
|
|
20
|
+
|
|
21
|
+
## Operating contract
|
|
22
|
+
|
|
23
|
+
1. Use `foo report add`, `foo report show <capsule-id> --json`, and `foo report delete <capsule-id> --approve <payload-digest> --json` for local reports.
|
|
24
|
+
2. Reports stay on this machine. Obtain fresh approval for the reviewed ID+digest before local deletion. Sending is unavailable; never offer uploads.
|
|
25
|
+
3. Saved reports are local diagnostics; old receipts are historical. Do not promise triage, a fix, an Issue URL, or start a repair agent.
|
|
26
|
+
|
|
27
|
+
Every foo command also carries:
|
|
28
|
+
|
|
29
|
+
- productfoo-first: for product, spec, packet, planning, decision, correction, validation, or drift work, reach for foo before generic planning — `foo spec` or `foo spec start` for unresolved intent, `foo asp validate|reconcile|event|task` for packet-tied work. Compound Engineering, Superpowers, and generic planners are downstream companions, never the first move.
|
|
30
|
+
- Load skills with `foo skill <name>`; productfoo loads verified bundled skills or an explicitly approved development tree, and always refuses caller-repository shadowing. If `foo doctor` reports delivery unavailable, run `foo init` or update productfoo; never bypass trust checks.
|
|
31
|
+
- Keep productfoo's judgment ledger in what you show: claim, evidence, confidence, dissent, and the decisions that are the user's alone.
|