@heytherevibin/skillforge 0.2.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/CHANGELOG.md +16 -0
- package/CODE_OF_CONDUCT.md +34 -0
- package/CONTRIBUTING.md +38 -0
- package/LICENSE +21 -0
- package/README.md +337 -0
- package/RELEASING.md +93 -0
- package/SECURITY.md +31 -0
- package/STRATEGY.md +26 -0
- package/bin/cli.js +547 -0
- package/lib/packs.js +184 -0
- package/package.json +38 -0
- package/python/app/__init__.py +0 -0
- package/python/app/__pycache__/__init__.cpython-312.pyc +0 -0
- package/python/app/__pycache__/auth.cpython-312.pyc +0 -0
- package/python/app/__pycache__/main.cpython-312.pyc +0 -0
- package/python/app/auth.py +63 -0
- package/python/app/cli.py +78 -0
- package/python/app/db_paths.py +26 -0
- package/python/app/events_cli.py +175 -0
- package/python/app/main.py +647 -0
- package/python/app/materialize.py +138 -0
- package/python/app/mcp_server.py +610 -0
- package/python/app/route_cli.py +117 -0
- package/python/requirements-dev.txt +1 -0
- package/python/requirements.txt +7 -0
- package/python/tests/test_db_paths.py +41 -0
- package/skills/accessibility/SKILL.md +145 -0
- package/skills/agent-architecture-audit/SKILL.md +256 -0
- package/skills/agent-eval/SKILL.md +144 -0
- package/skills/agent-harness-construction/SKILL.md +72 -0
- package/skills/agent-introspection-debugging/SKILL.md +152 -0
- package/skills/agent-payment-x402/SKILL.md +224 -0
- package/skills/agent-sort/SKILL.md +214 -0
- package/skills/agentic-engineering/SKILL.md +62 -0
- package/skills/agentic-os/SKILL.md +386 -0
- package/skills/ai-first-engineering/SKILL.md +50 -0
- package/skills/ai-regression-testing/SKILL.md +384 -0
- package/skills/android-clean-architecture/SKILL.md +338 -0
- package/skills/angular-developer/SKILL.md +153 -0
- package/skills/angular-developer/references/angular-animations.md +160 -0
- package/skills/angular-developer/references/angular-aria.md +410 -0
- package/skills/angular-developer/references/cli.md +86 -0
- package/skills/angular-developer/references/component-harnesses.md +59 -0
- package/skills/angular-developer/references/component-styling.md +91 -0
- package/skills/angular-developer/references/components.md +117 -0
- package/skills/angular-developer/references/creating-services.md +97 -0
- package/skills/angular-developer/references/data-resolvers.md +69 -0
- package/skills/angular-developer/references/define-routes.md +67 -0
- package/skills/angular-developer/references/defining-providers.md +72 -0
- package/skills/angular-developer/references/di-fundamentals.md +120 -0
- package/skills/angular-developer/references/e2e-testing.md +56 -0
- package/skills/angular-developer/references/effects.md +83 -0
- package/skills/angular-developer/references/hierarchical-injectors.md +43 -0
- package/skills/angular-developer/references/host-elements.md +80 -0
- package/skills/angular-developer/references/injection-context.md +63 -0
- package/skills/angular-developer/references/inputs.md +101 -0
- package/skills/angular-developer/references/linked-signal.md +59 -0
- package/skills/angular-developer/references/loading-strategies.md +61 -0
- package/skills/angular-developer/references/mcp.md +108 -0
- package/skills/angular-developer/references/navigate-to-routes.md +69 -0
- package/skills/angular-developer/references/outputs.md +86 -0
- package/skills/angular-developer/references/reactive-forms.md +122 -0
- package/skills/angular-developer/references/rendering-strategies.md +44 -0
- package/skills/angular-developer/references/resource.md +77 -0
- package/skills/angular-developer/references/route-animations.md +56 -0
- package/skills/angular-developer/references/route-guards.md +52 -0
- package/skills/angular-developer/references/router-lifecycle.md +45 -0
- package/skills/angular-developer/references/router-testing.md +87 -0
- package/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
- package/skills/angular-developer/references/signal-forms.md +795 -0
- package/skills/angular-developer/references/signals-overview.md +94 -0
- package/skills/angular-developer/references/tailwind-css.md +69 -0
- package/skills/angular-developer/references/template-driven-forms.md +114 -0
- package/skills/angular-developer/references/testing-fundamentals.md +65 -0
- package/skills/api-connector-builder/SKILL.md +120 -0
- package/skills/api-design/SKILL.md +522 -0
- package/skills/architecture-decision-records/SKILL.md +178 -0
- package/skills/article-writing/SKILL.md +78 -0
- package/skills/automation-audit-ops/SKILL.md +141 -0
- package/skills/autonomous-agent-harness/SKILL.md +272 -0
- package/skills/autonomous-loops/SKILL.md +609 -0
- package/skills/backend-patterns/SKILL.md +560 -0
- package/skills/benchmark/SKILL.md +92 -0
- package/skills/blueprint/SKILL.md +104 -0
- package/skills/browser-qa/SKILL.md +86 -0
- package/skills/bun-runtime/SKILL.md +83 -0
- package/skills/canary-watch/SKILL.md +98 -0
- package/skills/carrier-relationship-management/SKILL.md +211 -0
- package/skills/cisco-ios-patterns/SKILL.md +163 -0
- package/skills/ck/SKILL.md +147 -0
- package/skills/ck/commands/forget.mjs +44 -0
- package/skills/ck/commands/info.mjs +24 -0
- package/skills/ck/commands/init.mjs +143 -0
- package/skills/ck/commands/list.mjs +40 -0
- package/skills/ck/commands/migrate.mjs +202 -0
- package/skills/ck/commands/resume.mjs +36 -0
- package/skills/ck/commands/save.mjs +210 -0
- package/skills/ck/commands/shared.mjs +387 -0
- package/skills/ck/hooks/session-start.mjs +224 -0
- package/skills/claude-devfleet/SKILL.md +103 -0
- package/skills/click-path-audit/SKILL.md +244 -0
- package/skills/clickhouse-io/SKILL.md +438 -0
- package/skills/code-tour/SKILL.md +235 -0
- package/skills/codebase-onboarding/SKILL.md +232 -0
- package/skills/coding-standards/SKILL.md +548 -0
- package/skills/compose-multiplatform-patterns/SKILL.md +298 -0
- package/skills/connections-optimizer/SKILL.md +188 -0
- package/skills/content-engine/SKILL.md +126 -0
- package/skills/content-hash-cache-pattern/SKILL.md +160 -0
- package/skills/context-budget/SKILL.md +134 -0
- package/skills/continuous-agent-loop/SKILL.md +44 -0
- package/skills/continuous-learning/SKILL.md +129 -0
- package/skills/continuous-learning/config.json +18 -0
- package/skills/continuous-learning/evaluate-session.sh +69 -0
- package/skills/continuous-learning-v2/SKILL.md +358 -0
- package/skills/continuous-learning-v2/agents/observer-loop.sh +322 -0
- package/skills/continuous-learning-v2/agents/observer.md +198 -0
- package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
- package/skills/continuous-learning-v2/agents/start-observer.sh +248 -0
- package/skills/continuous-learning-v2/config.json +8 -0
- package/skills/continuous-learning-v2/hooks/observe.sh +476 -0
- package/skills/continuous-learning-v2/scripts/detect-project.sh +288 -0
- package/skills/continuous-learning-v2/scripts/instinct-cli.py +1519 -0
- package/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
- package/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
- package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1018 -0
- package/skills/cost-aware-llm-pipeline/SKILL.md +182 -0
- package/skills/cost-tracking/SKILL.md +147 -0
- package/skills/council/SKILL.md +202 -0
- package/skills/cpp-coding-standards/SKILL.md +722 -0
- package/skills/cpp-testing/SKILL.md +323 -0
- package/skills/crosspost/SKILL.md +110 -0
- package/skills/csharp-testing/SKILL.md +320 -0
- package/skills/customer-billing-ops/SKILL.md +139 -0
- package/skills/customs-trade-compliance/SKILL.md +262 -0
- package/skills/dart-flutter-patterns/SKILL.md +562 -0
- package/skills/dashboard-builder/SKILL.md +108 -0
- package/skills/data-scraper-agent/SKILL.md +764 -0
- package/skills/database-migrations/SKILL.md +428 -0
- package/skills/deep-research/SKILL.md +158 -0
- package/skills/defi-amm-security/SKILL.md +166 -0
- package/skills/deployment-patterns/SKILL.md +426 -0
- package/skills/design-system/SKILL.md +81 -0
- package/skills/django-celery/SKILL.md +456 -0
- package/skills/django-patterns/SKILL.md +733 -0
- package/skills/django-security/SKILL.md +592 -0
- package/skills/django-tdd/SKILL.md +728 -0
- package/skills/django-verification/SKILL.md +468 -0
- package/skills/dmux-workflows/SKILL.md +190 -0
- package/skills/docker-patterns/SKILL.md +363 -0
- package/skills/documentation-lookup/SKILL.md +89 -0
- package/skills/dotnet-patterns/SKILL.md +320 -0
- package/skills/e2e-testing/SKILL.md +325 -0
- package/skills/email-ops/SKILL.md +120 -0
- package/skills/energy-procurement/SKILL.md +227 -0
- package/skills/enterprise-agent-ops/SKILL.md +49 -0
- package/skills/error-handling/SKILL.md +375 -0
- package/skills/eval-harness/SKILL.md +269 -0
- package/skills/evm-token-decimals/SKILL.md +130 -0
- package/skills/exa-search/SKILL.md +106 -0
- package/skills/fal-ai-media/SKILL.md +287 -0
- package/skills/fastapi-patterns/SKILL.md +327 -0
- package/skills/finance-billing-ops/SKILL.md +126 -0
- package/skills/flox-environments/SKILL.md +496 -0
- package/skills/flutter-dart-code-review/SKILL.md +434 -0
- package/skills/foundation-models-on-device/SKILL.md +243 -0
- package/skills/frontend-design-direction/SKILL.md +92 -0
- package/skills/frontend-patterns/SKILL.md +641 -0
- package/skills/frontend-slides/SKILL.md +183 -0
- package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/skills/frontend-slides/animation-patterns.md +122 -0
- package/skills/frontend-slides/html-template.md +419 -0
- package/skills/frontend-slides/scripts/export-pdf.sh +418 -0
- package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
- package/skills/frontend-slides/viewport-base.css +153 -0
- package/skills/fsharp-testing/SKILL.md +279 -0
- package/skills/gan-style-harness/SKILL.md +278 -0
- package/skills/gateguard/SKILL.md +125 -0
- package/skills/git-workflow/SKILL.md +714 -0
- package/skills/github-ops/SKILL.md +143 -0
- package/skills/golang-patterns/SKILL.md +673 -0
- package/skills/golang-testing/SKILL.md +719 -0
- package/skills/google-workspace-ops/SKILL.md +94 -0
- package/skills/healthcare-cdss-patterns/SKILL.md +245 -0
- package/skills/healthcare-emr-patterns/SKILL.md +159 -0
- package/skills/healthcare-eval-harness/SKILL.md +207 -0
- package/skills/healthcare-phi-compliance/SKILL.md +145 -0
- package/skills/hermes-imports/SKILL.md +87 -0
- package/skills/hexagonal-architecture/SKILL.md +275 -0
- package/skills/hipaa-compliance/SKILL.md +78 -0
- package/skills/homelab-network-readiness/SKILL.md +169 -0
- package/skills/homelab-network-setup/SKILL.md +129 -0
- package/skills/homelab-pihole-dns/SKILL.md +274 -0
- package/skills/homelab-vlan-segmentation/SKILL.md +311 -0
- package/skills/homelab-wireguard-vpn/SKILL.md +305 -0
- package/skills/hookify-rules/SKILL.md +128 -0
- package/skills/inventory-demand-planning/SKILL.md +246 -0
- package/skills/investor-materials/SKILL.md +95 -0
- package/skills/investor-outreach/SKILL.md +90 -0
- package/skills/ios-icon-gen/SKILL.md +157 -0
- package/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
- package/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
- package/skills/iterative-retrieval/SKILL.md +209 -0
- package/skills/java-coding-standards/SKILL.md +382 -0
- package/skills/jira-integration/SKILL.md +292 -0
- package/skills/jpa-patterns/SKILL.md +150 -0
- package/skills/knowledge-ops/SKILL.md +153 -0
- package/skills/kotlin-coroutines-flows/SKILL.md +283 -0
- package/skills/kotlin-exposed-patterns/SKILL.md +718 -0
- package/skills/kotlin-ktor-patterns/SKILL.md +688 -0
- package/skills/kotlin-patterns/SKILL.md +710 -0
- package/skills/kotlin-testing/SKILL.md +823 -0
- package/skills/laravel-patterns/SKILL.md +414 -0
- package/skills/laravel-plugin-discovery/SKILL.md +228 -0
- package/skills/laravel-security/SKILL.md +284 -0
- package/skills/laravel-tdd/SKILL.md +282 -0
- package/skills/laravel-verification/SKILL.md +178 -0
- package/skills/lead-intelligence/SKILL.md +320 -0
- package/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
- package/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
- package/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
- package/skills/lead-intelligence/agents/signal-scorer.md +60 -0
- package/skills/liquid-glass-design/SKILL.md +279 -0
- package/skills/llm-trading-agent-security/SKILL.md +146 -0
- package/skills/logistics-exception-management/SKILL.md +221 -0
- package/skills/make-interfaces-feel-better/SKILL.md +151 -0
- package/skills/manim-video/SKILL.md +88 -0
- package/skills/manim-video/assets/network_graph_scene.py +52 -0
- package/skills/market-research/SKILL.md +74 -0
- package/skills/mcp-server-patterns/SKILL.md +68 -0
- package/skills/messages-ops/SKILL.md +103 -0
- package/skills/mle-workflow/SKILL.md +345 -0
- package/skills/motion-advanced/SKILL.md +596 -0
- package/skills/motion-foundations/SKILL.md +299 -0
- package/skills/motion-patterns/SKILL.md +435 -0
- package/skills/motion-ui/SKILL.md +574 -0
- package/skills/mysql-patterns/SKILL.md +411 -0
- package/skills/nanoclaw-repl/SKILL.md +32 -0
- package/skills/nestjs-patterns/SKILL.md +229 -0
- package/skills/netmiko-ssh-automation/SKILL.md +173 -0
- package/skills/network-bgp-diagnostics/SKILL.md +167 -0
- package/skills/network-config-validation/SKILL.md +210 -0
- package/skills/network-interface-health/SKILL.md +152 -0
- package/skills/nextjs-turbopack/SKILL.md +43 -0
- package/skills/nodejs-keccak256/SKILL.md +102 -0
- package/skills/nutrient-document-processing/SKILL.md +166 -0
- package/skills/nuxt4-patterns/SKILL.md +99 -0
- package/skills/openclaw-persona-forge/SKILL.md +288 -0
- package/skills/openclaw-persona-forge/gacha.py +224 -0
- package/skills/openclaw-persona-forge/gacha.sh +5 -0
- package/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
- package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
- package/skills/openclaw-persona-forge/references/error-handling.md +53 -0
- package/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
- package/skills/openclaw-persona-forge/references/naming-system.md +39 -0
- package/skills/openclaw-persona-forge/references/output-template.md +166 -0
- package/skills/opensource-pipeline/SKILL.md +254 -0
- package/skills/perl-patterns/SKILL.md +503 -0
- package/skills/perl-security/SKILL.md +502 -0
- package/skills/perl-testing/SKILL.md +474 -0
- package/skills/plan-orchestrate/SKILL.md +253 -0
- package/skills/plankton-code-quality/SKILL.md +236 -0
- package/skills/postgres-patterns/SKILL.md +146 -0
- package/skills/product-capability/SKILL.md +140 -0
- package/skills/product-lens/SKILL.md +91 -0
- package/skills/production-audit/SKILL.md +206 -0
- package/skills/production-scheduling/SKILL.md +237 -0
- package/skills/project-flow-ops/SKILL.md +110 -0
- package/skills/prompt-optimizer/SKILL.md +398 -0
- package/skills/python-patterns/SKILL.md +749 -0
- package/skills/python-testing/SKILL.md +815 -0
- package/skills/pytorch-patterns/SKILL.md +395 -0
- package/skills/quality-nonconformance/SKILL.md +259 -0
- package/skills/quarkus-patterns/SKILL.md +721 -0
- package/skills/quarkus-security/SKILL.md +466 -0
- package/skills/quarkus-tdd/SKILL.md +810 -0
- package/skills/quarkus-verification/SKILL.md +478 -0
- package/skills/ralphinho-rfc-pipeline/SKILL.md +66 -0
- package/skills/redis-patterns/SKILL.md +402 -0
- package/skills/regex-vs-llm-structured-text/SKILL.md +219 -0
- package/skills/remotion-video-creation/SKILL.md +43 -0
- package/skills/remotion-video-creation/rules/3d.md +86 -0
- package/skills/remotion-video-creation/rules/animations.md +29 -0
- package/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
- package/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
- package/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/skills/remotion-video-creation/rules/assets.md +78 -0
- package/skills/remotion-video-creation/rules/audio.md +172 -0
- package/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
- package/skills/remotion-video-creation/rules/can-decode.md +75 -0
- package/skills/remotion-video-creation/rules/charts.md +58 -0
- package/skills/remotion-video-creation/rules/compositions.md +146 -0
- package/skills/remotion-video-creation/rules/display-captions.md +126 -0
- package/skills/remotion-video-creation/rules/extract-frames.md +229 -0
- package/skills/remotion-video-creation/rules/fonts.md +152 -0
- package/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
- package/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
- package/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
- package/skills/remotion-video-creation/rules/gifs.md +138 -0
- package/skills/remotion-video-creation/rules/images.md +130 -0
- package/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
- package/skills/remotion-video-creation/rules/lottie.md +67 -0
- package/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
- package/skills/remotion-video-creation/rules/measuring-text.md +143 -0
- package/skills/remotion-video-creation/rules/sequencing.md +106 -0
- package/skills/remotion-video-creation/rules/tailwind.md +11 -0
- package/skills/remotion-video-creation/rules/text-animations.md +20 -0
- package/skills/remotion-video-creation/rules/timing.md +179 -0
- package/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
- package/skills/remotion-video-creation/rules/transitions.md +122 -0
- package/skills/remotion-video-creation/rules/trimming.md +52 -0
- package/skills/remotion-video-creation/rules/videos.md +171 -0
- package/skills/repo-scan/SKILL.md +78 -0
- package/skills/research-ops/SKILL.md +111 -0
- package/skills/returns-reverse-logistics/SKILL.md +239 -0
- package/skills/rules-distill/SKILL.md +263 -0
- package/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/skills/rust-patterns/SKILL.md +498 -0
- package/skills/rust-testing/SKILL.md +499 -0
- package/skills/safety-guard/SKILL.md +74 -0
- package/skills/santa-method/SKILL.md +306 -0
- package/skills/scientific-db-pubmed-database/SKILL.md +175 -0
- package/skills/scientific-db-uspto-database/SKILL.md +177 -0
- package/skills/scientific-pkg-gget/SKILL.md +166 -0
- package/skills/scientific-thinking-literature-review/SKILL.md +192 -0
- package/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
- package/skills/search-first/SKILL.md +181 -0
- package/skills/security-bounty-hunter/SKILL.md +99 -0
- package/skills/security-review/SKILL.md +502 -0
- package/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/skills/seo/SKILL.md +153 -0
- package/skills/skill-comply/SKILL.md +57 -0
- package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
- package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
- package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
- package/skills/skill-comply/prompts/classifier.md +24 -0
- package/skills/skill-comply/prompts/scenario_generator.md +62 -0
- package/skills/skill-comply/prompts/spec_generator.md +42 -0
- package/skills/skill-comply/pyproject.toml +15 -0
- package/skills/skill-comply/scripts/__init__.py +0 -0
- package/skills/skill-comply/scripts/classifier.py +85 -0
- package/skills/skill-comply/scripts/grader.py +124 -0
- package/skills/skill-comply/scripts/parser.py +107 -0
- package/skills/skill-comply/scripts/report.py +170 -0
- package/skills/skill-comply/scripts/run.py +127 -0
- package/skills/skill-comply/scripts/runner.py +186 -0
- package/skills/skill-comply/scripts/scenario_generator.py +70 -0
- package/skills/skill-comply/scripts/spec_generator.py +72 -0
- package/skills/skill-comply/scripts/utils.py +13 -0
- package/skills/skill-comply/tests/test_grader.py +197 -0
- package/skills/skill-comply/tests/test_parser.py +90 -0
- package/skills/skill-comply/tests/test_runner.py +172 -0
- package/skills/skill-scout/SKILL.md +139 -0
- package/skills/skill-stocktake/SKILL.md +193 -0
- package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/skills/social-graph-ranker/SKILL.md +153 -0
- package/skills/springboot-patterns/SKILL.md +313 -0
- package/skills/springboot-security/SKILL.md +271 -0
- package/skills/springboot-tdd/SKILL.md +157 -0
- package/skills/springboot-verification/SKILL.md +230 -0
- package/skills/strategic-compact/SKILL.md +129 -0
- package/skills/strategic-compact/suggest-compact.sh +54 -0
- package/skills/swift-actor-persistence/SKILL.md +142 -0
- package/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/skills/swift-protocol-di-testing/SKILL.md +189 -0
- package/skills/swiftui-patterns/SKILL.md +259 -0
- package/skills/tdd-workflow/SKILL.md +462 -0
- package/skills/team-builder/SKILL.md +166 -0
- package/skills/terminal-ops/SKILL.md +108 -0
- package/skills/tinystruct-patterns/SKILL.md +130 -0
- package/skills/tinystruct-patterns/references/architecture.md +77 -0
- package/skills/tinystruct-patterns/references/data-handling.md +35 -0
- package/skills/tinystruct-patterns/references/routing.md +57 -0
- package/skills/tinystruct-patterns/references/system-usage.md +74 -0
- package/skills/tinystruct-patterns/references/testing.md +59 -0
- package/skills/token-budget-advisor/SKILL.md +133 -0
- package/skills/ui-demo/SKILL.md +464 -0
- package/skills/ui-to-vue/SKILL.md +134 -0
- package/skills/unified-notifications-ops/SKILL.md +186 -0
- package/skills/verification-loop/SKILL.md +125 -0
- package/skills/video-editing/SKILL.md +309 -0
- package/skills/videodb/SKILL.md +373 -0
- package/skills/videodb/reference/api-reference.md +550 -0
- package/skills/videodb/reference/capture-reference.md +407 -0
- package/skills/videodb/reference/capture.md +101 -0
- package/skills/videodb/reference/editor.md +443 -0
- package/skills/videodb/reference/generative.md +331 -0
- package/skills/videodb/reference/rtstream-reference.md +564 -0
- package/skills/videodb/reference/rtstream.md +65 -0
- package/skills/videodb/reference/search.md +230 -0
- package/skills/videodb/reference/streaming.md +406 -0
- package/skills/videodb/reference/use-cases.md +118 -0
- package/skills/videodb/scripts/ws_listener.py +282 -0
- package/skills/visa-doc-translate/README.md +86 -0
- package/skills/visa-doc-translate/SKILL.md +117 -0
- package/skills/vite-patterns/SKILL.md +448 -0
- package/skills/windows-desktop-e2e/SKILL.md +787 -0
- package/skills/workspace-surface-audit/SKILL.md +124 -0
- package/skills/x-api/SKILL.md +233 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.2.1
|
|
4
|
+
|
|
5
|
+
- Same code as **0.2.0**. **npm never allows reusing a version** after it has been published once—even if you **unpublish** it and only **0.1.0** remains visible. The registry still blocks **`0.2.0`**; ship **`0.2.1`** (or higher) instead.
|
|
6
|
+
|
|
7
|
+
## 0.2.0
|
|
8
|
+
|
|
9
|
+
- **`skillforge route`**: CLI parity with MCP **`route_skills`** (same `build_router_and_skills` + `run_route_turn` pipeline); optional **`--project-root`**, **`--session-id`**, **`--user-id`**, **`--json-meta`**.
|
|
10
|
+
- **`app.db_paths`**: **`global_db_path`** / **`resolve_orchestrator_db`** extracted for lightweight tests and reuse.
|
|
11
|
+
- **MCP**: **`MCPServer.setup`** now uses **`build_router_and_skills`** (single router construction path with the CLI).
|
|
12
|
+
- **CI**: **`pytest`** over **`python/tests/`** (no full ML install for DB path tests); **`py_compile`** includes **`db_paths.py`** and **`route_cli.py`**.
|
|
13
|
+
|
|
14
|
+
## 0.1.0
|
|
15
|
+
|
|
16
|
+
Initial public npm release: MCP stdio server, optional HTTP API, bundled skill catalog, per-project **`.skillforge/orchestrator.db`**, **`skillforge events`**, learning loop.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our pledge
|
|
4
|
+
|
|
5
|
+
We pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
|
|
6
|
+
|
|
7
|
+
## Our standards
|
|
8
|
+
|
|
9
|
+
Examples of behavior that contributes to a positive environment:
|
|
10
|
+
|
|
11
|
+
- Demonstrating empathy and kindness toward other people
|
|
12
|
+
- Being respectful of differing opinions, viewpoints, and experiences
|
|
13
|
+
- Giving and gracefully accepting constructive feedback
|
|
14
|
+
- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
|
|
15
|
+
- Focusing on what is best for the community
|
|
16
|
+
|
|
17
|
+
Examples of unacceptable behavior:
|
|
18
|
+
|
|
19
|
+
- The use of sexualized language or imagery, and sexual attention or advances of any kind
|
|
20
|
+
- Trolling, insulting or derogatory comments, and personal or political attacks
|
|
21
|
+
- Public or private harassment
|
|
22
|
+
- Publishing others’ private information without explicit permission
|
|
23
|
+
- Other conduct which could reasonably be considered inappropriate in a professional setting
|
|
24
|
+
|
|
25
|
+
## Enforcement
|
|
26
|
+
|
|
27
|
+
Project maintainers may remove, edit, or reject comments, commits, code, and other contributions that are not aligned with this Code of Conduct, or ban temporarily or permanently any contributor for other conduct they deem inappropriate, threatening, offensive, or harmful.
|
|
28
|
+
|
|
29
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the maintainers via GitHub (issue or direct message, as offered). All complaints will be reviewed and investigated promptly and fairly.
|
|
30
|
+
|
|
31
|
+
## Attribution
|
|
32
|
+
|
|
33
|
+
This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.1,
|
|
34
|
+
available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html).
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Thanks for helping improve skillforge.
|
|
4
|
+
|
|
5
|
+
## How to contribute
|
|
6
|
+
|
|
7
|
+
1. **Fork** the repository and create a branch from `main`.
|
|
8
|
+
2. Make focused changes; match existing style in the touched files.
|
|
9
|
+
3. Run local checks before pushing:
|
|
10
|
+
```bash
|
|
11
|
+
node --check bin/cli.js && node --check lib/packs.js
|
|
12
|
+
npm test
|
|
13
|
+
```
|
|
14
|
+
4. Open a **pull request** into `main` with a clear description of the change and why.
|
|
15
|
+
|
|
16
|
+
Pull requests should pass the **CI** workflow (see [RELEASING.md](RELEASING.md)).
|
|
17
|
+
|
|
18
|
+
## Branch protection (maintainers)
|
|
19
|
+
|
|
20
|
+
For an “enterprise-style” mainline, enable in GitHub: **Settings → Branches → Add rule** for `main`:
|
|
21
|
+
|
|
22
|
+
- Require a pull request before merging
|
|
23
|
+
- Require status checks to pass before merging (add **CI** / `verify`)
|
|
24
|
+
- Optionally: require reviews, disallow force pushes
|
|
25
|
+
|
|
26
|
+
This is configured in the GitHub UI; it is not stored in this repo.
|
|
27
|
+
|
|
28
|
+
## Releases
|
|
29
|
+
|
|
30
|
+
Maintainers: follow [RELEASING.md](RELEASING.md) for version bumps, tags, **`NPM_TOKEN`**, and npm **2FA**.
|
|
31
|
+
|
|
32
|
+
## Code of conduct
|
|
33
|
+
|
|
34
|
+
Please read [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). Report problems to the maintainers.
|
|
35
|
+
|
|
36
|
+
## Security
|
|
37
|
+
|
|
38
|
+
See [SECURITY.md](SECURITY.md) for vulnerability reporting.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
# Skillforge
|
|
2
|
+
|
|
3
|
+
<p align="left">
|
|
4
|
+
<a href="https://www.npmjs.com/package/@heytherevibin/skillforge"><img src="https://img.shields.io/npm/v/@heytherevibin/skillforge?label=npm&color=blue" alt="npm version" /></a>
|
|
5
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License: MIT" /></a>
|
|
6
|
+
<a href="https://github.com/heytherevibin/skillforge/actions/workflows/ci.yml"><img src="https://github.com/heytherevibin/skillforge/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
**Skillforge** is a **skill orchestration co-tool for Claude** (and other MCP hosts). It keeps a catalog of **`SKILL.md`** skills, **routes** the few that match each task using **local embeddings** and an optional **Haiku** step, and returns their bodies for **injection into the host model**. Optional **SQLite** learning improves routing over time.
|
|
10
|
+
|
|
11
|
+
**Primary interface:** **stdio MCP** (`skillforge mcp`) — add it to Claude Desktop, Cursor, or Claude Code.
|
|
12
|
+
|
|
13
|
+
**Optional:** **headless HTTP API** (`skillforge start`) for `/chat`, `/events`, and integrations. **Real-time usage:** run **`skillforge events --watch`** in a terminal (top skills, active sessions, and live **route** / **feedback** lines from SQLite).
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Table of contents
|
|
18
|
+
|
|
19
|
+
- [Why Skillforge](#why-skillforge)
|
|
20
|
+
- [Requirements](#requirements)
|
|
21
|
+
- [Quick start](#quick-start)
|
|
22
|
+
- [Installation](#installation)
|
|
23
|
+
- [Usage](#usage)
|
|
24
|
+
- [Run modes](#run-modes)
|
|
25
|
+
- [Model Context Protocol (MCP)](#model-context-protocol-mcp)
|
|
26
|
+
- [Multi-user authentication](#multi-user-authentication)
|
|
27
|
+
- [Skills and packs](#skills-and-packs)
|
|
28
|
+
- [Routing pipeline](#routing-pipeline)
|
|
29
|
+
- [Configuration](#configuration)
|
|
30
|
+
- [HTTP API](#http-api)
|
|
31
|
+
- [Local data and operations](#local-data-and-operations)
|
|
32
|
+
- [Security considerations](#security-considerations)
|
|
33
|
+
- [Contributing and governance](#contributing-and-governance)
|
|
34
|
+
- [Releases and maintainers](#releases-and-maintainers)
|
|
35
|
+
- [License](#license)
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Why Skillforge
|
|
40
|
+
|
|
41
|
+
| Capability | Description |
|
|
42
|
+
|------------|-------------|
|
|
43
|
+
| **Focused context** | Injects only a small set of skill documents per turn instead of the full catalog. |
|
|
44
|
+
| **Hybrid routing** | Embedding shortlist plus a fast **Claude Haiku** routing step for final selection. |
|
|
45
|
+
| **Adaptation** | Re-routes when the conversation topic shifts (configurable threshold). |
|
|
46
|
+
| **Learning loop** | Optional weights from usage and explicit feedback improve routing over time. |
|
|
47
|
+
| **Observability** | **`skillforge events`**: snapshots of **usage** + **active sessions**, **`--watch`** for realtime; **`--verbose`** for route detail. No browser UI. |
|
|
48
|
+
| **Project bootstrap** | MCP tools **`materialize_project`** and **`skillforge_bootstrap`** write `.cursor/rules`, **`docs/SKILLFORGE-PRD.md`**, and a **`CLAUDE.md`** section (map **`/skillforge`** in rules to MCP tools). |
|
|
49
|
+
| **Extensibility** | Custom skills, git-based **packs**, and overrides under a single user config directory. |
|
|
50
|
+
| **Deployment flexibility** | **MCP stdio** (default story), optional **HTTP API**, dev **`skillforge chat`** harness. |
|
|
51
|
+
|
|
52
|
+
Bundled content includes **200+** curated skills (coding, security, research, frontend/backend patterns, and more). Exact counts are validated in CI.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Requirements
|
|
57
|
+
|
|
58
|
+
| Dependency | Version | Notes |
|
|
59
|
+
|------------|---------|--------|
|
|
60
|
+
| **Node.js** | **>= 18** | Required for the CLI bootstrapper. Continuous integration runs on **Node 22**. |
|
|
61
|
+
| **Python** | **>= 3.10** | Used on the host PATH for embeddings and the FastAPI orchestrator. |
|
|
62
|
+
| **Anthropic API** | — | **`ANTHROPIC_API_KEY`** is required for **HTTP**, **CLI chat**, and the **full** (Haiku) router. **MCP** can run **without** it when using **embedding-only** routing (default when the key is omitted; see [MCP](#model-context-protocol-mcp)). |
|
|
63
|
+
|
|
64
|
+
**First run:** The CLI creates **`~/.skillforge/`**, a dedicated **Python venv**, installs Python dependencies, and caches the default embedding model (typically on the order of one to two minutes once; subsequent starts are fast).
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Quick start
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
npx --yes @heytherevibin/skillforge --help
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Add Skillforge to your MCP config (see [MCP](#model-context-protocol-mcp)). No `ANTHROPIC_API_KEY` is required for **embedding-only** routing.
|
|
75
|
+
|
|
76
|
+
Optional HTTP API (e.g. for `skillforge chat`): set **`ANTHROPIC_API_KEY`**, then:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
skillforge start
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Live log (usage + routes): **`skillforge events --watch`**.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Installation
|
|
87
|
+
|
|
88
|
+
**One-shot (recommended for evaluation)**
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
npx --yes @heytherevibin/skillforge --help
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Global install**
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npm install -g @heytherevibin/skillforge
|
|
98
|
+
skillforge --help
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Package on npm: [@heytherevibin/skillforge](https://www.npmjs.com/package/@heytherevibin/skillforge).
|
|
102
|
+
Source and issues: [github.com/heytherevibin/skillforge](https://github.com/heytherevibin/skillforge).
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Usage
|
|
107
|
+
|
|
108
|
+
### Run modes
|
|
109
|
+
|
|
110
|
+
| Command | Purpose |
|
|
111
|
+
|---------|---------|
|
|
112
|
+
| `skillforge --help` | Recommended first step; **MCP** is the main integration. |
|
|
113
|
+
| `skillforge mcp` | **stdio** MCP server (Claude, Cursor, …). |
|
|
114
|
+
| `skillforge start [--port=8000]` | Optional **HTTP API** (no HTML or WebSocket UI). |
|
|
115
|
+
| `skillforge events [--watch]` | **Terminal** log: usage snapshot + routes; see **`skillforge events --help`**. |
|
|
116
|
+
| `skillforge route […]` | **Terminal** routing — same pipeline as MCP **`route_skills`** (loads embed model); see **`skillforge route --help`**. |
|
|
117
|
+
| `skillforge mcp config [--local] [--with-anthropic]` | **stdout**: JSON snippet for **`mcp.json`** (merge manually). |
|
|
118
|
+
| `skillforge chat` | Dev harness: HTTP client to **`POST /chat`** (needs **`start`** + API key). |
|
|
119
|
+
|
|
120
|
+
### Model Context Protocol (MCP)
|
|
121
|
+
|
|
122
|
+
You can run the MCP server **without** `ANTHROPIC_API_KEY`: routing uses **embeddings + shortlist only** (no Haiku call). The host still uses its own billing for the conversation.
|
|
123
|
+
|
|
124
|
+
| `SKILLFORGE_ROUTER_MODE` | `ANTHROPIC_API_KEY` | MCP routing |
|
|
125
|
+
|--------------------------|---------------------|-------------|
|
|
126
|
+
| *(unset)* — auto | omitted | Embedding-only (keyless) |
|
|
127
|
+
| *(unset)* — auto | set | Full router (Haiku) |
|
|
128
|
+
| `embedding` | either | Embedding-only |
|
|
129
|
+
| `full` | set recommended | Full router (Haiku); falls back on API errors |
|
|
130
|
+
|
|
131
|
+
Add to your MCP host configuration (paths vary by product). Example for Claude Desktop on macOS (`claude_desktop_config.json`) **without** an extra API key:
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"mcpServers": {
|
|
136
|
+
"skillforge": {
|
|
137
|
+
"command": "npx",
|
|
138
|
+
"args": ["-y", "@heytherevibin/skillforge", "mcp"]
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
With **Haiku** routing (uses your Anthropic key in the MCP process):
|
|
145
|
+
|
|
146
|
+
```json
|
|
147
|
+
{
|
|
148
|
+
"mcpServers": {
|
|
149
|
+
"skillforge": {
|
|
150
|
+
"command": "npx",
|
|
151
|
+
"args": ["-y", "@heytherevibin/skillforge", "mcp"],
|
|
152
|
+
"env": {
|
|
153
|
+
"ANTHROPIC_API_KEY": "sk-ant-..."
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**If the server shows as connected but lists “No tools”:** the MCP host only understands **JSON-RPC on stdout**. Older Skillforge builds printed setup text to **stdout**, which breaks **`tools/list`**. Update the npm package, run **`skillforge install`** once if needed, then **fully quit and reopen** Claude / Cursor. The CLI now sends banners and pip output to **stderr** only.
|
|
161
|
+
|
|
162
|
+
**MCP tools exposed**
|
|
163
|
+
|
|
164
|
+
| Tool | Purpose |
|
|
165
|
+
|------|---------|
|
|
166
|
+
| `route_skills` | Returns routed **`SKILL.md`** bodies. Pass **`project_root`** (workspace path) for per-repo SQLite under **`.skillforge/orchestrator.db`** and learning; or set env **`SKILLFORGE_PROJECT_ROOT`**. Optional **`session_id`**, **`user_id`** / **`SKILLFORGE_MCP_USER_ID`**. |
|
|
167
|
+
| `list_skills` | Catalog overview; optional **`user_id`** scopes usage stats. |
|
|
168
|
+
| `skill_feedback` | Feedback for the learning loop; optional **`user_id`**, **`session_id`** (for `/events`). |
|
|
169
|
+
| `skill_referenced` | Mark a routed skill as **used** in the reply (increments **`referenced`** + weight; optional **`user_id`**). |
|
|
170
|
+
| `disable_skill` | Toggle skills; optional **`user_id`**. |
|
|
171
|
+
| `materialize_project` | Writes **`.cursor/rules/skillforge.mdc`**, **`docs/SKILLFORGE-PRD.md`**, updates **`CLAUDE.md`** (Skillforge block). Args: **`project_root`**, **`skill_names`** from **`route_skills`**. |
|
|
172
|
+
| `skillforge_bootstrap` | **`route_skills`** + **`materialize_project`** in one call (needs **`project_root`**). |
|
|
173
|
+
|
|
174
|
+
`/skillforge` is not registered by npm installs; add a **Cursor rule** or **CLAUDE.md** instruction so the agent calls these tools when the user asks.
|
|
175
|
+
|
|
176
|
+
Route events go to **`~/.skillforge/data/orchestrator.db`**; use **`skillforge events`** or **`GET /events`** when HTTP is running.
|
|
177
|
+
|
|
178
|
+
### Multi-user authentication
|
|
179
|
+
|
|
180
|
+
Bearer tokens isolate sessions, weights, and events when enabled:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
skillforge auth add <user-id>
|
|
184
|
+
skillforge auth list
|
|
185
|
+
skillforge auth remove <user-id>
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
When any token exists, protected **HTTP API** routes require **`Authorization: Bearer <token>`**. Single-user mode applies when no tokens are configured.
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Skills and packs
|
|
193
|
+
|
|
194
|
+
**Bundled skills** ship inside the package. List them:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
skillforge skills list
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Custom skill** layout: a directory containing **`SKILL.md`** with YAML frontmatter at minimum:
|
|
201
|
+
|
|
202
|
+
```yaml
|
|
203
|
+
---
|
|
204
|
+
name: my-skill
|
|
205
|
+
description: Clear trigger conditions—used by the router.
|
|
206
|
+
---
|
|
207
|
+
# My Skill
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Register with `skillforge skills add ./my-skill` or copy the folder to **`~/.skillforge/skills/`**.
|
|
211
|
+
|
|
212
|
+
**Skill packs** are git repositories with a root **`skillforge.json`** manifest listing skill folder names. Install:
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
skillforge pack install <org/repo>
|
|
216
|
+
skillforge pack install https://example.com/repo.git
|
|
217
|
+
skillforge pack list
|
|
218
|
+
skillforge pack update <name>
|
|
219
|
+
skillforge pack remove <name>
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Routing pipeline
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
User prompt
|
|
228
|
+
→ Local embeddings (sentence-transformers)
|
|
229
|
+
→ Cosine similarity + per-user weights
|
|
230
|
+
→ Top-K candidates
|
|
231
|
+
→ Router model (Haiku) selects final active skills — *or* embedding-only mode takes top-N from candidates
|
|
232
|
+
→ Skill bodies injected; response model answers (e.g. Opus)
|
|
233
|
+
→ Usage signals update weights (optional)
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Re-route: when overlap between successive active sets falls below a configurable threshold, the pipeline selects a new set for the next turn. Events are stored in SQLite; stream them with **`skillforge events --watch`** (or **`GET /events`** when HTTP is running).
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Configuration
|
|
241
|
+
|
|
242
|
+
Environment variables (see also inline help and server defaults):
|
|
243
|
+
|
|
244
|
+
| Variable | Default | Role |
|
|
245
|
+
|----------|---------|------|
|
|
246
|
+
| `ANTHROPIC_API_KEY` | — | **Required** for HTTP/CLI chat and answer streaming; **optional** for MCP if you use embedding-only routing (default when unset). |
|
|
247
|
+
| `SKILLFORGE_ROUTER_MODE` | *(auto)* | `full` = always use Haiku for final pick (MCP: requires key for routing). `embedding` = skip Haiku; top `SKILLFORGE_MAX_ACTIVE` from shortlist. Unset = **auto**: MCP uses embedding-only when `ANTHROPIC_API_KEY` is absent, else full. HTTP: unset or `full` uses Haiku when key is present; set `embedding` to skip Haiku on the server (answer model still needs a key). |
|
|
248
|
+
| `SKILLFORGE_PORT` | `8000` | HTTP listen port. |
|
|
249
|
+
| `SKILLFORGE_EMBED_MODEL` | `all-MiniLM-L6-v2` | Embedding model id. |
|
|
250
|
+
| `SKILLFORGE_ROUTER_MODEL` | `claude-haiku-4-5-20251001` | Routing model. |
|
|
251
|
+
| `SKILLFORGE_ANSWER_MODEL` | `claude-opus-4-7` | Main response model. |
|
|
252
|
+
| `SKILLFORGE_TOP_K` | `15` | Embedding shortlist size. |
|
|
253
|
+
| `SKILLFORGE_MAX_ACTIVE` | `7` | Maximum skills injected per turn. |
|
|
254
|
+
| `SKILLFORGE_REROUTE_THRESHOLD` | `0.4` | Re-route sensitivity (Jaccard distance). |
|
|
255
|
+
| `SKILLFORGE_MCP_USER_ID` | `""` | Default logical **user id** for MCP tool calls when arguments omit `user_id` (weights, sessions, events—same SQLite namespace as HTTP `resolve_user`). |
|
|
256
|
+
| `SKILLFORGE_PROJECT_ROOT` | `""` | Default workspace root when MCP **`project_root`** is omitted: events/weights/sessions live in **`<root>/.skillforge/orchestrator.db`**. Prefer passing **`project_root`** on each tool call from the host. |
|
|
257
|
+
| `SKILLFORGE_SKILL_HOT_RELOAD` | `1` | When **`0`** / **`false`**, disable **SKILL.md** hot-reload; restart the MCP process to refresh the catalog. |
|
|
258
|
+
| `SKILLFORGE_WATCH_SKILLS_INTERVAL` | `30` | Seconds between background catalog checks when hot reload is on. **`0`**: no background polling and no MCP **`tools.listChanged`**; **`tools/list`** and **`tools/call`** still reload when files change. |
|
|
259
|
+
| `SKILLFORGE_MCP_LIST_CHANGED` | `1` | When **`0`** / **`false`**, never emit **`notifications/tools/list_changed`** (and **`listChanged`** is not advertised), even if a background interval is set. |
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## HTTP API
|
|
264
|
+
|
|
265
|
+
| Method | Path | Description |
|
|
266
|
+
|--------|------|-------------|
|
|
267
|
+
| `POST` | `/chat` | Primary chat; SSE stream. |
|
|
268
|
+
| `POST` | `/feedback` | Skill feedback for learning. |
|
|
269
|
+
| `POST` | `/skills/disable` | Enable/disable a skill flag. |
|
|
270
|
+
| `GET` | `/skills` | Catalog with stats and weights. |
|
|
271
|
+
| `GET` | `/events` | Recent routing events (`?limit=`). |
|
|
272
|
+
| `GET` | `/` | JSON service hint (use **`skillforge events --watch`** for a live terminal log). |
|
|
273
|
+
| `GET` | `/healthz` | Health metadata (`skills_loaded`, **`live_log`** hint). |
|
|
274
|
+
|
|
275
|
+
Authenticated mode applies **`Bearer`** tokens as described above. Do not expose unauthenticated instances beyond trusted networks.
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## Local data and operations
|
|
280
|
+
|
|
281
|
+
Optional **per-project** state (when **`project_root`** or **`SKILLFORGE_PROJECT_ROOT`** is set, or MCP passes **`project_root`** on tools):
|
|
282
|
+
|
|
283
|
+
```
|
|
284
|
+
<workspace>/.skillforge/
|
|
285
|
+
├── orchestrator.db # SQLite for this repo (sessions, weights, events)
|
|
286
|
+
└── last_route.json # Last route_skills snapshot (after a routed call)
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Global default when no project root:
|
|
290
|
+
|
|
291
|
+
```
|
|
292
|
+
~/.skillforge/
|
|
293
|
+
├── venv/ # Python virtual environment
|
|
294
|
+
├── data/orchestrator.db # SQLite (sessions, weights, events)
|
|
295
|
+
├── skills/ # User-added skills
|
|
296
|
+
├── packs/<hash>/ # Cloned pack repositories
|
|
297
|
+
├── packs.json # Pack registry
|
|
298
|
+
└── auth.json # Tokens (POSIX mode 0600 when used)
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
| Command | Effect |
|
|
302
|
+
|---------|--------|
|
|
303
|
+
| `skillforge events` | Prints a **usage** snapshot and recent **`route`** / **`feedback`** rows; **`--watch`**, **`--project-root`** (per-repo DB), **`--user`**, **`--verbose`** (see **`--help`**). |
|
|
304
|
+
| `skillforge reset` | Clears learning state and event history in the database. |
|
|
305
|
+
| `skillforge install` | Re-runs bootstrap (venv and dependencies). |
|
|
306
|
+
| `rm -rf ~/.skillforge` | Full removal of local state and venv. |
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## Security considerations
|
|
311
|
+
|
|
312
|
+
- Treat **`ANTHROPIC_API_KEY`** and bearer tokens as **secrets**. Prefer environment injection or secret stores, not committed files.
|
|
313
|
+
- For **internet-facing** deployments, use **TLS**, **reverse proxies**, and **mandatory** bearer authentication; assume an open HTTP port is reachable by untrusted clients.
|
|
314
|
+
- Vulnerability disclosure: see **[SECURITY.md](SECURITY.md)**.
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## Contributing and governance
|
|
319
|
+
|
|
320
|
+
- **[CONTRIBUTING.md](CONTRIBUTING.md)** — workflow, local checks, branch policy expectations.
|
|
321
|
+
- **[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)** — community standards.
|
|
322
|
+
- **[SECURITY.md](SECURITY.md)** — reporting security issues.
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## Releases and maintainers
|
|
327
|
+
|
|
328
|
+
- **Continuous integration:** `.github/workflows/ci.yml` (push and pull request to **`main`**).
|
|
329
|
+
- **Release & npm publish:** **Skillforge release** runs when you push tag **`vX.Y.Z`** and **`package.json`** **`version`** is exactly **`X.Y.Z`** (e.g. **`v0.2.1`** ↔ **`0.2.1`**). That same number is what **`npm publish`** ships. GitHub releases are titled **`Skillforge <tag>`**.
|
|
330
|
+
- **Procedure and npm tokens:** **[RELEASING.md](RELEASING.md)** (granular npm access tokens, **Bypass 2FA** for CI publish where applicable).
|
|
331
|
+
- **License:** MIT — see **[LICENSE](LICENSE)**.
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## License
|
|
336
|
+
|
|
337
|
+
MIT © see [LICENSE](LICENSE).
|
package/RELEASING.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Releasing skillforge
|
|
2
|
+
|
|
3
|
+
## CI vs Release workflows
|
|
4
|
+
|
|
5
|
+
| Workflow | File | When it runs |
|
|
6
|
+
|----------|------|----------------|
|
|
7
|
+
| **CI** | [.github/workflows/ci.yml](.github/workflows/ci.yml) | Every **push** and **pull request** to `main`; also **`workflow_dispatch`** (run manually from the Actions tab) |
|
|
8
|
+
| **Skillforge release** | [.github/workflows/release.yml](.github/workflows/release.yml) | When a **`v*`** tag is **pushed** to the repository (e.g. `v0.2.1`) |
|
|
9
|
+
|
|
10
|
+
In the GitHub UI, open **Actions** and look for **CI** and **Skillforge release** (not the older “publish to npm” name).
|
|
11
|
+
|
|
12
|
+
## Keep GitHub and npm on the same version
|
|
13
|
+
|
|
14
|
+
- **One release = one number:** The git tag (`v0.2.1`), **`package.json` `version`** (`0.2.1`), the **MCP** `serverInfo.version`, and the tarball npm serves must all use that **same** semver.
|
|
15
|
+
- **Skillforge release** fails if `vX.Y.Z` ≠ `package.json` `X.Y.Z` (see the “Verify tag matches” step in [release.yml](.github/workflows/release.yml)).
|
|
16
|
+
- **npm** will not accept a version that was ever published before (even after unpublish). If **`npm publish`** fails with “previously published”, **bump** `package.json` to a **new unused** version, commit to **`main`**, then push a **new** tag **`v` + that version** — do not reuse the blocked number.
|
|
17
|
+
|
|
18
|
+
## Verify Actions without cutting a release
|
|
19
|
+
|
|
20
|
+
1. Push any commit to `main`, or open a PR targeting `main`, and confirm the **CI** workflow turns green.
|
|
21
|
+
2. Or go to **Actions → CI → Run workflow** (requires `workflow_dispatch` on `main`) and run against `main`.
|
|
22
|
+
|
|
23
|
+
## Publish to npm and attach a GitHub Release (happy path)
|
|
24
|
+
|
|
25
|
+
You need the **`NPM_TOKEN`** repository secret.
|
|
26
|
+
|
|
27
|
+
**npm (2025+):** Legacy “classic” tokens (including the old **Automation** type) are **gone**. Use a [**granular access token**](https://docs.npmjs.com/about-access-tokens) with **read and write** permission for **`@heytherevibin`** / `@heytherevibin/skillforge`, and enable **Bypass 2FA** on that token. Without **Bypass 2FA**, `npm publish` in GitHub Actions often fails with **`EOTP`** because CI cannot enter an authenticator code.
|
|
28
|
+
|
|
29
|
+
Create one at [npm → Access Tokens](https://www.npmjs.com/settings/~/tokens) (**Generate New Token** → **Granular Access Token**). Optionally explore [**trusted publishing** (OIDC)](https://docs.npmjs.com/trusted-publishers/) later to avoid long-lived tokens.
|
|
30
|
+
|
|
31
|
+
1. On `main`, set **`version`** in `package.json` to the version you are releasing (must be **unused** on npm — e.g. `0.2.1`).
|
|
32
|
+
2. Match **MCP** `serverInfo.version` in `python/app/mcp_server.py` and add a **`CHANGELOG.md`** section for that version.
|
|
33
|
+
3. Commit and **`git push origin main`**. Wait for **CI** to pass.
|
|
34
|
+
4. Create a tag whose name is **`v` + that exact version**:
|
|
35
|
+
`git tag v0.2.1 && git push origin v0.2.1`
|
|
36
|
+
5. Open **Actions → Skillforge release**. The job will **fail the version check** if the tag does not match `package.json`.
|
|
37
|
+
6. Confirm on npm: `npm view @heytherevibin/skillforge version`
|
|
38
|
+
Confirm the **GitHub Release** exists with title **`Skillforge <tag>`** (e.g. **`Skillforge v0.2.1`**) and the `.tgz` asset.
|
|
39
|
+
|
|
40
|
+
Scoped packages require a **public** publish; the workflow already runs `npm publish --access public`.
|
|
41
|
+
|
|
42
|
+
## Resetting npm and GitHub for a clean **0.1.0** line
|
|
43
|
+
|
|
44
|
+
If older versions (e.g. **0.2.x**) were published and you want the public story to start at **0.1.0**:
|
|
45
|
+
|
|
46
|
+
1. **npm:** Run `npm view @heytherevibin/skillforge versions --json`, then `npm unpublish @heytherevibin/skillforge@<version>` per published version you want removed ([unpublish policy](https://docs.npmjs.com/unpublishing-packages-from-the-registry) may block some). If unpublish fails, use `npm deprecate` or contact npm support. You **cannot** publish **0.1.0** if that version still exists on the registry—use **0.1.1** instead if needed.
|
|
47
|
+
2. **GitHub:** Delete old **Releases**; delete remote tags, e.g. `git push origin :refs/tags/v0.2.2` (repeat for each).
|
|
48
|
+
3. Set **`package.json`** **`version`** to **`0.1.0`** on **`main`**, push, then `git tag v0.1.0 && git push origin v0.1.0`.
|
|
49
|
+
|
|
50
|
+
## Recover if a tag exists but npm was never updated
|
|
51
|
+
|
|
52
|
+
Typical causes: the tag was created before **Skillforge release** existed on `main`, the tag was only created in the GitHub UI without a matching workflow run, or **`package.json` did not match the tag**.
|
|
53
|
+
|
|
54
|
+
**Option A — reuse the same version (re-trigger Skillforge release)**
|
|
55
|
+
|
|
56
|
+
1. Ensure `.github/workflows/release.yml` on `main` is the current one and **`package.json` `version`** matches the tag (without `v`).
|
|
57
|
+
2. Delete the tag locally and on the remote, then push it again so GitHub emits a new `push` event for that tag:
|
|
58
|
+
```bash
|
|
59
|
+
git tag -d v0.1.0
|
|
60
|
+
git push origin :refs/tags/v0.1.0
|
|
61
|
+
git tag v0.1.0
|
|
62
|
+
git push origin v0.1.0
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Option B — new version (cleanest)**
|
|
66
|
+
|
|
67
|
+
1. Bump `version` in `package.json`, commit, push `main`.
|
|
68
|
+
2. Push a **new** tag: `v` + new version.
|
|
69
|
+
|
|
70
|
+
## Local sanity checks (before push)
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
node --check bin/cli.js && node --check lib/packs.js
|
|
74
|
+
npm test
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Python (syntax only):
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
for f in python/app/main.py python/app/cli.py python/app/mcp_server.py python/app/auth.py python/app/events_cli.py python/app/materialize.py python/app/db_paths.py python/app/route_cli.py; do python3 -m py_compile "$f"; done
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Troubleshooting: `EOTP` / one-time password in CI
|
|
84
|
+
|
|
85
|
+
**Symptom:** `npm error code EOTP` / “This operation requires a one-time password from your authenticator.”
|
|
86
|
+
|
|
87
|
+
**Cause:** The granular token in **`NPM_TOKEN`** does not have **Bypass 2FA** enabled (default is off), or it lacks write access to the package.
|
|
88
|
+
|
|
89
|
+
**Fix:**
|
|
90
|
+
|
|
91
|
+
1. On [npm → Access Tokens](https://www.npmjs.com/settings/~/tokens), create a **Granular Access Token** (or edit policy if npm allows): **Read and write**, scope **`@heytherevibin`**, **Bypass 2FA: on**.
|
|
92
|
+
2. Update **`NPM_TOKEN`** in GitHub → **Settings → Secrets and variables → Actions**.
|
|
93
|
+
3. Re-run the failed **Skillforge release** workflow, or delete and re-push the release tag (see “Recover if a tag exists…” above).
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Security policy
|
|
2
|
+
|
|
3
|
+
## Supported versions
|
|
4
|
+
|
|
5
|
+
Security fixes are applied to the **latest** published minor release on the `main` branch. Older tags may not receive backports; upgrade to the current release when possible.
|
|
6
|
+
|
|
7
|
+
## Reporting a vulnerability
|
|
8
|
+
|
|
9
|
+
Please **do not** open a public GitHub issue for undisclosed security vulnerabilities.
|
|
10
|
+
|
|
11
|
+
**Preferred:** use [GitHub Security Advisories](https://github.com/heytherevibin/skillforge/security/advisories/new) for this repository (if you have access).
|
|
12
|
+
|
|
13
|
+
**Alternative:** open a **private** report via GitHub **Security → Report a vulnerability** on the repository, or contact the maintainer through a channel they publish on their GitHub profile.
|
|
14
|
+
|
|
15
|
+
Include:
|
|
16
|
+
|
|
17
|
+
- Description of the issue and impact
|
|
18
|
+
- Steps to reproduce (if known)
|
|
19
|
+
- Affected version or commit (if known)
|
|
20
|
+
|
|
21
|
+
We aim to acknowledge valid reports within a few business days.
|
|
22
|
+
|
|
23
|
+
## npm and supply chain
|
|
24
|
+
|
|
25
|
+
- For **`NPM_TOKEN`** in GitHub Actions, use a [**granular access token**](https://docs.npmjs.com/about-access-tokens) with **read and write** to your scope and **Bypass 2FA** enabled, so **`npm publish`** does not return **`EOTP`**. Legacy automation/classic tokens are no longer available on npm as of 2025.
|
|
26
|
+
- Keep **2FA** enabled on the npm account that owns the `@heytherevibin` scope.
|
|
27
|
+
- Prefer pinning action versions or reviewing Dependabot PRs before merge.
|
|
28
|
+
|
|
29
|
+
## Runtime hardening
|
|
30
|
+
|
|
31
|
+
If you expose the HTTP server beyond **localhost**, treat it as internet-facing: use **bearer-token auth** (`skillforge auth …`), terminate TLS at a reverse proxy, and restrict network access appropriately. The default single-user setup assumes a trusted local environment.
|
package/STRATEGY.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Skillforge strategy (Cursor-first)
|
|
2
|
+
|
|
3
|
+
## Product intent
|
|
4
|
+
|
|
5
|
+
Skillforge is an **npm-packaged skill orchestrator**: it routes tasks to a small set of **SKILL.md** documents (embeddings + optional Haiku) and returns their bodies for agent context. **Per-project** learning and telemetry live under **`<workspace>/.skillforge/`** when **`project_root`** (or **`SKILLFORGE_PROJECT_ROOT`**) is set; otherwise the global DB under **`~/.skillforge/data/`** is used.
|
|
6
|
+
|
|
7
|
+
## Surfaces (today)
|
|
8
|
+
|
|
9
|
+
- **MCP** (`skillforge mcp`): primary — `route_skills`, `list_skills`, feedback tools, `materialize_project`, `skillforge_bootstrap`.
|
|
10
|
+
- **Terminal**: `skillforge events --watch` with optional **`--project-root`**.
|
|
11
|
+
- **HTTP** (`skillforge start`): optional; still uses the global DB in **app_state** (not per-request project root unless extended later).
|
|
12
|
+
|
|
13
|
+
## Cursor reality
|
|
14
|
+
|
|
15
|
+
Native **`/skillforge`** in editor chat is **not** registered by this npm package. The practical pattern is **Cursor rules** (e.g. materialized **`skillforge.mdc`**) instructing the agent to call MCP tools; users may *say* `/skillforge` as shorthand.
|
|
16
|
+
|
|
17
|
+
## Near-term backlog
|
|
18
|
+
|
|
19
|
+
- Shared **`orchestrate()`** API for MCP + CLI parity.
|
|
20
|
+
- HTTP: optional **`project_root`** header or body for `/chat` if needed.
|
|
21
|
+
- Tests: MCP handshake + `resolve_orchestrator_db` behavior.
|
|
22
|
+
|
|
23
|
+
## Non-goals (v1)
|
|
24
|
+
|
|
25
|
+
- Auto-scanning every AI agent installed on the host.
|
|
26
|
+
- VS Code extension (unless added as a separate track).
|