fraim 2.0.362-next.4 → 2.0.362-next.5
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/dist/registry/scripts/domains/folders.js +55 -0
- package/dist/registry/scripts/learning/entry-authoring.js +13 -24
- package/dist/registry/scripts/learning/run-publication.js +5 -30
- package/dist/registry/stubs/jobs/ai-employee/ai-engineering/aeo-optimization.md +43 -0
- package/dist/registry/stubs/jobs/ai-employee/ai-engineering/author-ai-evals.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/ai-engineering/create-ai-agent.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/ai-engineering/create-hub-configured-agent.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/ai-engineering/enable-web-mcp.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/ai-engineering/evaluate-ai-agent.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/ai-engineering/mcp-server-creation.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/ai-engineering/publish-mcp-app.md +28 -0
- package/dist/registry/stubs/jobs/ai-employee/bank-compliance/banking-evidence-audit.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/bank-operations/kyc-case-review.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/career/career-networking.md +46 -0
- package/dist/registry/stubs/jobs/ai-employee/career/career-spec.md +41 -0
- package/dist/registry/stubs/jobs/ai-employee/career/career-trajectory-planning.md +41 -0
- package/dist/registry/stubs/jobs/ai-employee/career/job-applications-and-networking.md +40 -0
- package/dist/registry/stubs/jobs/ai-employee/career/job-search-strategy-and-application-plan.md +41 -0
- package/dist/registry/stubs/jobs/ai-employee/career/offer-negotiation.md +42 -0
- package/dist/registry/stubs/jobs/ai-employee/career/pitch-and-interview-prep.md +43 -0
- package/dist/registry/stubs/jobs/ai-employee/career/public-profile-updates.md +41 -0
- package/dist/registry/stubs/jobs/ai-employee/career/resilience-planning.md +38 -0
- package/dist/registry/stubs/jobs/ai-employee/career/resume-creation.md +40 -0
- package/dist/registry/stubs/jobs/ai-employee/customer/crm-case-resolution.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/customer/customer-health-review.md +36 -0
- package/dist/registry/stubs/jobs/ai-employee/customer/loyalty-program-management.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/customer/support-case-resolution.md +39 -0
- package/dist/registry/stubs/jobs/ai-employee/customer/support-playbook-evaluation.md +37 -0
- package/dist/registry/stubs/jobs/ai-employee/customer/support-queue-management.md +36 -0
- package/dist/registry/stubs/jobs/ai-employee/customer/support-sop-operationalization.md +36 -0
- package/dist/registry/stubs/jobs/ai-employee/customer/support-system-operationalization.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/customer/survey-campaign-management.md +36 -0
- package/dist/registry/stubs/jobs/ai-employee/customer/update-crm.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/customer/user-survey-management.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/design/brand-creation.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/design/branding-quality-audit.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/design/design-system-creation.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/design/ui-quality-assessment.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/design/user-facing-prototyping.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/design/user-journey-mapping.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/design/ux-research-synthesis.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/design/website-creation.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/dev-ops/cloud-application-deployment.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/dev-ops/cloud-cost-optimization.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/dev-ops/cloud-performance-diagnosis.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/dev-ops/cross-cloud-migration.md +42 -0
- package/dist/registry/stubs/jobs/ai-employee/dev-ops/incident-response.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/dev-ops/production-readiness-review.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/dev-ops/reliability-review.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/dev-ops/route-llm-spend-to-cloud-credits.md +36 -0
- package/dist/registry/stubs/jobs/ai-employee/dev-ops/run-on-remote-hub.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/dev-ops/set-up-cloud-cost-alerts.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/dev-ops/setup-remote-hub.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/dev-ops/slo-design-and-implementation.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/application-replication-workflow.md +42 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/code-refactoring.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/codebase-analysis-and-ideation.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/create-architecture.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/data-pipeline-design.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/data-platform-architecture.md +29 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/data-quality-monitoring.md +29 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/database-schema-design.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/feature-implementation.md +39 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/github-org-setup.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/gitlabs-to-github.md +44 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/google-workspace-setup.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/issue-preparation.md +28 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/large-refactor-plan.md +36 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/mobile-app-development.md +43 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/mobile-app-rejection-response.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/mobile-app-submission.md +37 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/project-scaffolding.md +39 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/system-migration.md +41 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/technical-design.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/work-completion.md +29 -0
- package/dist/registry/stubs/jobs/ai-employee/engineering/write-dev-docs.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/executive-assistance/analyze-transcript.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/executive-assistance/calendar-triage.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/executive-assistance/chief-of-staff-briefing.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/executive-assistance/executive-assistant.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/executive-assistance/meeting-preparation.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/finance/business-banking-setup.md +29 -0
- package/dist/registry/stubs/jobs/ai-employee/finance/cloud-credits-application.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/finance/community-funding-preparation.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/finance/financial-analysis.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/finance/fpa-and-forecasting.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/finance/fundraising-prospect-discovery.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/finance/investor-pitch-preparation.md +40 -0
- package/dist/registry/stubs/jobs/ai-employee/finance/invoice-generation.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/finance/monthly-close-review.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/finance/review-funding-preparation.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/finance/tax-strategy-planning.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/fraim/adhoc-prompt.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/fraim/contribute-to-fraim.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/fraim/file-fraim-issue.md +29 -0
- package/dist/registry/stubs/jobs/ai-employee/fraim/organizational-learning-synthesis.md +40 -0
- package/dist/registry/stubs/jobs/ai-employee/fraim/praise-fraim.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/fraim/share-with-others.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/fraim/sleep-on-learnings.md +41 -0
- package/dist/registry/stubs/jobs/ai-employee/fraim/troubleshoot-fraim.md +29 -0
- package/dist/registry/stubs/jobs/ai-employee/fraim/video-demo-to-sop.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/ad-performance-analysis.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/aeo-strategy.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/analyze-revenue-system.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/build-gtm-motion.md +37 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/build-gtm-stack.md +36 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/design-gtm-system.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/developer-advocacy.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/domain-registration-research.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/evangelist-content-development.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/funnel-analysis.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/growth-loop-design.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/linkedin-carousel-from-deck.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/linkedin-company-page-setup.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/marketing-analytics-review.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/marketing-content-creation.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/marketing-strategy-definition.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/notebooklm-content-generation.md +39 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/paid-social-strategy.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/plan-gtm-team.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/ppc-campaign-management.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/product-launch-management.md +29 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/promo-video-creation.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/seo-strategy.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/social-engagement-campaign.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/thought-leadership-engagement.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/tracking-and-attribution-setup.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/go-to-market/x-account-setup.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/inclusion/ai-fluency-program-design.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/inclusion/ai-governance-for-inclusion.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/inclusion/dei-toolkit-creation.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/inclusion/equity-pattern-analysis.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/inclusion/erg-sop-modernization.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/inclusion/executive-order-dei-impact-analysis.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/inclusion/inclusion-ai-readiness-audit.md +37 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/business-annual-report-filing.md +37 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/business-tax-registration.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/cap-table-construction.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/contract-review-analysis.md +36 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/ein-application.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/employment-structure-decision.md +29 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/entity-type-selection.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/founder-and-equity-agreements.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/ip-assignment-agreement-creation.md +29 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/nda-creation.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/provisional-patent-application-creation.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/saas-contract-package-creation.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/state-incorporation-filing.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/trademark-registration-management.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/legal/w9-creation.md +37 -0
- package/dist/registry/stubs/jobs/ai-employee/management/evolve-employee.md +44 -0
- package/dist/registry/stubs/jobs/ai-employee/management/fully-delegate.md +37 -0
- package/dist/registry/stubs/jobs/ai-employee/management/generate-productivity-report.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/management/graduate-job.md +24 -0
- package/dist/registry/stubs/jobs/ai-employee/management/issue-retrospective.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/management/manager-agreements.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/management/organization-onboarding.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/management/project-onboarding.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/management/send-stakeholder-update.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/people-ops/benefits-analysis-and-enrollment.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/people-ops/hr-business-partner-advisory.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/people-ops/new-hire-onboarding.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/people-ops/payroll-coordination.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/people-ops/performance-review-preparation.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/procurement/equipment-acceptance-and-supplier-retrospective.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/procurement/procurement-intake-and-strategy.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/procurement/procurement-negotiation-prep.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/procurement/proposal-response-evaluation.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/procurement/purchase-approval-and-po-package.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/procurement/rfp-response-preparation.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/procurement/rfx-package-authoring.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/procurement/supplier-discovery-and-qualification.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/procurement/supplier-performance-review.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/product/customer-prospect-discovery.md +42 -0
- package/dist/registry/stubs/jobs/ai-employee/product/experiment-tracking.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/product/feature-specification.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/product/independent-implementation-review.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/product/interview-preparation.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/product/mvp-validation-plan.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/product/participant-recruitment.md +38 -0
- package/dist/registry/stubs/jobs/ai-employee/product/process-interview-notes.md +42 -0
- package/dist/registry/stubs/jobs/ai-employee/product/review-customer-development.md +38 -0
- package/dist/registry/stubs/jobs/ai-employee/product/send-newsletter.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/product/send-thank-you-notes.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/product/triage-customer-needs.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/project-management/cross-functional-dependency-management.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/project-management/delivery-governance-review.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/project-management/operational-reporting.md +37 -0
- package/dist/registry/stubs/jobs/ai-employee/project-management/project-plan-creation.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/project-management/scrum-sprint-planning.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/project-management/sprint-planning.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/quality-assurance/accessibility-audit.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/quality-assurance/api-testing.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/quality-assurance/codebase-quality-assessment.md +37 -0
- package/dist/registry/stubs/jobs/ai-employee/quality-assurance/iterative-quality-improvement.md +37 -0
- package/dist/registry/stubs/jobs/ai-employee/quality-assurance/mutation-testing.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/quality-assurance/performance-quality-assessment.md +38 -0
- package/dist/registry/stubs/jobs/ai-employee/quality-assurance/stress-test-app-under-load.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/quality-assurance/test-authoring.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/quality-assurance/test-quality-assessment.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/quality-assurance/ui-polish-validation.md +45 -0
- package/dist/registry/stubs/jobs/ai-employee/quality-assurance/user-testing-and-bug-bash.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/recruiting/candidate-pipeline-management.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/recruiting/candidate-sourcing-and-ranking.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/recruiting/interview-coordination.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/recruiting/job-posting-and-sourcing.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/recruiting/offer-and-close-management.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/recruiting/role-intake-and-scorecard.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/recruiting/sourcing-funnel-recap.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/sales/account-strategy.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/sales/crm-pipeline-review.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/sales/deal-strategy.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/sales/outbound-sales-strategy.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/sales/proposal-development.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/sales/sales-coaching.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/sales/sales-discovery-preparation.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/salesforce/sf-build-automation.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/salesforce/sf-build-dashboard.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/salesforce/sf-config-deployment.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/salesforce/sf-data-management.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/salesforce/sf-org-health-check.md +38 -0
- package/dist/registry/stubs/jobs/ai-employee/salesforce/sf-user-and-access-management.md +35 -0
- package/dist/registry/stubs/jobs/ai-employee/security/compliance-continuous-monitoring.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/security/compliance-policy-authoring.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/security/compliance-questionnaire-response.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/security/compliance-requirements-detection.md +30 -0
- package/dist/registry/stubs/jobs/ai-employee/security/compliance-review.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/security/generate-audit-evidence.md +34 -0
- package/dist/registry/stubs/jobs/ai-employee/security/regulation-evidence-management.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/security/security-baseline-setup.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/security/security-review.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/security/soc2-evidence-management.md +32 -0
- package/dist/registry/stubs/jobs/ai-employee/security/vulnerability-triage-and-remediation.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/strategy/advisor-interview.md +29 -0
- package/dist/registry/stubs/jobs/ai-employee/strategy/advisory-board-development.md +31 -0
- package/dist/registry/stubs/jobs/ai-employee/strategy/advisory-board-selection.md +29 -0
- package/dist/registry/stubs/jobs/ai-employee/strategy/blue-sky-brainstorming.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/strategy/business-idea-validation-and-scoping.md +44 -0
- package/dist/registry/stubs/jobs/ai-employee/strategy/business-plan-creation.md +38 -0
- package/dist/registry/stubs/jobs/ai-employee/strategy/competitive-analysis.md +36 -0
- package/dist/registry/stubs/jobs/ai-employee/strategy/founder-market-fit-analysis.md +40 -0
- package/dist/registry/stubs/jobs/ai-employee/strategy/pricing-strategy-definition.md +40 -0
- package/dist/registry/stubs/jobs/ai-employee/strategy/problem-statement-crystallization.md +37 -0
- package/dist/registry/stubs/jobs/ai-employee/strategy/review-business-strategy.md +37 -0
- package/dist/registry/stubs/jobs/ai-employee/travel/travel-disruption-rebooking.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/travel/travel-fare-watch.md +33 -0
- package/dist/registry/stubs/jobs/ai-employee/travel/travel-planning.md +32 -0
- package/dist/registry/stubs/jobs/ai-manager/fraim/instruction-hygiene-review.md +34 -0
- package/dist/registry/stubs/jobs/ai-manager/management/analyze-why-you-messed-up.md +29 -0
- package/dist/registry/stubs/jobs/ai-manager/management/author-project-rules.md +31 -0
- package/dist/registry/stubs/jobs/ai-manager/management/create-clarity.md +30 -0
- package/dist/registry/stubs/jobs/ai-manager/management/explain-it.md +30 -0
- package/dist/registry/stubs/jobs/ai-manager/management/follow-your-mentor.md +29 -0
- package/dist/registry/stubs/jobs/ai-manager/management/hire-right-ai-for-the-job.md +29 -0
- package/dist/registry/stubs/jobs/ai-manager/management/hire-the-right-human-ai-manager.md +29 -0
- package/dist/registry/stubs/jobs/ai-manager/management/how-should-i-verify.md +32 -0
- package/dist/registry/stubs/jobs/ai-manager/management/need-pov.md +30 -0
- package/dist/registry/stubs/jobs/ai-manager/management/recognize-good-work.md +29 -0
- package/dist/registry/stubs/jobs/ai-manager/management/refine-core-values.md +29 -0
- package/dist/registry/stubs/jobs/ai-manager/management/shape-team.md +30 -0
- package/dist/registry/stubs/jobs/ai-manager/management/strong-pov.md +30 -0
- package/dist/registry/stubs/jobs/ai-manager/management/weak-pov.md +30 -0
- package/dist/registry/stubs/jobs/ai-manager/management/what-should-i-review.md +34 -0
- package/dist/src/cli/utils/remote-sync.js +0 -7
- package/dist/src/cli/utils/script-sync-utils.js +0 -4
- package/dist/src/config/learning-domains.js +12 -19
- package/dist/src/core/ai-mentor.js +2 -2
- package/dist/src/core/utils/domain-rule-assembler.js +78 -153
- package/dist/src/core/utils/include-resolver.js +25 -47
- package/dist/src/core/utils/local-registry-resolver.js +0 -51
- package/dist/src/local-mcp-server/learning-context-builder.js +36 -33
- package/dist/src/local-mcp-server/stdio-server.js +27 -59
- package/dist/src/services/mcp-service.js +15 -15
- package/dist/src/services/registry-service.js +0 -4
- package/package.json +3 -3
- package/dist/registry/domains.json +0 -159
- package/dist/registry/scripts/domains/catalog.js +0 -112
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.GLOBAL_RULE_PATHS = void 0;
|
|
7
|
+
exports.isSafeDomainId = isSafeDomainId;
|
|
8
|
+
exports.isSafeRegistryPath = isSafeRegistryPath;
|
|
9
|
+
exports.jobDomainFromRegistryPath = jobDomainFromRegistryPath;
|
|
10
|
+
exports.discoverJobDomains = discoverJobDomains;
|
|
11
|
+
exports.domainRulePath = domainRulePath;
|
|
12
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
13
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
14
|
+
function isSafeDomainId(domain) {
|
|
15
|
+
return /^[a-z][a-z-]*$/.test(domain) && !['__proto__', 'constructor', 'prototype'].includes(domain);
|
|
16
|
+
}
|
|
17
|
+
function isSafeRegistryPath(value, kind) {
|
|
18
|
+
return typeof value === 'string' && new RegExp(`^${kind}/[a-zA-Z0-9_/-]+\\.md$`).test(value)
|
|
19
|
+
&& !value.includes('//') && !value.split('/').some(part => part === '.' || part === '..');
|
|
20
|
+
}
|
|
21
|
+
/** Extract a folder, never a frontmatter declaration, leaf-name alias or employee. */
|
|
22
|
+
function jobDomainFromRegistryPath(path) {
|
|
23
|
+
if (typeof path !== 'string')
|
|
24
|
+
return null;
|
|
25
|
+
const clean = path.replace(/\\/g, '/').replace(/^registry\//, '');
|
|
26
|
+
if (!isSafeRegistryPath(clean, 'jobs'))
|
|
27
|
+
return null;
|
|
28
|
+
const rolePath = /^jobs\/(?:ai-employee|ai-manager|personalized-employee)\//.test(clean);
|
|
29
|
+
const match = clean.match(rolePath
|
|
30
|
+
? /^jobs\/(?:ai-employee|ai-manager|personalized-employee)\/([a-z][a-z-]*)\/[^/]+\.md$/
|
|
31
|
+
: /^jobs\/([a-z][a-z-]*)\/[^/]+\.md$/);
|
|
32
|
+
return match && isSafeDomainId(match[1]) ? match[1] : null;
|
|
33
|
+
}
|
|
34
|
+
/** Discover domain names from job folders in a registry, synced home or personalized home. */
|
|
35
|
+
function discoverJobDomains(...roots) {
|
|
36
|
+
const domains = new Set();
|
|
37
|
+
for (const root of roots) {
|
|
38
|
+
for (const relative of ['jobs/ai-employee', 'jobs/ai-manager', 'stubs/jobs/ai-employee', 'stubs/jobs/ai-manager', 'jobs', 'ai-employee/jobs', 'ai-manager/jobs']) {
|
|
39
|
+
const directory = node_path_1.default.join(root, relative);
|
|
40
|
+
if (!node_fs_1.default.existsSync(directory))
|
|
41
|
+
continue;
|
|
42
|
+
for (const entry of node_fs_1.default.readdirSync(directory, { withFileTypes: true })) {
|
|
43
|
+
if (entry.isDirectory() && isSafeDomainId(entry.name) && !['ai-employee', 'ai-manager', 'personalized-employee'].includes(entry.name))
|
|
44
|
+
domains.add(entry.name);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return [...domains].sort();
|
|
49
|
+
}
|
|
50
|
+
exports.GLOBAL_RULE_PATHS = ['rules/constitution.md', 'rules/evidence-cardinality.md'];
|
|
51
|
+
function domainRulePath(domain) {
|
|
52
|
+
if (!isSafeDomainId(domain))
|
|
53
|
+
throw new Error('Invalid domain folder');
|
|
54
|
+
return 'rules/' + domain + '/' + domain + '.md';
|
|
55
|
+
}
|
|
@@ -10,23 +10,12 @@ exports.readerWordCount = readerWordCount;
|
|
|
10
10
|
exports.validateEntry = validateEntry;
|
|
11
11
|
exports.renderEntry = renderEntry;
|
|
12
12
|
exports.isLearningScaffolding = isLearningScaffolding;
|
|
13
|
-
const node_fs_1 = __importDefault(require("node:fs"));
|
|
14
13
|
const node_path_1 = __importDefault(require("node:path"));
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
if (candidate?.schemaVersion !== 2 || !candidate.domains || typeof candidate.domains !== 'object' || Array.isArray(candidate.domains))
|
|
21
|
-
throw new Error('Invalid domain catalog');
|
|
22
|
-
catalog = candidate;
|
|
23
|
-
}
|
|
24
|
-
catch {
|
|
25
|
-
console.warn('Learning domain catalog unavailable: restore or sync domains.json beside the installed scripts, then retry domain resolution. Existing source files are preserved.');
|
|
26
|
-
}
|
|
27
|
-
const domainData = (effectiveCatalog) => ({ mapVersion: effectiveCatalog?.mapVersion ?? 0, domains: effectiveCatalog?.schemaVersion === 2 && effectiveCatalog.domains && typeof effectiveCatalog.domains === 'object' && !Array.isArray(effectiveCatalog.domains) ? Object.keys(effectiveCatalog.domains).filter(domain => domain !== 'global' && /^[a-z][a-z-]*$/.test(domain)) : [] });
|
|
28
|
-
function deriveDomain(origins, effectiveCatalog = catalog) {
|
|
29
|
-
const map = domainData(effectiveCatalog);
|
|
14
|
+
const folders_1 = require("../domains/folders");
|
|
15
|
+
const domains = (0, folders_1.discoverJobDomains)(node_path_1.default.join(__dirname, '../..'));
|
|
16
|
+
const domainData = (effectiveDomains) => ({ mapVersion: 3, domains: effectiveDomains });
|
|
17
|
+
function deriveDomain(origins, effectiveDomains = domains) {
|
|
18
|
+
const map = domainData(effectiveDomains);
|
|
30
19
|
const unknown = (reason) => ({ status: 'needs-domain', value: null, reason, mapVersion: map.mapVersion });
|
|
31
20
|
if (!origins.length)
|
|
32
21
|
return unknown('No originating job recorded');
|
|
@@ -34,9 +23,9 @@ function deriveDomain(origins, effectiveCatalog = catalog) {
|
|
|
34
23
|
for (const origin of origins) {
|
|
35
24
|
// Current folder identity wins; job declarations are no longer domain authority.
|
|
36
25
|
// Missing provenance is not a connect request and must remain unresolved.
|
|
37
|
-
const selected = origin.registryPath ? (0,
|
|
38
|
-
if (selected
|
|
39
|
-
decisions.push({ value: selected
|
|
26
|
+
const selected = origin.registryPath ? (0, folders_1.jobDomainFromRegistryPath)(origin.registryPath) : null;
|
|
27
|
+
if (selected && effectiveDomains.includes(selected)) {
|
|
28
|
+
decisions.push({ value: selected, basis: 'category' });
|
|
40
29
|
continue;
|
|
41
30
|
}
|
|
42
31
|
return unknown(`No current domain folder for ${origin.name}; retain original provenance for review`);
|
|
@@ -46,8 +35,8 @@ function deriveDomain(origins, effectiveCatalog = catalog) {
|
|
|
46
35
|
return { status: 'resolved', ...decisions[0], mapVersion: map.mapVersion };
|
|
47
36
|
}
|
|
48
37
|
/** Resolve an existing entry without rewriting its source, ID, dates or approval. */
|
|
49
|
-
function storedEntryDomain(content, storageDomain,
|
|
50
|
-
const map = domainData(
|
|
38
|
+
function storedEntryDomain(content, storageDomain, effectiveDomains = domains) {
|
|
39
|
+
const map = domainData(effectiveDomains);
|
|
51
40
|
const unknown = (reason) => ({ status: 'needs-domain', value: null, reason, mapVersion: map.mapVersion });
|
|
52
41
|
const fields = (label) => [...content.matchAll(new RegExp(`^\\*\\*${label}\\*\\*:\\s*([^\\r\\n]+)\\r?$`, 'gm'))].map(match => match[1].trim());
|
|
53
42
|
const domains = fields('Domain');
|
|
@@ -63,7 +52,7 @@ function storedEntryDomain(content, storageDomain, effectiveCatalog = catalog) {
|
|
|
63
52
|
}
|
|
64
53
|
const origins = fields('Originating job').flatMap(value => value.split(';').map(value => value.trim()).filter(Boolean));
|
|
65
54
|
if (origins.length)
|
|
66
|
-
return deriveDomain(origins.map(registryPath => ({ name: registryPath, registryPath })),
|
|
55
|
+
return deriveDomain(origins.map(registryPath => ({ name: registryPath, registryPath })), effectiveDomains);
|
|
67
56
|
// Undecorated files contain intentionally global preferences and patterns.
|
|
68
57
|
// An old umbrella filename alone never proves a current domain assignment.
|
|
69
58
|
if (storageDomain === 'global' && (!declared || declared === 'global'))
|
|
@@ -71,13 +60,13 @@ function storedEntryDomain(content, storageDomain, effectiveCatalog = catalog) {
|
|
|
71
60
|
return unknown('Historical entry needs original job provenance or an explicit manager domain decision');
|
|
72
61
|
}
|
|
73
62
|
/** Select entry blocks for one job while retaining provenance in the original text. */
|
|
74
|
-
function selectStoredLearningEntries(content, storageDomain, targetDomain, includeGlobal = true,
|
|
63
|
+
function selectStoredLearningEntries(content, storageDomain, targetDomain, includeGlobal = true, effectiveDomains = domains) {
|
|
75
64
|
const headings = [...content.matchAll(/^#{2,6}\s+\[(?:P-)?(?:CRITICAL|HIGH|MED|MEDIUM|LOW|IMPORTANT|MONITOR)\].*$/gm)];
|
|
76
65
|
const blocks = headings.length ? headings.map((heading, index) => content.slice(heading.index, headings[index + 1]?.index ?? content.length).trim()) : [content.trim()].filter(Boolean);
|
|
77
66
|
const entries = [];
|
|
78
67
|
let unresolved = 0;
|
|
79
68
|
for (const block of blocks) {
|
|
80
|
-
const decision = storedEntryDomain(block, storageDomain,
|
|
69
|
+
const decision = storedEntryDomain(block, storageDomain, effectiveDomains);
|
|
81
70
|
if (decision.status === 'needs-domain')
|
|
82
71
|
unresolved++;
|
|
83
72
|
else if (decision.value === targetDomain || (includeGlobal && decision.value === 'global'))
|
|
@@ -397,7 +397,7 @@ async function verifyCapabilityDelivery(action, input, options) {
|
|
|
397
397
|
// publishes supporting edits under the target rule's approval.
|
|
398
398
|
const registryFile = node_path_1.default.join(options.projectPath, 'registry', normalized);
|
|
399
399
|
if (!node_fs_1.default.existsSync(registryFile) || !sameDeliveryText(node_fs_1.default.readFileSync(registryFile, 'utf8'), resolved.content)) {
|
|
400
|
-
|
|
400
|
+
sharedSourcesAvailable = false;
|
|
401
401
|
}
|
|
402
402
|
else {
|
|
403
403
|
snapshot(registryFile, resolved.content);
|
|
@@ -417,43 +417,18 @@ async function verifyCapabilityDelivery(action, input, options) {
|
|
|
417
417
|
let reachable = true;
|
|
418
418
|
const sharedCallers = [];
|
|
419
419
|
const supportingPublications = new Map();
|
|
420
|
-
let
|
|
420
|
+
let sharedSourcesAvailable = true;
|
|
421
421
|
const captureRuleSelection = (callerPath) => {
|
|
422
422
|
const paths = load('core/utils/project-fraim-paths');
|
|
423
423
|
const workspace = paths.getWorkspaceFraimPath(options.projectPath);
|
|
424
424
|
const user = paths.getUserFraimDirPath();
|
|
425
425
|
snapshot(node_path_1.default.join(workspace, 'config.json'));
|
|
426
426
|
snapshot(node_path_1.default.join(user, 'config.json'));
|
|
427
|
-
const machineCatalog = node_path_1.default.join(user, 'domains.json');
|
|
428
|
-
const workspaceCatalog = node_path_1.default.join(workspace, 'domains.json');
|
|
429
|
-
const registryCatalog = node_path_1.default.join(options.projectPath, 'registry/domains.json');
|
|
430
|
-
const syncedCatalog = node_fs_1.default.existsSync(machineCatalog) ? machineCatalog : workspaceCatalog;
|
|
431
|
-
const baselineCatalog = node_fs_1.default.existsSync(syncedCatalog) ? syncedCatalog : registryCatalog;
|
|
432
|
-
for (const file of [machineCatalog, workspaceCatalog, registryCatalog])
|
|
433
|
-
snapshot(file);
|
|
434
427
|
for (const [level, root] of [['Project', node_path_1.default.join(workspace, 'personalized-employee')], ['Manager', manager.contentRoot], ['Org', org.contentRoot]]) {
|
|
435
|
-
const file = node_path_1.default.join(root, 'domains.json');
|
|
436
|
-
snapshot(file);
|
|
437
|
-
if (node_fs_1.default.existsSync(file)) {
|
|
438
|
-
const sourceHome = (0, owner_identity_1.resolveOwnerHome)(options.projectPath, level, { runtimeModule: options.runtimeModule });
|
|
439
|
-
if (sourceHome.requiresPublish)
|
|
440
|
-
supportingPublications.set(file, sourceHome);
|
|
441
|
-
if (shared && level === 'Project')
|
|
442
|
-
sharedCallers.push({ file, expectedHash: snapshots.get(node_path_1.default.resolve(file)).sha256 });
|
|
443
|
-
}
|
|
444
428
|
// An override created after verification must invalidate the proof.
|
|
445
429
|
snapshot(node_path_1.default.join(root, targetPath));
|
|
446
430
|
snapshot(node_path_1.default.join(root, callerPath));
|
|
447
431
|
}
|
|
448
|
-
if (shared) {
|
|
449
|
-
// An installed catalog alone cannot prove that the shared selection
|
|
450
|
-
// shipped in the reviewed repository revision and current remote HEAD.
|
|
451
|
-
if (!node_fs_1.default.existsSync(registryCatalog) || !node_fs_1.default.existsSync(baselineCatalog)
|
|
452
|
-
|| !sameDeliveryText(node_fs_1.default.readFileSync(registryCatalog, 'utf8'), node_fs_1.default.readFileSync(baselineCatalog, 'utf8')))
|
|
453
|
-
sharedCatalogAvailable = false;
|
|
454
|
-
else
|
|
455
|
-
sharedCallers.push({ file: registryCatalog, expectedHash: snapshots.get(node_path_1.default.resolve(registryCatalog)).sha256 });
|
|
456
|
-
}
|
|
457
432
|
};
|
|
458
433
|
for (const caller of input.callers) {
|
|
459
434
|
const callerHome = options.resolveHome(caller.owner);
|
|
@@ -535,13 +510,13 @@ async function verifyCapabilityDelivery(action, input, options) {
|
|
|
535
510
|
}
|
|
536
511
|
};
|
|
537
512
|
verifySnapshots();
|
|
538
|
-
if (!
|
|
513
|
+
if (!sharedSourcesAvailable)
|
|
539
514
|
return { published: false, reference: target, contentHash, reachable, localFiles, ...reviewEvidence };
|
|
540
515
|
for (const [file, sourceHome] of supportingPublications) {
|
|
541
516
|
if (!options.runtimeModulePath)
|
|
542
517
|
throw new Error('capability-publication-required');
|
|
543
|
-
// Rule approval never authorizes publishing supporting
|
|
544
|
-
const supporting = publishRunFile(options.projectPath, file, sourceHome, input.operationKey || '
|
|
518
|
+
// Rule approval never authorizes publishing supporting rule edits.
|
|
519
|
+
const supporting = publishRunFile(options.projectPath, file, sourceHome, input.operationKey || 'rule-delivery-check', snapshots.get(node_path_1.default.resolve(file)).sha256, options.runtimeModulePath, undefined, true);
|
|
545
520
|
verifySnapshots();
|
|
546
521
|
if (!supporting.published)
|
|
547
522
|
return { ...supporting, contentHash, reachable, localFiles, ...reviewEvidence };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!-- FRAIM_DISCOVERY_STUB -->
|
|
2
|
+
|
|
3
|
+
# FRAIM Job: aeo-optimization
|
|
4
|
+
|
|
5
|
+
## Intent
|
|
6
|
+
Implement verified answer-engine optimization improvements with reusable website source, truthful metadata, regression checks, and comparable deployed results.
|
|
7
|
+
|
|
8
|
+
## Outcome
|
|
9
|
+
- Tested, reviewable website changes addressing verified AEO findings.
|
|
10
|
+
- Evidence connects each change to its source, built artifact, tests and reviewed revision.
|
|
11
|
+
- After authorized delivery, a deployed-page check and comparable rescan, or an explicit pending measurement record when deployment or provider access is unavailable.
|
|
12
|
+
|
|
13
|
+
## Steps
|
|
14
|
+
<!-- The discovery stub's phase tracker reads this list; phase bodies and routing are inherited above. -->
|
|
15
|
+
1. Phase 1: `implement-scoping`
|
|
16
|
+
2. Phase 2: `aeo-baseline`
|
|
17
|
+
3. Phase 3: `implement-repro` (bugs only)
|
|
18
|
+
4. Phase 4: `implement-tests`
|
|
19
|
+
5. Phase 5: `aeo-source-plan`
|
|
20
|
+
6. Phase 6: `implement-code`
|
|
21
|
+
7. Phase 7: `implement-validate`
|
|
22
|
+
8. Phase 8: `aeo-artifact-validation`
|
|
23
|
+
9. Phase 9: `implement-security-review`
|
|
24
|
+
10. Phase 10: `implement-regression`
|
|
25
|
+
11. Phase 11: `implement-quality`
|
|
26
|
+
12. Phase 12: `implement-completeness-review`
|
|
27
|
+
13. Phase 13: `implement-architecture-update`
|
|
28
|
+
14. Phase 14: `implement-submission`
|
|
29
|
+
15. Phase 15: `address-feedback`
|
|
30
|
+
16. Phase 16: `retrospective`
|
|
31
|
+
17. Phase 17: `aeo-rescan`
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
> [!IMPORTANT]
|
|
36
|
+
> **For AI Agents:** Do NOT attempt to execute this job based on the Intent/Outcome above.
|
|
37
|
+
> This stub is for discoverability only. The actual job has multiple phases with
|
|
38
|
+
> detailed steps, validation criteria, and required skills.
|
|
39
|
+
>
|
|
40
|
+
> To get full phase-by-phase instructions, call:
|
|
41
|
+
> `get_fraim_job({ job: "aeo-optimization" })`
|
|
42
|
+
>
|
|
43
|
+
> Then follow all phases using `seekMentoring` at each phase transition.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<!-- FRAIM_DISCOVERY_STUB -->
|
|
2
|
+
|
|
3
|
+
# FRAIM Job: author-ai-evals
|
|
4
|
+
|
|
5
|
+
## Intent
|
|
6
|
+
Author a runner-compatible evaluation suite for an AI agent or model, with dataset provenance, metric definitions, approval-evidenced thresholds, and an executed baseline result.
|
|
7
|
+
|
|
8
|
+
## Outcome
|
|
9
|
+
- **Eval Suite**: A committed, runner-compatible eval configuration covering task completion, tool use, hallucination, and safety dimensions.
|
|
10
|
+
- **Dataset Manifest**: Provenance, version, retention category, and purpose-limitation for every dataset used.
|
|
11
|
+
- **Thresholds**: Metric thresholds backed by explicit evidence or flagged as open decisions requiring product owner approval.
|
|
12
|
+
- **Baseline Result**: An executed run captured via the repository's eval runner, not compilation alone.
|
|
13
|
+
|
|
14
|
+
## Steps
|
|
15
|
+
1. Phase 1: `eval-scoping`
|
|
16
|
+
2. Phase 2: `eval-authoring`
|
|
17
|
+
3. Phase 3: `eval-execution`
|
|
18
|
+
4. Phase 4: `eval-ci-integration`
|
|
19
|
+
5. Phase 5: `eval-submission`
|
|
20
|
+
6. Phase 6: `address-feedback`
|
|
21
|
+
7. Phase 7: `retrospective`
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
> [!IMPORTANT]
|
|
26
|
+
> **For AI Agents:** Do NOT attempt to execute this job based on the Intent/Outcome above.
|
|
27
|
+
> This stub is for discoverability only. The actual job has multiple phases with
|
|
28
|
+
> detailed steps, validation criteria, and required skills.
|
|
29
|
+
>
|
|
30
|
+
> To get full phase-by-phase instructions, call:
|
|
31
|
+
> `get_fraim_job({ job: "author-ai-evals" })`
|
|
32
|
+
>
|
|
33
|
+
> Then follow all phases using `seekMentoring` at each phase transition.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<!-- FRAIM_DISCOVERY_STUB -->
|
|
2
|
+
|
|
3
|
+
# FRAIM Job: create-ai-agent
|
|
4
|
+
|
|
5
|
+
## Intent
|
|
6
|
+
Design, configure, and deploy a production AI agent for a named use case and platform, with explicit tool permissions, knowledge configuration, and validation evidence.
|
|
7
|
+
|
|
8
|
+
## Outcome
|
|
9
|
+
- **Agent Definition**: Instructions, persona, and behavioral guardrails committed to the repository.
|
|
10
|
+
- **Platform Deployment Package**: Platform-specific configuration and deployment artifact.
|
|
11
|
+
- **Tool and Knowledge Configuration**: Explicit tool allowlist and knowledge source manifest.
|
|
12
|
+
- **Validation Evidence**: Tested against intended use cases with a walkthrough record.
|
|
13
|
+
|
|
14
|
+
## Steps
|
|
15
|
+
1. Phase 1: `agent-scoping`
|
|
16
|
+
2. Phase 2: `agent-design`
|
|
17
|
+
3. Phase 3: `platform-build`
|
|
18
|
+
4. Phase 4: `agent-validation`
|
|
19
|
+
5. Phase 5: `agent-submission`
|
|
20
|
+
6. Phase 6: `address-feedback`
|
|
21
|
+
7. Phase 7: `retrospective`
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
> [!IMPORTANT]
|
|
26
|
+
> **For AI Agents:** Do NOT attempt to execute this job based on the Intent/Outcome above.
|
|
27
|
+
> This stub is for discoverability only. The actual job has multiple phases with
|
|
28
|
+
> detailed steps, validation criteria, and required skills.
|
|
29
|
+
>
|
|
30
|
+
> To get full phase-by-phase instructions, call:
|
|
31
|
+
> `get_fraim_job({ job: "create-ai-agent" })`
|
|
32
|
+
>
|
|
33
|
+
> Then follow all phases using `seekMentoring` at each phase transition.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<!-- FRAIM_DISCOVERY_STUB -->
|
|
2
|
+
|
|
3
|
+
# FRAIM Job: create-hub-configured-agent
|
|
4
|
+
|
|
5
|
+
## Intent
|
|
6
|
+
Help a manager turn a local AI-agent account, cloud-credit route, or provider setup into a Hub configured agent. The job asks which underlying agent to use, creates or reuses the smallest launch command needed, registers the profile in Hub, and validates that the profile appears in Hub settings without storing secrets.
|
|
7
|
+
|
|
8
|
+
## Outcome
|
|
9
|
+
- A Hub configured-agent profile stored in user-level Hub state, normally `~/.fraim/hub-configured-agents.json`.
|
|
10
|
+
- The configured agent appears in Hub settings with `id`, `label`, `baseHostId`, and one canonical `command`: ordered environment assignments or literal sourced setup files, followed by the bare base CLI and supported settings.
|
|
11
|
+
- Stored `setupScript` is unsupported and fails closed. Explicit recovery replaces that one record with a complete canonical command and removes `setupScript`, preserving script arguments, preparation order, persistent account/home, runner and timeout. No automatic conversion or migration-backup path exists.
|
|
12
|
+
- Existing base-CLI env-prefix commands remain valid. User-authored account wrappers and profile functions require migration: extract their preparation without losing account selection. Standard CLI installation shims on prepared PATH remain supported, including CMD files.
|
|
13
|
+
- Validation proves the registered launch command changes the expected CLI-visible environment or config without printing secret values.
|
|
14
|
+
- If an equivalent command/profile already exists, the job performs no duplicate write and reports the existing profile as the outcome.
|
|
15
|
+
|
|
16
|
+
## Steps
|
|
17
|
+
1. Ask which underlying agent or local CLI the manager wants to configure. Do not restrict the answer to today's built-in examples; use the Hub-supported base agent when one exists, and call out missing Hub support when the chosen agent cannot currently be registered.
|
|
18
|
+
2. **Multi-Agent Request Check**: If the manager's request names more than one base agent/profile in the same message (for example, "configure claude-ios and claude-tpg"), list every named agent back to the manager as `requestedAgents` and confirm the full set before proceeding. Work through `select-base-cli` (steps 3-6 below), `inspect-existing-setup`, `create-local-setup-script`, `register-hub-profile`, and `validate-configured-agent` once per named agent within this same run — do not stop after the first when more were named. If a genuine blocker (missing credentials, missing Hub support, ambiguous identity) stops one agent partway through, record the specific blocker for that agent and continue with the remaining named agents rather than abandoning the whole request.
|
|
19
|
+
3. Ask for the user-visible label and stable id. If omitted, derive an id from the label using lowercase kebab case.
|
|
20
|
+
4. Ask whether this profile should use cloud credits, a different endpoint, a different account/subscription, a provider route, or an existing local setup script. Capture only the non-secret intent and paths.
|
|
21
|
+
5. Infer the setup approach from the manager's answer and local evidence. Common examples include profile/config routing, alternate account setup, an existing script, or cloud-credit/provider routing artifacts already present on the machine.
|
|
22
|
+
6. If the requested setup depends on missing provider credentials, endpoint access, or model access, stop with the missing prerequisite rather than creating a partial or fake configuration.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
> [!IMPORTANT]
|
|
27
|
+
> **For AI Agents:** Do NOT attempt to execute this job based on the Intent/Outcome above.
|
|
28
|
+
> This stub is for discoverability only. The actual job has multiple phases with
|
|
29
|
+
> detailed steps, validation criteria, and required skills.
|
|
30
|
+
>
|
|
31
|
+
> To get full phase-by-phase instructions, call:
|
|
32
|
+
> `get_fraim_job({ job: "create-hub-configured-agent" })`
|
|
33
|
+
>
|
|
34
|
+
> Then follow all phases using `seekMentoring` at each phase transition.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<!-- FRAIM_DISCOVERY_STUB -->
|
|
2
|
+
|
|
3
|
+
# FRAIM Job: enable-web-mcp
|
|
4
|
+
|
|
5
|
+
## Intent
|
|
6
|
+
Make an existing web product's approved capabilities available through MCP, covering transport, authentication, least-privilege tool selection, validation, and client connection instructions.
|
|
7
|
+
|
|
8
|
+
## Outcome
|
|
9
|
+
- **MCP Server**: A running MCP server exposing the approved capabilities as validated tools.
|
|
10
|
+
- **Authentication**: Secure authentication wired at the server level using the product's existing auth mechanism.
|
|
11
|
+
- **Tool Manifest**: A documented tool catalog with Zod schemas, descriptions, and example responses.
|
|
12
|
+
- **Client Connection Instructions**: Verified connection instructions for target AI clients (Claude, Cursor, GitHub Copilot, etc.).
|
|
13
|
+
|
|
14
|
+
## Steps
|
|
15
|
+
1. Phase 1: `mcp-discovery`
|
|
16
|
+
2. Phase 2: `mcp-design`
|
|
17
|
+
3. Phase 3: `mcp-implementation`
|
|
18
|
+
4. Phase 4: `mcp-validation`
|
|
19
|
+
5. Phase 5: `mcp-submission`
|
|
20
|
+
6. Phase 6: `address-feedback`
|
|
21
|
+
7. Phase 7: `retrospective`
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
> [!IMPORTANT]
|
|
26
|
+
> **For AI Agents:** Do NOT attempt to execute this job based on the Intent/Outcome above.
|
|
27
|
+
> This stub is for discoverability only. The actual job has multiple phases with
|
|
28
|
+
> detailed steps, validation criteria, and required skills.
|
|
29
|
+
>
|
|
30
|
+
> To get full phase-by-phase instructions, call:
|
|
31
|
+
> `get_fraim_job({ job: "enable-web-mcp" })`
|
|
32
|
+
>
|
|
33
|
+
> Then follow all phases using `seekMentoring` at each phase transition.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<!-- FRAIM_DISCOVERY_STUB -->
|
|
2
|
+
|
|
3
|
+
# FRAIM Job: evaluate-ai-agent
|
|
4
|
+
|
|
5
|
+
## Intent
|
|
6
|
+
Evaluate an existing AI agent for task completion, tool use, hallucination, safety, and regressions using the target platform's supported evaluation interface or the repository's existing eval harness.
|
|
7
|
+
|
|
8
|
+
## Outcome
|
|
9
|
+
- **Evaluation Report**: Per-case results with each result linked to its evaluator, dataset version, run timestamp, and trace/evidence location.
|
|
10
|
+
- **Aggregate Metrics**: Pass rates and metric scores for each evaluation dimension.
|
|
11
|
+
- **Regression Assessment**: Comparison against prior baseline where a baseline exists.
|
|
12
|
+
- **Deployment Recommendation**: Pass, hold, or conditional verdict with explicit evidence.
|
|
13
|
+
|
|
14
|
+
## Steps
|
|
15
|
+
1. Phase 1: `eval-setup`
|
|
16
|
+
2. Phase 2: `eval-run`
|
|
17
|
+
3. Phase 3: `eval-analysis`
|
|
18
|
+
4. Phase 4: `eval-submission`
|
|
19
|
+
5. Phase 5: `address-feedback`
|
|
20
|
+
6. Phase 6: `retrospective`
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
> [!IMPORTANT]
|
|
25
|
+
> **For AI Agents:** Do NOT attempt to execute this job based on the Intent/Outcome above.
|
|
26
|
+
> This stub is for discoverability only. The actual job has multiple phases with
|
|
27
|
+
> detailed steps, validation criteria, and required skills.
|
|
28
|
+
>
|
|
29
|
+
> To get full phase-by-phase instructions, call:
|
|
30
|
+
> `get_fraim_job({ job: "evaluate-ai-agent" })`
|
|
31
|
+
>
|
|
32
|
+
> Then follow all phases using `seekMentoring` at each phase transition.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<!-- FRAIM_DISCOVERY_STUB -->
|
|
2
|
+
|
|
3
|
+
# FRAIM Job: mcp-server-creation
|
|
4
|
+
|
|
5
|
+
## Intent
|
|
6
|
+
Create an MCP (Model Context Protocol) server that wraps an application's existing REST API as AI-callable tools, enabling AI agents to interact with the application programmatically.
|
|
7
|
+
|
|
8
|
+
## Outcome
|
|
9
|
+
- **Functional MCP Server**: A running MCP server exposing application APIs as tools with proper Zod schema validation.
|
|
10
|
+
- **Authentication**: Secure API key or token-based authentication wrapping all tool calls.
|
|
11
|
+
- **Documentation**: Tool catalog with descriptions, input/output schemas, and usage examples.
|
|
12
|
+
|
|
13
|
+
## Steps
|
|
14
|
+
1. Phase 1: `api-discovery`
|
|
15
|
+
2. Phase 2: `server-scaffolding`
|
|
16
|
+
3. Phase 3: `tool-definition`
|
|
17
|
+
4. Phase 4: `authentication-setup`
|
|
18
|
+
5. Phase 5: `build-and-test`
|
|
19
|
+
6. Phase 6: `documentation`
|
|
20
|
+
7. Phase 7: `code-change-gate`
|
|
21
|
+
8. Phase 8: `mcp-server-submission`
|
|
22
|
+
9. Phase 9: `address-feedback`
|
|
23
|
+
10. Phase 10: `retrospective`
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
> [!IMPORTANT]
|
|
28
|
+
> **For AI Agents:** Do NOT attempt to execute this job based on the Intent/Outcome above.
|
|
29
|
+
> This stub is for discoverability only. The actual job has multiple phases with
|
|
30
|
+
> detailed steps, validation criteria, and required skills.
|
|
31
|
+
>
|
|
32
|
+
> To get full phase-by-phase instructions, call:
|
|
33
|
+
> `get_fraim_job({ job: "mcp-server-creation" })`
|
|
34
|
+
>
|
|
35
|
+
> Then follow all phases using `seekMentoring` at each phase transition.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!-- FRAIM_DISCOVERY_STUB -->
|
|
2
|
+
|
|
3
|
+
# FRAIM Job: publish-mcp-app
|
|
4
|
+
|
|
5
|
+
## Intent
|
|
6
|
+
Publish and distribute a Model Context Protocol (MCP) server application to major AI marketplaces and app stores (like ChatGPT and Claude).
|
|
7
|
+
|
|
8
|
+
## Outcome
|
|
9
|
+
- The MCP app is successfully submitted for approval to all targeted platforms.
|
|
10
|
+
- A status report detailing the submission state, verification challenges, and expected wait times.
|
|
11
|
+
|
|
12
|
+
## Steps
|
|
13
|
+
1. Phase 1: `verify-assets`
|
|
14
|
+
2. Phase 2: `publishing-review`
|
|
15
|
+
3. Phase 3: `execute-publishing`
|
|
16
|
+
4. Phase 4: `retrospective`
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
> [!IMPORTANT]
|
|
21
|
+
> **For AI Agents:** Do NOT attempt to execute this job based on the Intent/Outcome above.
|
|
22
|
+
> This stub is for discoverability only. The actual job has multiple phases with
|
|
23
|
+
> detailed steps, validation criteria, and required skills.
|
|
24
|
+
>
|
|
25
|
+
> To get full phase-by-phase instructions, call:
|
|
26
|
+
> `get_fraim_job({ job: "publish-mcp-app" })`
|
|
27
|
+
>
|
|
28
|
+
> Then follow all phases using `seekMentoring` at each phase transition.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<!-- FRAIM_DISCOVERY_STUB -->
|
|
2
|
+
|
|
3
|
+
# FRAIM Job: banking-evidence-audit
|
|
4
|
+
|
|
5
|
+
## Intent
|
|
6
|
+
Audit a banking or KYC evidence package for source lineage, missing records, exception handling, and reviewer readiness.
|
|
7
|
+
|
|
8
|
+
## Outcome
|
|
9
|
+
- **Reviewable deliverable**: A human-readable audit report at `docs/banking/{case-id}/{case-id}-{YYYY-MM-DD}-audit-report.docx`.
|
|
10
|
+
- Evidence map tying each requirement to source artifact, evidence id, owner, and time period.
|
|
11
|
+
- Exception report for missing, stale, contradictory, unverifiable, or redacted evidence.
|
|
12
|
+
- Reviewer handoff with recommendation; blocking gaps prevent a pass conclusion.
|
|
13
|
+
|
|
14
|
+
## Steps
|
|
15
|
+
1. Phase 1: `audit-scope`
|
|
16
|
+
2. Phase 2: `evidence-review`
|
|
17
|
+
3. Phase 3: `exception-analysis`
|
|
18
|
+
4. Phase 4: `audit-decision`
|
|
19
|
+
5. Phase 5: `address-feedback`
|
|
20
|
+
6. Phase 6: `retrospective`
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
> [!IMPORTANT]
|
|
25
|
+
> **For AI Agents:** Do NOT attempt to execute this job based on the Intent/Outcome above.
|
|
26
|
+
> This stub is for discoverability only. The actual job has multiple phases with
|
|
27
|
+
> detailed steps, validation criteria, and required skills.
|
|
28
|
+
>
|
|
29
|
+
> To get full phase-by-phase instructions, call:
|
|
30
|
+
> `get_fraim_job({ job: "banking-evidence-audit" })`
|
|
31
|
+
>
|
|
32
|
+
> Then follow all phases using `seekMentoring` at each phase transition.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<!-- FRAIM_DISCOVERY_STUB -->
|
|
2
|
+
|
|
3
|
+
# FRAIM Job: kyc-case-review
|
|
4
|
+
|
|
5
|
+
## Intent
|
|
6
|
+
Prepare a banking KYC case review package from supplied evidence, preserving unresolved checks and routing final approval to an authorized reviewer.
|
|
7
|
+
|
|
8
|
+
## Outcome
|
|
9
|
+
- **Reviewable deliverable**: A human-readable KYC review artifact at `docs/banking/{case-id}/{case-id}-{YYYY-MM-DD}-kyc-review.docx`.
|
|
10
|
+
- **KYC recommendation**: A clear review posture such as `ready_for_reviewer`, `needs_human_review`, or `blocked_by_missing_evidence`, with reasons.
|
|
11
|
+
- **Evidence pack**: A readable Word artifact tying the recommendation to evidence ids, source notes, observations, and a receipt.
|
|
12
|
+
- **Audit handoff**: Stable artifact paths that `banking-evidence-audit` can consume later.
|
|
13
|
+
|
|
14
|
+
## Steps
|
|
15
|
+
1. Phase 1: `case-intake`
|
|
16
|
+
2. Phase 2: `evidence-collection`
|
|
17
|
+
3. Phase 3: `kyc-decision`
|
|
18
|
+
4. Phase 4: `evidence-package`
|
|
19
|
+
5. Phase 5: `address-feedback`
|
|
20
|
+
6. Phase 6: `retrospective`
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
> [!IMPORTANT]
|
|
25
|
+
> **For AI Agents:** Do NOT attempt to execute this job based on the Intent/Outcome above.
|
|
26
|
+
> This stub is for discoverability only. The actual job has multiple phases with
|
|
27
|
+
> detailed steps, validation criteria, and required skills.
|
|
28
|
+
>
|
|
29
|
+
> To get full phase-by-phase instructions, call:
|
|
30
|
+
> `get_fraim_job({ job: "kyc-case-review" })`
|
|
31
|
+
>
|
|
32
|
+
> Then follow all phases using `seekMentoring` at each phase transition.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<!-- FRAIM_DISCOVERY_STUB -->
|
|
2
|
+
---
|
|
3
|
+
{
|
|
4
|
+
"name": "career-networking",
|
|
5
|
+
"displayName": "Networking Plan"
|
|
6
|
+
}
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# FRAIM Job: career-networking
|
|
10
|
+
|
|
11
|
+
## Intent
|
|
12
|
+
Build and operate a systematic networking strategy: who to contact, when to contact them, how to personalize outreach, and how to turn warm-path intelligence into real application leverage.
|
|
13
|
+
|
|
14
|
+
## Outcome
|
|
15
|
+
- A `Networking Plan` DOCX at `docs/career/{slug}-career-networking-{YYYY-MM-DD}.docx`
|
|
16
|
+
- Canonical markdown source at `docs/career/{slug}-career-networking-{YYYY-MM-DD}.md`, generated before the DOCX export
|
|
17
|
+
- >=3 connection tiers per target company: Tier 1 (hiring managers), Tier 2 (employees), Tier 3 (thought leaders)
|
|
18
|
+
- Warm connection path research for Tier 1 and Tier 2 contacts
|
|
19
|
+
- Personalized outreach message templates per tier (<=5 sentences, specific to recipient background)
|
|
20
|
+
- Networking calendar covering >=3 weeks with outreach and follow-up timing
|
|
21
|
+
- Status tracker for each target contact
|
|
22
|
+
- Role-linked recommendations about whether to network before applying, after applying, or instead of applying
|
|
23
|
+
- All LinkedIn write actions (connection requests, messages) performed browser-based via existing skills, as a post-approval action after the manager approves the plan
|
|
24
|
+
|
|
25
|
+
## Steps
|
|
26
|
+
1. Phase 1: `gather-networking-context`
|
|
27
|
+
2. Phase 2: `map-target-strategy`
|
|
28
|
+
3. Phase 3: `identify-and-score-contacts`
|
|
29
|
+
4. Phase 4: `draft-outreach-messages`
|
|
30
|
+
5. Phase 5: `plan-public-engagement`
|
|
31
|
+
6. Phase 6: `assemble-networking-plan`
|
|
32
|
+
7. Phase 7: `submit`
|
|
33
|
+
8. Phase 8: `address-feedback`
|
|
34
|
+
9. Phase 9: `retrospective`
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
> [!IMPORTANT]
|
|
39
|
+
> **For AI Agents:** Do NOT attempt to execute this job based on the Intent/Outcome above.
|
|
40
|
+
> This stub is for discoverability only. The actual job has multiple phases with
|
|
41
|
+
> detailed steps, validation criteria, and required skills.
|
|
42
|
+
>
|
|
43
|
+
> To get full phase-by-phase instructions, call:
|
|
44
|
+
> `get_fraim_job({ job: "career-networking" })`
|
|
45
|
+
>
|
|
46
|
+
> Then follow all phases using `seekMentoring` at each phase transition.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!-- FRAIM_DISCOVERY_STUB -->
|
|
2
|
+
---
|
|
3
|
+
{
|
|
4
|
+
"name": "career-spec",
|
|
5
|
+
"displayName": "Career Strategy"
|
|
6
|
+
}
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# FRAIM Job: career-spec
|
|
10
|
+
|
|
11
|
+
## Intent
|
|
12
|
+
Build a plain-language Career Strategy that helps the user understand where they fit best, what proof they already have, what gaps to close, and which CAREEna job to run next.
|
|
13
|
+
|
|
14
|
+
## Outcome
|
|
15
|
+
- A `Career Strategy` DOCX at `docs/career/{slug}-career-spec-{YYYY-MM-DD}.docx` using `get_fraim_file({ path: "templates/career/CAREER-STRATEGY-TEMPLATE.md" })`, marked `PERSONAL - CAREER CONFIDENTIAL`
|
|
16
|
+
- Canonical markdown source at `docs/career/{slug}-career-spec-{YYYY-MM-DD}.md`, generated before the DOCX export
|
|
17
|
+
- Customer analysis for hiring companies, family/dependents, and the user
|
|
18
|
+
- Value proposition assessment in plain language, backed by evidence from the user's history
|
|
19
|
+
- Target segment recommendation: company stage, size, industry, and role type
|
|
20
|
+
- Gap analysis and next actions framed as specific steps to close, not permanent deficits
|
|
21
|
+
- Recommended CAREEna path that names the next 1-3 jobs to run based on the user's situation
|
|
22
|
+
|
|
23
|
+
## Steps
|
|
24
|
+
1. Phase 1: `gather-career-context`
|
|
25
|
+
2. Phase 2: `analyze-customers`
|
|
26
|
+
3. Phase 3: `synthesize-positioning`
|
|
27
|
+
4. Phase 4: `submit`
|
|
28
|
+
5. Phase 5: `address-feedback`
|
|
29
|
+
6. Phase 6: `retrospective`
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
> [!IMPORTANT]
|
|
34
|
+
> **For AI Agents:** Do NOT attempt to execute this job based on the Intent/Outcome above.
|
|
35
|
+
> This stub is for discoverability only. The actual job has multiple phases with
|
|
36
|
+
> detailed steps, validation criteria, and required skills.
|
|
37
|
+
>
|
|
38
|
+
> To get full phase-by-phase instructions, call:
|
|
39
|
+
> `get_fraim_job({ job: "career-spec" })`
|
|
40
|
+
>
|
|
41
|
+
> Then follow all phases using `seekMentoring` at each phase transition.
|