oh-my-customcodex 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +327 -0
- package/dist/cli/index.js +32054 -0
- package/dist/index.js +5469 -0
- package/package.json +89 -0
- package/templates/.claude/agents/arch-documenter.md +38 -0
- package/templates/.claude/agents/arch-speckit-agent.md +66 -0
- package/templates/.claude/agents/be-django-expert.md +47 -0
- package/templates/.claude/agents/be-express-expert.md +31 -0
- package/templates/.claude/agents/be-fastapi-expert.md +45 -0
- package/templates/.claude/agents/be-go-backend-expert.md +45 -0
- package/templates/.claude/agents/be-nestjs-expert.md +29 -0
- package/templates/.claude/agents/be-springboot-expert.md +42 -0
- package/templates/.claude/agents/db-alembic-expert.md +73 -0
- package/templates/.claude/agents/db-postgres-expert.md +38 -0
- package/templates/.claude/agents/db-redis-expert.md +38 -0
- package/templates/.claude/agents/db-supabase-expert.md +37 -0
- package/templates/.claude/agents/de-airflow-expert.md +48 -0
- package/templates/.claude/agents/de-dbt-expert.md +36 -0
- package/templates/.claude/agents/de-kafka-expert.md +83 -0
- package/templates/.claude/agents/de-pipeline-expert.md +34 -0
- package/templates/.claude/agents/de-snowflake-expert.md +38 -0
- package/templates/.claude/agents/de-spark-expert.md +38 -0
- package/templates/.claude/agents/fe-design-expert.md +120 -0
- package/templates/.claude/agents/fe-flutter-agent.md +48 -0
- package/templates/.claude/agents/fe-svelte-agent.md +33 -0
- package/templates/.claude/agents/fe-vercel-agent.md +40 -0
- package/templates/.claude/agents/fe-vuejs-agent.md +34 -0
- package/templates/.claude/agents/infra-aws-expert.md +49 -0
- package/templates/.claude/agents/infra-docker-expert.md +49 -0
- package/templates/.claude/agents/lang-golang-expert.md +46 -0
- package/templates/.claude/agents/lang-java21-expert.md +42 -0
- package/templates/.claude/agents/lang-kotlin-expert.md +45 -0
- package/templates/.claude/agents/lang-python-expert.md +45 -0
- package/templates/.claude/agents/lang-rust-expert.md +45 -0
- package/templates/.claude/agents/lang-typescript-expert.md +45 -0
- package/templates/.claude/agents/mgr-claude-code-bible.md +62 -0
- package/templates/.claude/agents/mgr-creator.md +57 -0
- package/templates/.claude/agents/mgr-gitnerd.md +50 -0
- package/templates/.claude/agents/mgr-sauron.md +163 -0
- package/templates/.claude/agents/mgr-supplier.md +39 -0
- package/templates/.claude/agents/mgr-updater.md +40 -0
- package/templates/.claude/agents/qa-engineer.md +36 -0
- package/templates/.claude/agents/qa-planner.md +78 -0
- package/templates/.claude/agents/qa-writer.md +32 -0
- package/templates/.claude/agents/sec-codeql-expert.md +56 -0
- package/templates/.claude/agents/slack-cli-expert.md +98 -0
- package/templates/.claude/agents/souls/lang-golang-expert.soul.md +21 -0
- package/templates/.claude/agents/sys-memory-keeper.md +123 -0
- package/templates/.claude/agents/sys-naggy.md +76 -0
- package/templates/.claude/agents/tool-bun-expert.md +26 -0
- package/templates/.claude/agents/tool-npm-expert.md +31 -0
- package/templates/.claude/agents/tool-optimizer.md +37 -0
- package/templates/.claude/agents/wiki-curator.md +72 -0
- package/templates/.claude/config/required-plugins.json +30 -0
- package/templates/.claude/contexts/dev.md +20 -0
- package/templates/.claude/contexts/ecomode.md +110 -0
- package/templates/.claude/contexts/index.yaml +41 -0
- package/templates/.claude/contexts/research.md +28 -0
- package/templates/.claude/contexts/review.md +23 -0
- package/templates/.claude/hooks/hooks.json +533 -0
- package/templates/.claude/hooks/scripts/adaptive-harness-scan.sh +45 -0
- package/templates/.claude/hooks/scripts/agent-start-recorder.sh +40 -0
- package/templates/.claude/hooks/scripts/agent-teams-advisor.sh +76 -0
- package/templates/.claude/hooks/scripts/audit-log.sh +64 -0
- package/templates/.claude/hooks/scripts/auto-continue-guard.sh +33 -0
- package/templates/.claude/hooks/scripts/content-hash-validator.sh +75 -0
- package/templates/.claude/hooks/scripts/context-budget-advisor.sh +107 -0
- package/templates/.claude/hooks/scripts/cost-cap-advisor.sh +71 -0
- package/templates/.claude/hooks/scripts/cwd-change-detector.sh +36 -0
- package/templates/.claude/hooks/scripts/eval-core-batch-save.sh +46 -0
- package/templates/.claude/hooks/scripts/feedback-collector.sh +92 -0
- package/templates/.claude/hooks/scripts/file-change-validator.sh +26 -0
- package/templates/.claude/hooks/scripts/git-delegation-guard.sh +57 -0
- package/templates/.claude/hooks/scripts/model-escalation-advisor.sh +106 -0
- package/templates/.claude/hooks/scripts/omcodex-auto-update.sh +4 -0
- package/templates/.claude/hooks/scripts/omcustom-auto-update.sh +177 -0
- package/templates/.claude/hooks/scripts/rtk-intercept.sh +77 -0
- package/templates/.claude/hooks/scripts/rule-deletion-guard.sh +60 -0
- package/templates/.claude/hooks/scripts/schema-validator.sh +106 -0
- package/templates/.claude/hooks/scripts/secret-filter.sh +100 -0
- package/templates/.claude/hooks/scripts/session-autofix-prompt.sh +34 -0
- package/templates/.claude/hooks/scripts/session-autofix.sh +146 -0
- package/templates/.claude/hooks/scripts/session-env-check.sh +254 -0
- package/templates/.claude/hooks/scripts/skill-extractor-analyzer.sh +49 -0
- package/templates/.claude/hooks/scripts/stage-blocker.sh +16 -0
- package/templates/.claude/hooks/scripts/stale-todo-scanner.sh +91 -0
- package/templates/.claude/hooks/scripts/stall-detection-advisor.sh +112 -0
- package/templates/.claude/hooks/scripts/stop-console-audit.sh +46 -0
- package/templates/.claude/hooks/scripts/stuck-detector.sh +199 -0
- package/templates/.claude/hooks/scripts/task-outcome-recorder.sh +119 -0
- package/templates/.claude/hooks/scripts/task-state-precompact.sh +58 -0
- package/templates/.claude/hooks/scripts/user-prompt-preprocessor.sh +32 -0
- package/templates/.claude/hooks/skill-count-reminder.sh +34 -0
- package/templates/.claude/install-hooks.sh +100 -0
- package/templates/.claude/ontology/agents.yaml +546 -0
- package/templates/.claude/ontology/graphs/agent-skill.json +102 -0
- package/templates/.claude/ontology/graphs/full-graph.json +629 -0
- package/templates/.claude/ontology/graphs/routing.json +112 -0
- package/templates/.claude/ontology/graphs/skill-rule.json +78 -0
- package/templates/.claude/ontology/rules.yaml +251 -0
- package/templates/.claude/ontology/schema.yaml +144 -0
- package/templates/.claude/ontology/skills.yaml +575 -0
- package/templates/.claude/rules/MAY-optimization.md +42 -0
- package/templates/.claude/rules/MUST-agent-design.md +340 -0
- package/templates/.claude/rules/MUST-agent-identification.md +77 -0
- package/templates/.claude/rules/MUST-agent-teams.md +293 -0
- package/templates/.claude/rules/MUST-completion-verification.md +112 -0
- package/templates/.claude/rules/MUST-continuous-improvement.md +69 -0
- package/templates/.claude/rules/MUST-enforcement-policy.md +50 -0
- package/templates/.claude/rules/MUST-intent-transparency.md +74 -0
- package/templates/.claude/rules/MUST-language-policy.md +28 -0
- package/templates/.claude/rules/MUST-orchestrator-coordination.md +399 -0
- package/templates/.claude/rules/MUST-parallel-execution.md +184 -0
- package/templates/.claude/rules/MUST-permissions.md +32 -0
- package/templates/.claude/rules/MUST-safety.md +23 -0
- package/templates/.claude/rules/MUST-sync-verification.md +145 -0
- package/templates/.claude/rules/MUST-tool-identification.md +97 -0
- package/templates/.claude/rules/SHOULD-ecomode.md +123 -0
- package/templates/.claude/rules/SHOULD-error-handling.md +33 -0
- package/templates/.claude/rules/SHOULD-hud-statusline.md +51 -0
- package/templates/.claude/rules/SHOULD-interaction.md +77 -0
- package/templates/.claude/rules/SHOULD-memory-integration.md +371 -0
- package/templates/.claude/rules/SHOULD-ontology-rag-routing.md +49 -0
- package/templates/.claude/rules/SHOULD-wiki-sync.md +73 -0
- package/templates/.claude/rules/index.yaml +141 -0
- package/templates/.claude/schemas/tool-inputs.json +62 -0
- package/templates/.claude/skills/action-validator/SKILL.md +89 -0
- package/templates/.claude/skills/adaptive-harness/SKILL.md +335 -0
- package/templates/.claude/skills/adversarial-review/SKILL.md +80 -0
- package/templates/.claude/skills/agora/SKILL.md +194 -0
- package/templates/.claude/skills/airflow-best-practices/SKILL.md +94 -0
- package/templates/.claude/skills/alembic-best-practices/SKILL.md +295 -0
- package/templates/.claude/skills/ambiguity-gate/SKILL.md +94 -0
- package/templates/.claude/skills/analysis/SKILL.md +223 -0
- package/templates/.claude/skills/audit-agents/SKILL.md +118 -0
- package/templates/.claude/skills/aws-best-practices/SKILL.md +281 -0
- package/templates/.claude/skills/claude-code-bible/SKILL.md +93 -0
- package/templates/.claude/skills/claude-code-bible/scripts/fetch-docs.js +244 -0
- package/templates/.claude/skills/claude-native/SKILL.md +215 -0
- package/templates/.claude/skills/codex-exec/SKILL.md +206 -0
- package/templates/.claude/skills/codex-exec/scripts/codex-wrapper.cjs +430 -0
- package/templates/.claude/skills/create-agent/SKILL.md +94 -0
- package/templates/.claude/skills/cve-triage/SKILL.md +91 -0
- package/templates/.claude/skills/dag-orchestration/SKILL.md +201 -0
- package/templates/.claude/skills/dbt-best-practices/SKILL.md +55 -0
- package/templates/.claude/skills/de-lead-routing/SKILL.md +230 -0
- package/templates/.claude/skills/deep-plan/SKILL.md +344 -0
- package/templates/.claude/skills/deep-verify/SKILL.md +111 -0
- package/templates/.claude/skills/dev-lead-routing/SKILL.md +161 -0
- package/templates/.claude/skills/dev-refactor/SKILL.md +234 -0
- package/templates/.claude/skills/dev-review/SKILL.md +172 -0
- package/templates/.claude/skills/django-best-practices/SKILL.md +334 -0
- package/templates/.claude/skills/docker-best-practices/SKILL.md +276 -0
- package/templates/.claude/skills/evaluator-optimizer/SKILL.md +421 -0
- package/templates/.claude/skills/fastapi-best-practices/SKILL.md +271 -0
- package/templates/.claude/skills/fix-refs/SKILL.md +109 -0
- package/templates/.claude/skills/flutter-best-practices/SKILL.md +325 -0
- package/templates/.claude/skills/gemini-exec/SKILL.md +215 -0
- package/templates/.claude/skills/gemini-exec/scripts/gemini-wrapper.cjs +485 -0
- package/templates/.claude/skills/go-backend-best-practices/SKILL.md +135 -0
- package/templates/.claude/skills/go-best-practices/SKILL.md +204 -0
- package/templates/.claude/skills/hada-scout/SKILL.md +92 -0
- package/templates/.claude/skills/harness-eval/SKILL.md +95 -0
- package/templates/.claude/skills/harness-synthesizer/SKILL.md +145 -0
- package/templates/.claude/skills/help/SKILL.md +127 -0
- package/templates/.claude/skills/idea/SKILL.md +88 -0
- package/templates/.claude/skills/impeccable-design/SKILL.md +173 -0
- package/templates/.claude/skills/intent-detection/SKILL.md +293 -0
- package/templates/.claude/skills/intent-detection/patterns/agent-triggers.yaml +438 -0
- package/templates/.claude/skills/java21-best-practices/SKILL.md +190 -0
- package/templates/.claude/skills/jinja2-prompts/SKILL.md +86 -0
- package/templates/.claude/skills/kafka-best-practices/SKILL.md +53 -0
- package/templates/.claude/skills/kotlin-best-practices/SKILL.md +257 -0
- package/templates/.claude/skills/lists/SKILL.md +80 -0
- package/templates/.claude/skills/memory-management/SKILL.md +196 -0
- package/templates/.claude/skills/memory-recall/SKILL.md +172 -0
- package/templates/.claude/skills/memory-save/SKILL.md +128 -0
- package/templates/.claude/skills/model-escalation/SKILL.md +62 -0
- package/templates/.claude/skills/monitoring-setup/SKILL.md +215 -0
- package/templates/.claude/skills/multi-model-verification/SKILL.md +130 -0
- package/templates/.claude/skills/npm-audit/SKILL.md +74 -0
- package/templates/.claude/skills/npm-publish/SKILL.md +65 -0
- package/templates/.claude/skills/npm-version/SKILL.md +104 -0
- package/templates/.claude/skills/omcodex-auto-improve/SKILL.md +136 -0
- package/templates/.claude/skills/omcodex-feedback/SKILL.md +205 -0
- package/templates/.claude/skills/omcodex-improve-report/SKILL.md +65 -0
- package/templates/.claude/skills/omcodex-loop/SKILL.md +45 -0
- package/templates/.claude/skills/omcodex-release-notes/SKILL.md +117 -0
- package/templates/.claude/skills/omcodex-takeover/SKILL.md +115 -0
- package/templates/.claude/skills/omcodex-web/SKILL.md +95 -0
- package/templates/.claude/skills/optimize-analyze/SKILL.md +57 -0
- package/templates/.claude/skills/optimize-bundle/SKILL.md +69 -0
- package/templates/.claude/skills/optimize-report/SKILL.md +76 -0
- package/templates/.claude/skills/peer-messaging/SKILL.md +59 -0
- package/templates/.claude/skills/pipeline/SKILL.md +103 -0
- package/templates/.claude/skills/pipeline-architecture-patterns/SKILL.md +84 -0
- package/templates/.claude/skills/pipeline-guards/SKILL.md +173 -0
- package/templates/.claude/skills/post-release-followup/SKILL.md +134 -0
- package/templates/.claude/skills/postgres-best-practices/SKILL.md +67 -0
- package/templates/.claude/skills/pr-auto-improve/SKILL.md +129 -0
- package/templates/.claude/skills/professor-triage/SKILL.md +321 -0
- package/templates/.claude/skills/python-best-practices/SKILL.md +223 -0
- package/templates/.claude/skills/qa-lead-routing/SKILL.md +104 -0
- package/templates/.claude/skills/react-best-practices/SKILL.md +102 -0
- package/templates/.claude/skills/reasoning-sandwich/SKILL.md +64 -0
- package/templates/.claude/skills/redis-best-practices/SKILL.md +84 -0
- package/templates/.claude/skills/release-plan/SKILL.md +207 -0
- package/templates/.claude/skills/research/SKILL.md +493 -0
- package/templates/.claude/skills/result-aggregation/SKILL.md +165 -0
- package/templates/.claude/skills/rtk-exec/SKILL.md +199 -0
- package/templates/.claude/skills/rtk-exec/scripts/rtk-wrapper.cjs +377 -0
- package/templates/.claude/skills/rust-best-practices/SKILL.md +268 -0
- package/templates/.claude/skills/sauron-watch/SKILL.md +239 -0
- package/templates/.claude/skills/scout/SKILL.md +250 -0
- package/templates/.claude/skills/sdd/SKILL.md +24 -0
- package/templates/.claude/skills/sdd-dev/SKILL.md +257 -0
- package/templates/.claude/skills/sdd-development/SKILL.md +24 -0
- package/templates/.claude/skills/secretary-routing/SKILL.md +132 -0
- package/templates/.claude/skills/skill-extractor/SKILL.md +155 -0
- package/templates/.claude/skills/skills-sh-search/SKILL.md +210 -0
- package/templates/.claude/skills/snowflake-best-practices/SKILL.md +66 -0
- package/templates/.claude/skills/spark-best-practices/SKILL.md +53 -0
- package/templates/.claude/skills/springboot-best-practices/SKILL.md +74 -0
- package/templates/.claude/skills/springboot-best-practices/examples/config-properties-example.java +22 -0
- package/templates/.claude/skills/springboot-best-practices/examples/controller-example.java +28 -0
- package/templates/.claude/skills/springboot-best-practices/examples/controller-test-example.java +33 -0
- package/templates/.claude/skills/springboot-best-practices/examples/entity-example.java +22 -0
- package/templates/.claude/skills/springboot-best-practices/examples/exception-handler-example.java +30 -0
- package/templates/.claude/skills/springboot-best-practices/examples/repository-example.java +17 -0
- package/templates/.claude/skills/springboot-best-practices/examples/repository-test-example.java +23 -0
- package/templates/.claude/skills/springboot-best-practices/examples/security-config-example.java +27 -0
- package/templates/.claude/skills/springboot-best-practices/examples/service-example.java +33 -0
- package/templates/.claude/skills/status/SKILL.md +155 -0
- package/templates/.claude/skills/structured-dev-cycle/SKILL.md +200 -0
- package/templates/.claude/skills/stuck-recovery/SKILL.md +80 -0
- package/templates/.claude/skills/supabase-postgres-best-practices/SKILL.md +100 -0
- package/templates/.claude/skills/systematic-debugging/SKILL.md +288 -0
- package/templates/.claude/skills/systematic-debugging/condition-based-waiting-example.ts +278 -0
- package/templates/.claude/skills/systematic-debugging/condition-based-waiting.md +240 -0
- package/templates/.claude/skills/systematic-debugging/defense-in-depth.md +252 -0
- package/templates/.claude/skills/systematic-debugging/find-polluter.sh +147 -0
- package/templates/.claude/skills/systematic-debugging/root-cause-tracing.md +87 -0
- package/templates/.claude/skills/task-decomposition/SKILL.md +197 -0
- package/templates/.claude/skills/typescript-best-practices/SKILL.md +322 -0
- package/templates/.claude/skills/update-docs/SKILL.md +142 -0
- package/templates/.claude/skills/update-external/SKILL.md +169 -0
- package/templates/.claude/skills/vercel-deploy/SKILL.md +75 -0
- package/templates/.claude/skills/web-design-guidelines/SKILL.md +119 -0
- package/templates/.claude/skills/wiki/SKILL.md +426 -0
- package/templates/.claude/skills/wiki-rag/SKILL.md +154 -0
- package/templates/.claude/skills/worker-reviewer-pipeline/SKILL.md +165 -0
- package/templates/.claude/skills/writing-clearly-and-concisely/SKILL.md +66 -0
- package/templates/.claude/statusline.sh +380 -0
- package/templates/.claude/uninstall-hooks.sh +52 -0
- package/templates/.github/workflows/wiki-sync.yml +132 -0
- package/templates/AGENTS.md.en +255 -0
- package/templates/AGENTS.md.ko +255 -0
- package/templates/CLAUDE.md +263 -0
- package/templates/CLAUDE.md.en +256 -0
- package/templates/CLAUDE.md.ko +256 -0
- package/templates/deprecated-files.json +10 -0
- package/templates/guides/agents-md-quality/README.md +110 -0
- package/templates/guides/airflow/README.md +47 -0
- package/templates/guides/alembic/README.md +438 -0
- package/templates/guides/aws/common-patterns.md +169 -0
- package/templates/guides/aws/index.yaml +26 -0
- package/templates/guides/aws/well-architected.md +143 -0
- package/templates/guides/cc-token-saver/README.md +97 -0
- package/templates/guides/claude-code/01-overview.md +42 -0
- package/templates/guides/claude-code/03-tools.md +107 -0
- package/templates/guides/claude-code/04-agent-skills.md +90 -0
- package/templates/guides/claude-code/05-agent-sdk.md +129 -0
- package/templates/guides/claude-code/06-mcp.md +165 -0
- package/templates/guides/claude-code/07-prompt-engineering.md +100 -0
- package/templates/guides/claude-code/08-testing.md +56 -0
- package/templates/guides/claude-code/09-guardrails.md +78 -0
- package/templates/guides/claude-code/10-monitoring.md +87 -0
- package/templates/guides/claude-code/11-sub-agents.md +159 -0
- package/templates/guides/claude-code/12-workflow-patterns.md +182 -0
- package/templates/guides/claude-code/13-cli-flags.md +151 -0
- package/templates/guides/claude-code/index.yaml +61 -0
- package/templates/guides/dbt/README.md +32 -0
- package/templates/guides/django-best-practices/README.md +476 -0
- package/templates/guides/docker/compose-best-practices.md +284 -0
- package/templates/guides/docker/dockerfile-best-practices.md +262 -0
- package/templates/guides/docker/index.yaml +26 -0
- package/templates/guides/drizzle-orm/README.md +69 -0
- package/templates/guides/elements-of-style/elements-of-style.html +2609 -0
- package/templates/guides/fastapi/best-practices.md +232 -0
- package/templates/guides/fastapi/index.yaml +21 -0
- package/templates/guides/flutter/architecture.md +141 -0
- package/templates/guides/flutter/fundamentals.md +119 -0
- package/templates/guides/flutter/index.yaml +44 -0
- package/templates/guides/flutter/performance.md +119 -0
- package/templates/guides/flutter/security.md +120 -0
- package/templates/guides/flutter/state-management.md +144 -0
- package/templates/guides/flutter/testing.md +155 -0
- package/templates/guides/git-worktree-workflow/README.md +138 -0
- package/templates/guides/go-backend/index.yaml +26 -0
- package/templates/guides/go-backend/project-layout.md +243 -0
- package/templates/guides/go-backend/uber-style.md +212 -0
- package/templates/guides/golang/concurrency.md +282 -0
- package/templates/guides/golang/effective-go.md +309 -0
- package/templates/guides/golang/error-handling.md +250 -0
- package/templates/guides/golang/index.yaml +27 -0
- package/templates/guides/hook-data-flow/README.md +135 -0
- package/templates/guides/iceberg/README.md +49 -0
- package/templates/guides/impeccable-design/color-and-contrast.md +278 -0
- package/templates/guides/impeccable-design/index.yaml +12 -0
- package/templates/guides/impeccable-design/motion-design.md +390 -0
- package/templates/guides/impeccable-design/typography.md +386 -0
- package/templates/guides/impeccable-design/ux-writing.md +400 -0
- package/templates/guides/index.yaml +265 -0
- package/templates/guides/java21/index.yaml +29 -0
- package/templates/guides/java21/java-style-guide.md +248 -0
- package/templates/guides/java21/modern-java21.md +303 -0
- package/templates/guides/kafka/README.md +32 -0
- package/templates/guides/kotlin/coding-conventions.md +247 -0
- package/templates/guides/kotlin/idioms.md +234 -0
- package/templates/guides/kotlin/index.yaml +26 -0
- package/templates/guides/multi-model-routing/README.md +101 -0
- package/templates/guides/multi-provider-exec/README.md +83 -0
- package/templates/guides/postgres/README.md +58 -0
- package/templates/guides/python/index.yaml +26 -0
- package/templates/guides/python/pep8-style-guide.md +202 -0
- package/templates/guides/python/zen-of-python.md +79 -0
- package/templates/guides/redis/README.md +50 -0
- package/templates/guides/rust/error-handling.md +262 -0
- package/templates/guides/rust/index.yaml +26 -0
- package/templates/guides/rust/ownership.md +180 -0
- package/templates/guides/skill-bundle-design/README.md +106 -0
- package/templates/guides/slack-cli/README.md +145 -0
- package/templates/guides/snowflake/README.md +32 -0
- package/templates/guides/spark/README.md +32 -0
- package/templates/guides/springboot/best-practices.md +361 -0
- package/templates/guides/springboot/index.yaml +22 -0
- package/templates/guides/supabase-postgres/README.md +32 -0
- package/templates/guides/supabase-postgres/index.yaml +19 -0
- package/templates/guides/typescript/advanced-types.md +225 -0
- package/templates/guides/typescript/index.yaml +26 -0
- package/templates/guides/typescript/type-system.md +219 -0
- package/templates/guides/web-design/accessibility.md +66 -0
- package/templates/guides/web-design/index.yaml +20 -0
- package/templates/guides/web-design/performance.md +102 -0
- package/templates/guides/web-scraping/README.md +926 -0
- package/templates/guides/web-scraping/index.yaml +19 -0
- package/templates/guides/worktree-lifecycle/README.md +104 -0
- package/templates/index.yaml +18 -0
- package/templates/manifest.json +49 -0
- package/templates/workflows/auto-dev.yaml +46 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
# Kotlin Coding Conventions
|
|
2
|
+
|
|
3
|
+
> Source: https://kotlinlang.org/docs/coding-conventions.html
|
|
4
|
+
|
|
5
|
+
## Source Code Organization
|
|
6
|
+
|
|
7
|
+
### Directory Structure
|
|
8
|
+
|
|
9
|
+
Follow package structure with common root omitted:
|
|
10
|
+
- `org.example.kotlin.network.socket` → `network/socket` subdirectory
|
|
11
|
+
|
|
12
|
+
### Source File Names
|
|
13
|
+
|
|
14
|
+
| Content | File Name |
|
|
15
|
+
|---------|-----------|
|
|
16
|
+
| Single class | `MyClass.kt` |
|
|
17
|
+
| Multiple declarations | `ProcessDeclarations.kt` |
|
|
18
|
+
| Platform-specific | `Platform.jvm.kt` |
|
|
19
|
+
|
|
20
|
+
### Class Layout
|
|
21
|
+
|
|
22
|
+
1. Property declarations and initializer blocks
|
|
23
|
+
2. Secondary constructors
|
|
24
|
+
3. Method declarations
|
|
25
|
+
4. Companion object
|
|
26
|
+
|
|
27
|
+
```kotlin
|
|
28
|
+
class MyClass(val name: String) {
|
|
29
|
+
// 1. Properties
|
|
30
|
+
private val items = mutableListOf<Item>()
|
|
31
|
+
|
|
32
|
+
init {
|
|
33
|
+
// initializer block
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// 2. Secondary constructors
|
|
37
|
+
constructor() : this("default")
|
|
38
|
+
|
|
39
|
+
// 3. Methods
|
|
40
|
+
fun doSomething() { }
|
|
41
|
+
|
|
42
|
+
// 4. Companion object
|
|
43
|
+
companion object {
|
|
44
|
+
const val TAG = "MyClass"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Naming Conventions
|
|
50
|
+
|
|
51
|
+
| Element | Style | Example |
|
|
52
|
+
|---------|-------|---------|
|
|
53
|
+
| Packages | lowercase | `org.example.project` |
|
|
54
|
+
| Classes | UpperCamelCase | `DeclarationProcessor` |
|
|
55
|
+
| Functions | lowerCamelCase | `processDeclarations()` |
|
|
56
|
+
| Properties | lowerCamelCase | `declarationCount` |
|
|
57
|
+
| Constants | UPPER_SNAKE_CASE | `MAX_COUNT` |
|
|
58
|
+
| Backing properties | underscore prefix | `_elementList` |
|
|
59
|
+
|
|
60
|
+
### Acronyms
|
|
61
|
+
|
|
62
|
+
- 2 letters: both uppercase (`IOStream`)
|
|
63
|
+
- 3+ letters: capitalize first only (`XmlFormatter`)
|
|
64
|
+
|
|
65
|
+
## Formatting
|
|
66
|
+
|
|
67
|
+
### Indentation
|
|
68
|
+
|
|
69
|
+
```kotlin
|
|
70
|
+
if (elements != null) {
|
|
71
|
+
for (element in elements) {
|
|
72
|
+
// 4 spaces indentation
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Horizontal Whitespace
|
|
78
|
+
|
|
79
|
+
```kotlin
|
|
80
|
+
// Binary operators with spaces
|
|
81
|
+
val sum = a + b
|
|
82
|
+
|
|
83
|
+
// No space around range
|
|
84
|
+
for (i in 0..n) { }
|
|
85
|
+
|
|
86
|
+
// No space around dot
|
|
87
|
+
foo.bar().filter { it > 2 }
|
|
88
|
+
|
|
89
|
+
// Space after control keywords
|
|
90
|
+
if (condition) { }
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Colons
|
|
94
|
+
|
|
95
|
+
```kotlin
|
|
96
|
+
// Type and supertype: space before
|
|
97
|
+
abstract class Foo<out T : Any> : IFoo {
|
|
98
|
+
// Declaration and type: no space before
|
|
99
|
+
abstract fun foo(a: Int): T
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Function Signatures
|
|
104
|
+
|
|
105
|
+
```kotlin
|
|
106
|
+
// Short: single line
|
|
107
|
+
fun foo(a: Int): String = a.toString()
|
|
108
|
+
|
|
109
|
+
// Long: break parameters
|
|
110
|
+
fun longMethodName(
|
|
111
|
+
argument: ArgumentType = defaultValue,
|
|
112
|
+
argument2: AnotherArgumentType,
|
|
113
|
+
): ReturnType {
|
|
114
|
+
// body
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Trailing Commas
|
|
119
|
+
|
|
120
|
+
```kotlin
|
|
121
|
+
class Person(
|
|
122
|
+
val firstName: String,
|
|
123
|
+
val lastName: String,
|
|
124
|
+
val age: Int, // trailing comma
|
|
125
|
+
)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Idiomatic Patterns
|
|
129
|
+
|
|
130
|
+
### Immutability
|
|
131
|
+
|
|
132
|
+
```kotlin
|
|
133
|
+
// Prefer val
|
|
134
|
+
val name = "Kotlin"
|
|
135
|
+
|
|
136
|
+
// Prefer immutable collections
|
|
137
|
+
val items = listOf(1, 2, 3)
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Default Parameters
|
|
141
|
+
|
|
142
|
+
```kotlin
|
|
143
|
+
// Prefer over overloads
|
|
144
|
+
fun read(
|
|
145
|
+
b: ByteArray,
|
|
146
|
+
off: Int = 0,
|
|
147
|
+
len: Int = b.size,
|
|
148
|
+
) { }
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Expression Bodies
|
|
152
|
+
|
|
153
|
+
```kotlin
|
|
154
|
+
// Prefer for simple functions
|
|
155
|
+
fun square(x: Int) = x * x
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Conditionals
|
|
159
|
+
|
|
160
|
+
```kotlin
|
|
161
|
+
// Use if for binary
|
|
162
|
+
return if (x) foo() else bar()
|
|
163
|
+
|
|
164
|
+
// Use when for multiple
|
|
165
|
+
return when (x) {
|
|
166
|
+
0 -> "zero"
|
|
167
|
+
1 -> "one"
|
|
168
|
+
else -> "many"
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Functional Operations
|
|
173
|
+
|
|
174
|
+
```kotlin
|
|
175
|
+
// Prefer
|
|
176
|
+
list.filter { it > 10 }
|
|
177
|
+
.map { it * 2 }
|
|
178
|
+
.take(5)
|
|
179
|
+
|
|
180
|
+
// Over manual loops
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Ranges
|
|
184
|
+
|
|
185
|
+
```kotlin
|
|
186
|
+
// Good: open-ended range
|
|
187
|
+
for (i in 0..<n) { }
|
|
188
|
+
|
|
189
|
+
// Avoid
|
|
190
|
+
for (i in 0..n - 1) { }
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Null Safety
|
|
194
|
+
|
|
195
|
+
```kotlin
|
|
196
|
+
// Safe call
|
|
197
|
+
val length = text?.length
|
|
198
|
+
|
|
199
|
+
// Elvis operator
|
|
200
|
+
val name = user?.name ?: "Unknown"
|
|
201
|
+
|
|
202
|
+
// Let for non-null
|
|
203
|
+
user?.let {
|
|
204
|
+
println("Hello, ${it.name}")
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Not-null assertion (use sparingly)
|
|
208
|
+
val name = user!!.name
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## Documentation
|
|
212
|
+
|
|
213
|
+
```kotlin
|
|
214
|
+
/**
|
|
215
|
+
* Returns the absolute value of the given [number].
|
|
216
|
+
*/
|
|
217
|
+
fun abs(number: Int): Int = if (number < 0) -number else number
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* A group of *members*.
|
|
221
|
+
*
|
|
222
|
+
* This class has no useful logic; it's just a documentation example.
|
|
223
|
+
*
|
|
224
|
+
* @property name the name of this group.
|
|
225
|
+
* @constructor Creates an empty group.
|
|
226
|
+
*/
|
|
227
|
+
class Group(val name: String) {
|
|
228
|
+
/**
|
|
229
|
+
* Adds a [member] to this group.
|
|
230
|
+
* @return the new size of the group.
|
|
231
|
+
*/
|
|
232
|
+
fun add(member: Member): Int { ... }
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Avoid Redundant Constructs
|
|
237
|
+
|
|
238
|
+
```kotlin
|
|
239
|
+
// Avoid explicit Unit return
|
|
240
|
+
fun foo() { } // not: fun foo(): Unit { }
|
|
241
|
+
|
|
242
|
+
// Avoid semicolons
|
|
243
|
+
val x = 1 // not: val x = 1;
|
|
244
|
+
|
|
245
|
+
// Use simple string templates
|
|
246
|
+
"$name" // not: "${name}"
|
|
247
|
+
```
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
# Kotlin Idioms
|
|
2
|
+
|
|
3
|
+
> Source: https://kotlinlang.org/docs/idioms.html
|
|
4
|
+
|
|
5
|
+
## Data Classes
|
|
6
|
+
|
|
7
|
+
```kotlin
|
|
8
|
+
data class Customer(val name: String, val email: String)
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Provides:
|
|
12
|
+
- `equals()` / `hashCode()`
|
|
13
|
+
- `toString()`: `"Customer(name=John, email=john@example.com)"`
|
|
14
|
+
- `copy()` function
|
|
15
|
+
- `componentN()` functions
|
|
16
|
+
|
|
17
|
+
## Default Parameter Values
|
|
18
|
+
|
|
19
|
+
```kotlin
|
|
20
|
+
fun foo(a: Int = 0, b: String = "") { }
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Filtering Collections
|
|
24
|
+
|
|
25
|
+
```kotlin
|
|
26
|
+
val positives = list.filter { it > 0 }
|
|
27
|
+
|
|
28
|
+
// or with explicit type
|
|
29
|
+
val positives = list.filter { x -> x > 0 }
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Checking Element Presence
|
|
33
|
+
|
|
34
|
+
```kotlin
|
|
35
|
+
if ("john@example.com" in emailsList) { }
|
|
36
|
+
if ("jane@example.com" !in emailsList) { }
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## String Interpolation
|
|
40
|
+
|
|
41
|
+
```kotlin
|
|
42
|
+
println("Name: $name")
|
|
43
|
+
println("Age: ${person.age}")
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Instance Checks
|
|
47
|
+
|
|
48
|
+
```kotlin
|
|
49
|
+
when (x) {
|
|
50
|
+
is Foo -> ...
|
|
51
|
+
is Bar -> ...
|
|
52
|
+
else -> ...
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Read-only Collections
|
|
57
|
+
|
|
58
|
+
```kotlin
|
|
59
|
+
val list = listOf("a", "b", "c")
|
|
60
|
+
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Accessing Maps
|
|
64
|
+
|
|
65
|
+
```kotlin
|
|
66
|
+
val map = mapOf("a" to 1)
|
|
67
|
+
println(map["a"]) // prints 1
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Traversing Maps
|
|
71
|
+
|
|
72
|
+
```kotlin
|
|
73
|
+
for ((k, v) in map) {
|
|
74
|
+
println("$k -> $v")
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Ranges
|
|
79
|
+
|
|
80
|
+
```kotlin
|
|
81
|
+
for (i in 1..100) { } // closed range: 1 to 100
|
|
82
|
+
for (i in 1..<100) { } // half-open: 1 to 99
|
|
83
|
+
for (i in 2..10 step 2) { }
|
|
84
|
+
for (i in 10 downTo 1) { }
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Lazy Property
|
|
88
|
+
|
|
89
|
+
```kotlin
|
|
90
|
+
val p: String by lazy {
|
|
91
|
+
// compute the string
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Extension Functions
|
|
96
|
+
|
|
97
|
+
```kotlin
|
|
98
|
+
fun String.spaceToCamelCase() { }
|
|
99
|
+
"Convert this to camelcase".spaceToCamelCase()
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Singleton
|
|
103
|
+
|
|
104
|
+
```kotlin
|
|
105
|
+
object Resource {
|
|
106
|
+
val name = "Name"
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Instantiate Abstract Class
|
|
111
|
+
|
|
112
|
+
```kotlin
|
|
113
|
+
abstract class MyAbstractClass {
|
|
114
|
+
abstract fun doSomething()
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
val myObject = object : MyAbstractClass() {
|
|
118
|
+
override fun doSomething() { }
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## if-not-null Shorthand
|
|
123
|
+
|
|
124
|
+
```kotlin
|
|
125
|
+
// Simple
|
|
126
|
+
val length = files?.size
|
|
127
|
+
|
|
128
|
+
// With else
|
|
129
|
+
val length = files?.size ?: 0
|
|
130
|
+
|
|
131
|
+
// With let
|
|
132
|
+
files?.let {
|
|
133
|
+
println(it.size)
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Return on when
|
|
138
|
+
|
|
139
|
+
```kotlin
|
|
140
|
+
fun transform(color: String): Int {
|
|
141
|
+
return when (color) {
|
|
142
|
+
"Red" -> 0
|
|
143
|
+
"Green" -> 1
|
|
144
|
+
"Blue" -> 2
|
|
145
|
+
else -> throw IllegalArgumentException("Invalid color")
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## try-catch Expression
|
|
151
|
+
|
|
152
|
+
```kotlin
|
|
153
|
+
val result = try {
|
|
154
|
+
count()
|
|
155
|
+
} catch (e: ArithmeticException) {
|
|
156
|
+
throw IllegalStateException(e)
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## if Expression
|
|
161
|
+
|
|
162
|
+
```kotlin
|
|
163
|
+
val y = if (x == 1) {
|
|
164
|
+
"one"
|
|
165
|
+
} else if (x == 2) {
|
|
166
|
+
"two"
|
|
167
|
+
} else {
|
|
168
|
+
"other"
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Builder-style Usage
|
|
173
|
+
|
|
174
|
+
```kotlin
|
|
175
|
+
fun arrayOfMinusOnes(size: Int): IntArray {
|
|
176
|
+
return IntArray(size).apply { fill(-1) }
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Single-expression Functions
|
|
181
|
+
|
|
182
|
+
```kotlin
|
|
183
|
+
fun theAnswer() = 42
|
|
184
|
+
|
|
185
|
+
// equivalent to
|
|
186
|
+
fun theAnswer(): Int {
|
|
187
|
+
return 42
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Call Multiple Methods (with)
|
|
192
|
+
|
|
193
|
+
```kotlin
|
|
194
|
+
class Turtle {
|
|
195
|
+
fun penDown()
|
|
196
|
+
fun penUp()
|
|
197
|
+
fun turn(degrees: Double)
|
|
198
|
+
fun forward(pixels: Double)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
val myTurtle = Turtle()
|
|
202
|
+
with(myTurtle) {
|
|
203
|
+
penDown()
|
|
204
|
+
for (i in 1..4) {
|
|
205
|
+
forward(100.0)
|
|
206
|
+
turn(90.0)
|
|
207
|
+
}
|
|
208
|
+
penUp()
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Configure Object (apply)
|
|
213
|
+
|
|
214
|
+
```kotlin
|
|
215
|
+
val myRectangle = Rectangle().apply {
|
|
216
|
+
length = 4
|
|
217
|
+
breadth = 5
|
|
218
|
+
color = 0xFAFAFA
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Swap Variables
|
|
223
|
+
|
|
224
|
+
```kotlin
|
|
225
|
+
var a = 1
|
|
226
|
+
var b = 2
|
|
227
|
+
a = b.also { b = a }
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## TODO: Marking Incomplete
|
|
231
|
+
|
|
232
|
+
```kotlin
|
|
233
|
+
fun calcTaxes(): BigDecimal = TODO("Waiting for feedback from accounting")
|
|
234
|
+
```
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Kotlin Guide
|
|
2
|
+
|
|
3
|
+
metadata:
|
|
4
|
+
name: kotlin
|
|
5
|
+
description: Kotlin language reference documentation
|
|
6
|
+
|
|
7
|
+
source:
|
|
8
|
+
type: external
|
|
9
|
+
origin: kotlinlang.org
|
|
10
|
+
urls:
|
|
11
|
+
- https://kotlinlang.org/docs/coding-conventions.html
|
|
12
|
+
- https://kotlinlang.org/docs/idioms.html
|
|
13
|
+
- https://developer.android.com/kotlin/style-guide
|
|
14
|
+
last_fetched: "2026-01-22"
|
|
15
|
+
|
|
16
|
+
documents:
|
|
17
|
+
- name: coding-conventions
|
|
18
|
+
path: ./coding-conventions.md
|
|
19
|
+
description: Official Kotlin coding conventions
|
|
20
|
+
|
|
21
|
+
- name: idioms
|
|
22
|
+
path: ./idioms.md
|
|
23
|
+
description: Idiomatic Kotlin patterns
|
|
24
|
+
|
|
25
|
+
used_by:
|
|
26
|
+
- lang-kotlin-expert
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Multi-Model Routing
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Role-based model selection strategy for AI agent workflows. Consolidates model routing conventions from R006 (agent design), R008 (tool identification), and agent frontmatter into a single reference.
|
|
6
|
+
|
|
7
|
+
## Model Aliases
|
|
8
|
+
|
|
9
|
+
| Alias | Full ID | Cost | Speed | Use Case |
|
|
10
|
+
|-------|---------|------|-------|----------|
|
|
11
|
+
| `haiku` | claude-haiku-4-5 | $ | Fast | Search, simple edits, file discovery |
|
|
12
|
+
| `sonnet` | claude-sonnet-4-6 | $$ | Moderate | Code generation, general tasks (default) |
|
|
13
|
+
| `opus` | claude-opus-4-6 | $$$ | Slower | Complex reasoning, architecture, planning |
|
|
14
|
+
| `opusplan` | claude-opus-4-6 + plan mode | $$$ | Slower | Architecture with approval gates |
|
|
15
|
+
|
|
16
|
+
Extended context: `[1m]` suffix enables 1M token context (e.g., `claude-opus-4-6[1m]`).
|
|
17
|
+
|
|
18
|
+
## Role-Based Routing Table
|
|
19
|
+
|
|
20
|
+
| Role | Recommended Model | Rationale |
|
|
21
|
+
|------|------------------|-----------|
|
|
22
|
+
| Code search / file discovery | haiku | Fast, cheap, sufficient for retrieval |
|
|
23
|
+
| Code review | sonnet | Needs understanding, not deep reasoning |
|
|
24
|
+
| Code generation | sonnet | Good balance of quality and speed |
|
|
25
|
+
| Bug fix (simple) | sonnet | Pattern recognition sufficient |
|
|
26
|
+
| Bug fix (complex) | opus | Needs deep reasoning across modules |
|
|
27
|
+
| Architecture design | opus / opusplan | Requires holistic thinking |
|
|
28
|
+
| Test generation | sonnet | Template-driven, moderate complexity |
|
|
29
|
+
| Documentation | sonnet | Straightforward generation |
|
|
30
|
+
| Release verification | opus | Cross-cutting validation |
|
|
31
|
+
| Orchestration | opus | Routing decisions need broad context |
|
|
32
|
+
|
|
33
|
+
## Cost-Quality Tradeoff Matrix
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
Quality ▲
|
|
37
|
+
│ ┌─────────┐
|
|
38
|
+
│ │ opus │ Complex reasoning
|
|
39
|
+
│ └────┬────┘
|
|
40
|
+
│ │
|
|
41
|
+
│ ┌────┴────┐
|
|
42
|
+
│ │ sonnet │ General purpose (default)
|
|
43
|
+
│ └────┬────┘
|
|
44
|
+
│ │
|
|
45
|
+
│ ┌────┴────┐
|
|
46
|
+
│ │ haiku │ Retrieval, simple tasks
|
|
47
|
+
│ └─────────┘
|
|
48
|
+
└──────────────────────► Cost
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## MODEL_ROUTING.md Convention
|
|
52
|
+
|
|
53
|
+
Projects can declare a `MODEL_ROUTING.md` file to override default routing:
|
|
54
|
+
|
|
55
|
+
```markdown
|
|
56
|
+
# Model Routing
|
|
57
|
+
|
|
58
|
+
| Agent Pattern | Model | Override Reason |
|
|
59
|
+
|---------------|-------|-----------------|
|
|
60
|
+
| lang-*-expert | sonnet | Default sufficient for code generation |
|
|
61
|
+
| mgr-sauron | opus | Verification requires deep analysis |
|
|
62
|
+
| Explore | haiku | Search-only, no generation needed |
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Place in project root or `.claude/` directory.
|
|
66
|
+
|
|
67
|
+
## Agent Frontmatter Integration
|
|
68
|
+
|
|
69
|
+
```yaml
|
|
70
|
+
# .claude/agents/example.md
|
|
71
|
+
name: example-agent
|
|
72
|
+
model: sonnet # Use alias from table above
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The `model` field in agent frontmatter sets the default. The Agent tool's `model` parameter overrides at spawn time.
|
|
76
|
+
|
|
77
|
+
## Escalation Pattern
|
|
78
|
+
|
|
79
|
+
When a task fails at a lower model tier, escalate:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
haiku → sonnet → opus
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Configuration in agent frontmatter:
|
|
86
|
+
```yaml
|
|
87
|
+
escalation:
|
|
88
|
+
enabled: true
|
|
89
|
+
path: haiku → sonnet → opus
|
|
90
|
+
threshold: 2 # failures before escalation advisory
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Fast Mode Interaction
|
|
94
|
+
|
|
95
|
+
Fast Mode (`/fast` toggle) uses the same model with faster output (~2.5x). It does NOT change the model — it reduces reasoning depth while maintaining the configured model tier.
|
|
96
|
+
|
|
97
|
+
## Related
|
|
98
|
+
|
|
99
|
+
- R006 — Agent design rules (model aliases, frontmatter format)
|
|
100
|
+
- R008 — Tool identification (model in agent:model format)
|
|
101
|
+
- `guides/skill-bundle-design/` — Skill architecture patterns
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Multi-Provider Exec
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Unified reference for executing prompts through external LLM providers via exec skills. Complements the [Multi-Model Routing](../multi-model-routing/README.md) guide (Claude model selection) with cross-provider execution capabilities.
|
|
6
|
+
|
|
7
|
+
Inspired by OpenHarness's provider profile switching pattern, adapted for oh-my-customcodex's skill-based architecture.
|
|
8
|
+
|
|
9
|
+
## Provider Matrix
|
|
10
|
+
|
|
11
|
+
| Provider | Skill | CLI Dependency | Model | Strengths |
|
|
12
|
+
|----------|-------|---------------|-------|-----------|
|
|
13
|
+
| OpenAI (Codex) | `codex-exec` | `codex` CLI | GPT-5.4 | Code generation, broad knowledge |
|
|
14
|
+
| Google (Gemini) | `gemini-exec` | `gemini` CLI | Gemini 2.5 Pro | Long context, multimodal |
|
|
15
|
+
| RTK (proxy) | `rtk-exec` | `rtk` CLI | Configurable | Token-optimized output, cost reduction |
|
|
16
|
+
|
|
17
|
+
## Availability Detection
|
|
18
|
+
|
|
19
|
+
The `session-env-check.sh` hook (SessionStart) auto-detects available providers:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
[SessionStart] Checking external CLI availability...
|
|
23
|
+
codex: ✓ available
|
|
24
|
+
gemini: ✗ not found
|
|
25
|
+
rtk: ✓ available
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Providers are opt-in — missing CLIs are silently skipped.
|
|
29
|
+
|
|
30
|
+
## Usage Patterns
|
|
31
|
+
|
|
32
|
+
### Direct Invocation
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
/codex-exec "Review this function for security issues"
|
|
36
|
+
/gemini-exec "Analyze this architecture diagram"
|
|
37
|
+
/rtk-exec "List files matching pattern X"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Provider Selection Guide
|
|
41
|
+
|
|
42
|
+
| Task | Recommended Provider | Rationale |
|
|
43
|
+
|------|---------------------|-----------|
|
|
44
|
+
| Second opinion on code review | codex-exec | Independent model reduces confirmation bias |
|
|
45
|
+
| Long document analysis | gemini-exec | 1M+ context window |
|
|
46
|
+
| Token-heavy batch operations | rtk-exec | Compressed output reduces context cost |
|
|
47
|
+
| Security audit cross-check | codex-exec | Different training data catches different patterns |
|
|
48
|
+
| Multi-model verification | All three | `/multi-model-verification` skill orchestrates this |
|
|
49
|
+
|
|
50
|
+
### Integration with Existing Skills
|
|
51
|
+
|
|
52
|
+
| Skill | Uses Provider | How |
|
|
53
|
+
|-------|--------------|-----|
|
|
54
|
+
| `multi-model-verification` | codex-exec + gemini-exec | Parallel verification with severity classification |
|
|
55
|
+
| `reasoning-sandwich` | Any exec skill | Pre/post reasoning with different models |
|
|
56
|
+
| `model-escalation` | Claude models only | Internal escalation (haiku→sonnet→opus), not cross-provider |
|
|
57
|
+
|
|
58
|
+
## Relationship to Multi-Model Routing
|
|
59
|
+
|
|
60
|
+
| Aspect | Multi-Model Routing | Multi-Provider Exec |
|
|
61
|
+
|--------|--------------------|--------------------|
|
|
62
|
+
| Scope | Claude model selection | Cross-provider execution |
|
|
63
|
+
| Models | haiku / sonnet / opus | GPT-5.4 / Gemini 2.5 / RTK proxy |
|
|
64
|
+
| Mechanism | `model` frontmatter field | Exec skill invocation |
|
|
65
|
+
| Use case | Cost/quality optimization within Claude | Independent verification, specialized tasks |
|
|
66
|
+
| Guide | `guides/multi-model-routing/` | `guides/multi-provider-exec/` |
|
|
67
|
+
|
|
68
|
+
## Configuration
|
|
69
|
+
|
|
70
|
+
No global configuration required. Each exec skill reads its own CLI configuration:
|
|
71
|
+
|
|
72
|
+
| Skill | Config Source |
|
|
73
|
+
|-------|-------------|
|
|
74
|
+
| codex-exec | `~/.codex/config` or CODEX_API_KEY env |
|
|
75
|
+
| gemini-exec | `~/.gemini/config` or GEMINI_API_KEY env |
|
|
76
|
+
| rtk-exec | RTK proxy running on localhost |
|
|
77
|
+
|
|
78
|
+
## Limitations
|
|
79
|
+
|
|
80
|
+
- Provider availability depends on user's CLI installations
|
|
81
|
+
- Cross-provider results are advisory — Claude remains the primary execution engine
|
|
82
|
+
- No automatic fallback between providers (by design — explicit selection preferred)
|
|
83
|
+
- Rate limits and costs are provider-specific and not tracked by oh-my-customcodex
|