agent-toolkit-cli 1.11.0__py3-none-win_amd64.whl
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.
- agent_toolkit/__init__.py +4 -0
- agent_toolkit/__main__.py +5 -0
- agent_toolkit/_paths.py +145 -0
- agent_toolkit/bin/.gitkeep +0 -0
- agent_toolkit/bin/agent-toolkit.exe +0 -0
- agent_toolkit/cli/__init__.py +0 -0
- agent_toolkit/cli/__main__.py +5 -0
- agent_toolkit/cli/build.py +278 -0
- agent_toolkit/cli/completion.py +297 -0
- agent_toolkit/cli/context_budget.py +455 -0
- agent_toolkit/cli/devcompanion.py +923 -0
- agent_toolkit/cli/devcompanion_queue.py +235 -0
- agent_toolkit/cli/diff.py +176 -0
- agent_toolkit/cli/doctor.py +1052 -0
- agent_toolkit/cli/insights.py +771 -0
- agent_toolkit/cli/install.py +706 -0
- agent_toolkit/cli/main.py +171 -0
- agent_toolkit/cli/mcp.py +537 -0
- agent_toolkit/cli/memory.py +739 -0
- agent_toolkit/cli/plugin.py +224 -0
- agent_toolkit/cli/project.py +459 -0
- agent_toolkit/cli/release.py +178 -0
- agent_toolkit/cli/skills.py +461 -0
- agent_toolkit/cli/uninstall.py +166 -0
- agent_toolkit/cli/update.py +298 -0
- agent_toolkit/cli/workspace.py +1713 -0
- agent_toolkit/compiler/hook_registry.py +110 -0
- agent_toolkit/compiler/loader.py +338 -0
- agent_toolkit/compiler/mcp_registry.py +87 -0
- agent_toolkit/compiler/model.py +182 -0
- agent_toolkit/compiler/provenance.py +140 -0
- agent_toolkit/compiler/registry_emit.py +263 -0
- agent_toolkit/compiler/target_registry.py +122 -0
- agent_toolkit/compiler/targets/__init__.py +1 -0
- agent_toolkit/compiler/targets/agent_plugins.py +160 -0
- agent_toolkit/compiler/targets/base.py +229 -0
- agent_toolkit/compiler/targets/claude_code.py +241 -0
- agent_toolkit/compiler/targets/codex.py +261 -0
- agent_toolkit/compiler/targets/copilot.py +275 -0
- agent_toolkit/compiler/targets/cursor.py +207 -0
- agent_toolkit/compiler/targets/gemini_cli.py +213 -0
- agent_toolkit/compiler/targets/muse_code.py +113 -0
- agent_toolkit/compiler/targets/opencode.py +204 -0
- agent_toolkit/compiler/targets/pi.py +263 -0
- agent_toolkit/compiler/targets/windsurf.py +267 -0
- agent_toolkit/compiler/tool_mapping.py +83 -0
- agent_toolkit/data/.gitignore +4 -0
- agent_toolkit/data/__init__.py +1 -0
- agent_toolkit/data/agents/agentic-security-reviewer/AGENT.md +60 -0
- agent_toolkit/data/agents/architect/AGENT.md +30 -0
- agent_toolkit/data/agents/assistant/AGENT.md +59 -0
- agent_toolkit/data/agents/build-error-resolver/AGENT.md +30 -0
- agent_toolkit/data/agents/client-workflow-bootstrap/AGENT.md +60 -0
- agent_toolkit/data/agents/code-reviewer/AGENT.md +49 -0
- agent_toolkit/data/agents/database-reviewer/AGENT.md +44 -0
- agent_toolkit/data/agents/docs-lookup/AGENT.md +28 -0
- agent_toolkit/data/agents/e2e-runner/AGENT.md +38 -0
- agent_toolkit/data/agents/performance-optimizer/AGENT.md +52 -0
- agent_toolkit/data/agents/planner/AGENT.md +41 -0
- agent_toolkit/data/agents/refactor-cleaner/AGENT.md +43 -0
- agent_toolkit/data/agents/reference-lookup/AGENT.md +33 -0
- agent_toolkit/data/agents/security-reviewer/AGENT.md +47 -0
- agent_toolkit/data/agents/tdd-guide/AGENT.md +58 -0
- agent_toolkit/data/agents/tech-assistant/AGENT.md +11 -0
- agent_toolkit/data/agents/typescript-reviewer/AGENT.md +61 -0
- agent_toolkit/data/capabilities/hooks/README.md +6 -0
- agent_toolkit/data/capabilities/hooks/pre-commit-validate.yaml +26 -0
- agent_toolkit/data/capabilities/hooks/scripts/pre-commit-validate.sh +41 -0
- agent_toolkit/data/capabilities/hooks/scripts/session-start-context.sh +11 -0
- agent_toolkit/data/capabilities/hooks/session-start-context.yaml +23 -0
- agent_toolkit/data/capabilities/targets/registry.yaml +90 -0
- agent_toolkit/data/capabilities/upstream.lock +118 -0
- agent_toolkit/data/catalogs/agent-catalog.yaml +81 -0
- agent_toolkit/data/catalogs/loop-catalog.yaml +55 -0
- agent_toolkit/data/catalogs/skill-catalog.yaml +520 -0
- agent_toolkit/data/catalogs/skills-layout.json +391 -0
- agent_toolkit/data/distributions/products.yaml +190 -0
- agent_toolkit/data/distributions/targets/claude-code.yaml +47 -0
- agent_toolkit/data/distributions/targets/cursor.yaml +42 -0
- agent_toolkit/data/distributions/targets/opencode.yaml +55 -0
- agent_toolkit/data/loops/changelog-drafter/loop.yaml +40 -0
- agent_toolkit/data/loops/ci-sweeper/loop.yaml +53 -0
- agent_toolkit/data/loops/daily-triage/loop.yaml +47 -0
- agent_toolkit/data/loops/dep-sweeper/loop.yaml +46 -0
- agent_toolkit/data/loops/issue-triage/loop.yaml +40 -0
- agent_toolkit/data/loops/oss-daily-briefing/loop.yaml +65 -0
- agent_toolkit/data/loops/oss-pr-monitor/loop.yaml +86 -0
- agent_toolkit/data/loops/oss-triage/loop.yaml +67 -0
- agent_toolkit/data/loops/post-merge-cleanup/loop.yaml +44 -0
- agent_toolkit/data/loops/pr-babysitter/loop.yaml +46 -0
- agent_toolkit/data/mcp/registry/chrome-devtools.yaml +61 -0
- agent_toolkit/data/mcp/registry/clickup.yaml +48 -0
- agent_toolkit/data/mcp/registry/figma.yaml +44 -0
- agent_toolkit/data/mcp/registry/github.yaml +52 -0
- agent_toolkit/data/mcp/registry/linear.yaml +47 -0
- agent_toolkit/data/mcp/registry/notion.yaml +48 -0
- agent_toolkit/data/mcp/registry/slack.yaml +46 -0
- agent_toolkit/data/mcp/templates/chrome-devtools/README.md +57 -0
- agent_toolkit/data/mcp/templates/chrome-devtools/config.template.json +6 -0
- agent_toolkit/data/mcp/templates/clickup/README.md +45 -0
- agent_toolkit/data/mcp/templates/clickup/config.template.json +8 -0
- agent_toolkit/data/mcp/templates/clickup/wrapper.sh +23 -0
- agent_toolkit/data/mcp/templates/figma/README.md +54 -0
- agent_toolkit/data/mcp/templates/figma/config.template.json +9 -0
- agent_toolkit/data/mcp/templates/github/README.md +16 -0
- agent_toolkit/data/mcp/templates/github/config.template.json +15 -0
- agent_toolkit/data/mcp/templates/github/wrapper.sh +6 -0
- agent_toolkit/data/mcp/templates/linear/README.md +49 -0
- agent_toolkit/data/mcp/templates/linear/config.template.json +10 -0
- agent_toolkit/data/mcp/templates/notion/README.md +7 -0
- agent_toolkit/data/mcp/templates/notion/config.template.json +8 -0
- agent_toolkit/data/mcp/templates/notion/wrapper.sh +23 -0
- agent_toolkit/data/mcp/templates/slack/README.md +8 -0
- agent_toolkit/data/mcp/templates/slack/config.template.json +9 -0
- agent_toolkit/data/mcp/templates/slack/wrapper.sh +23 -0
- agent_toolkit/data/packs/README.md +66 -0
- agent_toolkit/data/packs/agentic-security/README.md +19 -0
- agent_toolkit/data/packs/agentic-security/config.yaml +25 -0
- agent_toolkit/data/packs/architecture/README.md +22 -0
- agent_toolkit/data/packs/architecture/config.yaml +27 -0
- agent_toolkit/data/packs/code-quality/README.md +19 -0
- agent_toolkit/data/packs/code-quality/config.yaml +21 -0
- agent_toolkit/data/packs/delivery-discipline/README.md +19 -0
- agent_toolkit/data/packs/delivery-discipline/config.yaml +42 -0
- agent_toolkit/data/packs/design-engineering/README.md +19 -0
- agent_toolkit/data/packs/design-engineering/config.yaml +41 -0
- agent_toolkit/data/packs/engineering-workflow/README.md +21 -0
- agent_toolkit/data/packs/engineering-workflow/config.yaml +57 -0
- agent_toolkit/data/packs/oss-maintenance/README.md +245 -0
- agent_toolkit/data/packs/oss-maintenance/config.yaml +75 -0
- agent_toolkit/data/profiles/claude-code/CLAUDE.md +110 -0
- agent_toolkit/data/profiles/claude-code/agents/assistant.md +59 -0
- agent_toolkit/data/profiles/claude-code/agents/build-error-resolver.md +30 -0
- agent_toolkit/data/profiles/claude-code/agents/client-workflow-bootstrap.md +60 -0
- agent_toolkit/data/profiles/claude-code/agents/contribution-planner.md +39 -0
- agent_toolkit/data/profiles/claude-code/agents/database-reviewer.md +44 -0
- agent_toolkit/data/profiles/claude-code/agents/docs-lookup.md +28 -0
- agent_toolkit/data/profiles/claude-code/agents/e2e-runner.md +38 -0
- agent_toolkit/data/profiles/claude-code/agents/performance-optimizer.md +52 -0
- agent_toolkit/data/profiles/claude-code/agents/planner.md +41 -0
- agent_toolkit/data/profiles/claude-code/agents/refactor-cleaner.md +43 -0
- agent_toolkit/data/profiles/claude-code/agents/reference-lookup.md +33 -0
- agent_toolkit/data/profiles/claude-code/agents/security-reviewer.md +47 -0
- agent_toolkit/data/profiles/claude-code/agents/tdd-guide.md +58 -0
- agent_toolkit/data/profiles/claude-code/agents/typescript-reviewer.md +61 -0
- agent_toolkit/data/profiles/claude-code/settings.json +86 -0
- agent_toolkit/data/profiles/copilot/copilot-instructions.md +15 -0
- agent_toolkit/data/profiles/cursor/README.md +33 -0
- agent_toolkit/data/profiles/cursor/rules/architect.mdc +23 -0
- agent_toolkit/data/profiles/cursor/rules/assistant.mdc +61 -0
- agent_toolkit/data/profiles/cursor/rules/build-error-resolver.mdc +20 -0
- agent_toolkit/data/profiles/cursor/rules/code-reviewer.mdc +21 -0
- agent_toolkit/data/profiles/cursor/rules/database-reviewer.mdc +29 -0
- agent_toolkit/data/profiles/cursor/rules/docs-lookup.mdc +15 -0
- agent_toolkit/data/profiles/cursor/rules/e2e-runner.mdc +30 -0
- agent_toolkit/data/profiles/cursor/rules/performance-optimizer.mdc +27 -0
- agent_toolkit/data/profiles/cursor/rules/planner.mdc +28 -0
- agent_toolkit/data/profiles/cursor/rules/refactor-cleaner.mdc +26 -0
- agent_toolkit/data/profiles/cursor/rules/reference-lookup.mdc +20 -0
- agent_toolkit/data/profiles/cursor/rules/security-reviewer.mdc +20 -0
- agent_toolkit/data/profiles/cursor/rules/tdd-guide.mdc +26 -0
- agent_toolkit/data/profiles/cursor/rules/typescript-reviewer.mdc +28 -0
- agent_toolkit/data/profiles/muse-code/README.md +35 -0
- agent_toolkit/data/profiles/opencode/README.md +44 -0
- agent_toolkit/data/profiles/opencode/agents/architect.md +30 -0
- agent_toolkit/data/profiles/opencode/agents/assistant.md +96 -0
- agent_toolkit/data/profiles/opencode/agents/build-error-resolver.md +31 -0
- agent_toolkit/data/profiles/opencode/agents/client-workflow-bootstrap.md +66 -0
- agent_toolkit/data/profiles/opencode/agents/code-reviewer.md +47 -0
- agent_toolkit/data/profiles/opencode/agents/contribution-planner.md +44 -0
- agent_toolkit/data/profiles/opencode/agents/database-reviewer.md +43 -0
- agent_toolkit/data/profiles/opencode/agents/docs-lookup.md +28 -0
- agent_toolkit/data/profiles/opencode/agents/e2e-runner.md +33 -0
- agent_toolkit/data/profiles/opencode/agents/performance-optimizer.md +34 -0
- agent_toolkit/data/profiles/opencode/agents/planner.md +27 -0
- agent_toolkit/data/profiles/opencode/agents/refactor-cleaner.md +27 -0
- agent_toolkit/data/profiles/opencode/agents/reference-lookup.md +27 -0
- agent_toolkit/data/profiles/opencode/agents/security-reviewer.md +27 -0
- agent_toolkit/data/profiles/opencode/agents/tdd-guide.md +27 -0
- agent_toolkit/data/profiles/opencode/agents/typescript-reviewer.md +30 -0
- agent_toolkit/data/profiles/opencode/opencode.json +3 -0
- agent_toolkit/data/profiles/pi/skills/architect/skill.md +5 -0
- agent_toolkit/data/profiles/pi/skills/assistant/skill.md +3 -0
- agent_toolkit/data/profiles/pi/skills/code-reviewer/skill.md +5 -0
- agent_toolkit/data/profiles/pi/skills/planner/skill.md +3 -0
- agent_toolkit/data/profiles/pi/skills/security-reviewer/skill.md +3 -0
- agent_toolkit/data/profiles/windsurf/memories/global_rules.md +114 -0
- agent_toolkit/data/profiles/windsurf/rules/architect.mdc +23 -0
- agent_toolkit/data/profiles/windsurf/rules/assistant.mdc +61 -0
- agent_toolkit/data/profiles/windsurf/rules/build-error-resolver.mdc +20 -0
- agent_toolkit/data/profiles/windsurf/rules/code-reviewer.mdc +21 -0
- agent_toolkit/data/profiles/windsurf/rules/database-reviewer.mdc +29 -0
- agent_toolkit/data/profiles/windsurf/rules/docs-lookup.mdc +15 -0
- agent_toolkit/data/profiles/windsurf/rules/e2e-runner.mdc +30 -0
- agent_toolkit/data/profiles/windsurf/rules/performance-optimizer.mdc +27 -0
- agent_toolkit/data/profiles/windsurf/rules/planner.mdc +28 -0
- agent_toolkit/data/profiles/windsurf/rules/refactor-cleaner.mdc +26 -0
- agent_toolkit/data/profiles/windsurf/rules/reference-lookup.mdc +20 -0
- agent_toolkit/data/profiles/windsurf/rules/security-reviewer.mdc +20 -0
- agent_toolkit/data/profiles/windsurf/rules/tdd-guide.mdc +26 -0
- agent_toolkit/data/profiles/windsurf/rules/typescript-reviewer.mdc +28 -0
- agent_toolkit/data/skills/accessibility/review/SKILL.md +116 -0
- agent_toolkit/data/skills/accessibility/review/references/a11y-checklist.md +25 -0
- agent_toolkit/data/skills/accessibility/review/references/a11y-findings-template.md +56 -0
- agent_toolkit/data/skills/accessibility/review/references/research.md +47 -0
- agent_toolkit/data/skills/agentic-security/mcp-audit/SKILL.md +116 -0
- agent_toolkit/data/skills/agentic-security/mcp-audit/references/mcp-audit-template.md +51 -0
- agent_toolkit/data/skills/agentic-security/owasp-agentic-review/SKILL.md +73 -0
- agent_toolkit/data/skills/agentic-security/owasp-agentic-review/references/owasp-agentic-template.md +32 -0
- agent_toolkit/data/skills/agentic-security/supply-chain-audit/SKILL.md +142 -0
- agent_toolkit/data/skills/agentic-security/threat-modeling/SKILL.md +100 -0
- agent_toolkit/data/skills/agentic-security/threat-modeling/references/threat-model-template.md +55 -0
- agent_toolkit/data/skills/architecture/c4-model/SKILL.md +49 -0
- agent_toolkit/data/skills/cloud/aws-well-architected-review/SKILL.md +37 -0
- agent_toolkit/data/skills/cloud/cloud-design-patterns/SKILL.md +38 -0
- agent_toolkit/data/skills/core/assistant/SKILL.md +216 -0
- agent_toolkit/data/skills/core/assistant/references/AGENTS_TEMPLATE.md +0 -0
- agent_toolkit/data/skills/core/assistant/references/ORCHESTRATION.md +0 -0
- agent_toolkit/data/skills/core/assistant/references/REPO_INSPECTION.md +0 -0
- agent_toolkit/data/skills/core/dev-companion/SKILL.md +65 -0
- agent_toolkit/data/skills/core/dev-companion/references/LOOP_GUARDRAILS.md +0 -0
- agent_toolkit/data/skills/core/onboarding/SKILL.md +122 -0
- agent_toolkit/data/skills/core/output-handshake/SKILL.md +26 -0
- agent_toolkit/data/skills/core/pr-fallback/SKILL.md +35 -0
- agent_toolkit/data/skills/core/pr-fallback/references/pr-body-default.md +0 -0
- agent_toolkit/data/skills/core/project/SKILL.md +89 -0
- agent_toolkit/data/skills/core/workspace/SKILL.md +103 -0
- agent_toolkit/data/skills/core/workspace-knowledge-sync/SKILL.md +140 -0
- agent_toolkit/data/skills/data/dbt-validation/SKILL.md +41 -0
- agent_toolkit/data/skills/data/snowflake-validation/SKILL.md +38 -0
- agent_toolkit/data/skills/delivery/adr/SKILL.md +56 -0
- agent_toolkit/data/skills/delivery/adr/references/default-template.md +35 -0
- agent_toolkit/data/skills/delivery/adr/references/example-001-graphql-adoption.md +66 -0
- agent_toolkit/data/skills/delivery/agreement/SKILL.md +24 -0
- agent_toolkit/data/skills/delivery/agreement/references/default-template.md +17 -0
- agent_toolkit/data/skills/delivery/agreement/references/example-api-versioning.md +29 -0
- agent_toolkit/data/skills/delivery/bug/SKILL.md +26 -0
- agent_toolkit/data/skills/delivery/bug/references/default-template.md +26 -0
- agent_toolkit/data/skills/delivery/bug/references/example-search-filter-bug.md +58 -0
- agent_toolkit/data/skills/delivery/decision-log/SKILL.md +28 -0
- agent_toolkit/data/skills/delivery/decision-log/references/default-template.md +17 -0
- agent_toolkit/data/skills/delivery/decision-log/references/example-repository-pattern.md +27 -0
- agent_toolkit/data/skills/delivery/development-workflow/SKILL.md +34 -0
- agent_toolkit/data/skills/delivery/development-workflow/references/default-workflow-checklist.md +44 -0
- agent_toolkit/data/skills/delivery/epic/SKILL.md +22 -0
- agent_toolkit/data/skills/delivery/epic/references/default-template.md +26 -0
- agent_toolkit/data/skills/delivery/epic/references/example-unified-dashboard.md +40 -0
- agent_toolkit/data/skills/delivery/incident/SKILL.md +24 -0
- agent_toolkit/data/skills/delivery/incident/references/default-template.md +29 -0
- agent_toolkit/data/skills/delivery/incident/references/example-payment-outage.md +62 -0
- agent_toolkit/data/skills/delivery/management-unit-assessment/SKILL.md +104 -0
- agent_toolkit/data/skills/delivery/management-unit-assessment/references/default-template.md +24 -0
- agent_toolkit/data/skills/delivery/management-unit-assessment/references/example-team-assessment.md +126 -0
- agent_toolkit/data/skills/delivery/meeting-minutes/SKILL.md +25 -0
- agent_toolkit/data/skills/delivery/meeting-minutes/references/default-template.md +22 -0
- agent_toolkit/data/skills/delivery/meeting-minutes/references/example-weekly-sync.md +72 -0
- agent_toolkit/data/skills/delivery/planning/SKILL.md +31 -0
- agent_toolkit/data/skills/delivery/planning/references/default-template.md +25 -0
- agent_toolkit/data/skills/delivery/planning/references/example-sprint-planning.md +62 -0
- agent_toolkit/data/skills/delivery/prd/SKILL.md +46 -0
- agent_toolkit/data/skills/delivery/prd/references/default-template.md +31 -0
- agent_toolkit/data/skills/delivery/prd/references/example-unified-api.md +71 -0
- agent_toolkit/data/skills/delivery/project-assessment/SKILL.md +90 -0
- agent_toolkit/data/skills/delivery/project-assessment/references/default-template.md +26 -0
- agent_toolkit/data/skills/delivery/project-assessment/references/example-platform-assessment.md +122 -0
- agent_toolkit/data/skills/delivery/project-assessment-evidence/SKILL.md +88 -0
- agent_toolkit/data/skills/delivery/project-assessment-evidence/references/default-template.md +24 -0
- agent_toolkit/data/skills/delivery/project-assessment-evidence/references/example-evidence-map.md +46 -0
- agent_toolkit/data/skills/delivery/spike/SKILL.md +24 -0
- agent_toolkit/data/skills/delivery/spike/references/default-template.md +29 -0
- agent_toolkit/data/skills/delivery/spike/references/example-graphql-federation.md +79 -0
- agent_toolkit/data/skills/delivery/task/SKILL.md +21 -0
- agent_toolkit/data/skills/delivery/task/references/default-template.md +21 -0
- agent_toolkit/data/skills/delivery/task/references/example-nav-system.md +33 -0
- agent_toolkit/data/skills/delivery/technical-unit-assessment/SKILL.md +58 -0
- agent_toolkit/data/skills/delivery/technical-unit-assessment/references/default-template.md +26 -0
- agent_toolkit/data/skills/delivery/technical-unit-assessment/references/example-frontend-assessment.md +112 -0
- agent_toolkit/data/skills/delivery/technical-unit-assessment/references/indicator-groups.md +65 -0
- agent_toolkit/data/skills/delivery/trd/SKILL.md +49 -0
- agent_toolkit/data/skills/delivery/trd/references/default-template.md +31 -0
- agent_toolkit/data/skills/delivery/trd/references/example-api-migration.md +122 -0
- agent_toolkit/data/skills/delivery/user-story/SKILL.md +21 -0
- agent_toolkit/data/skills/delivery/user-story/references/default-template.md +21 -0
- agent_toolkit/data/skills/delivery/user-story/references/example-advanced-filtering.md +37 -0
- agent_toolkit/data/skills/delivery/work-item/SKILL.md +31 -0
- agent_toolkit/data/skills/delivery/work-item/references/default-template.md +21 -0
- agent_toolkit/data/skills/delivery/work-item/references/example-routing-dashboard.md +23 -0
- agent_toolkit/data/skills/delivery/workflow-client-bootstrap/SKILL.md +148 -0
- agent_toolkit/data/skills/delivery/workflow-client-bootstrap/questions.yaml +165 -0
- agent_toolkit/data/skills/delivery/workflow-generic-project/SKILL.md +79 -0
- agent_toolkit/data/skills/design/design-assessment/SKILL.md +150 -0
- agent_toolkit/data/skills/design/design-assessment/references/design-scorecard-template.md +78 -0
- agent_toolkit/data/skills/design/design-improvement/SKILL.md +167 -0
- agent_toolkit/data/skills/design/design-improvement/references/improvement-plan-template.md +113 -0
- agent_toolkit/data/skills/design/figma/LICENSE.txt +2 -0
- agent_toolkit/data/skills/design/figma/NOTICE.txt +25 -0
- agent_toolkit/data/skills/design/figma/SKILL.md +98 -0
- agent_toolkit/data/skills/design/figma/references/figma-mcp-config.md +82 -0
- agent_toolkit/data/skills/design/figma/references/figma-tools-and-prompts.md +34 -0
- agent_toolkit/data/skills/design/figma-code-connect-components/LICENSE.txt +2 -0
- agent_toolkit/data/skills/design/figma-code-connect-components/NOTICE.txt +18 -0
- agent_toolkit/data/skills/design/figma-code-connect-components/SKILL.md +354 -0
- agent_toolkit/data/skills/design/figma-code-connect-components/references/mapping-checklist.md +7 -0
- agent_toolkit/data/skills/design/figma-code-connect-components/scripts/normalize_node_id.py +25 -0
- agent_toolkit/data/skills/design/figma-create-design-system-rules/LICENSE.txt +2 -0
- agent_toolkit/data/skills/design/figma-create-design-system-rules/NOTICE.txt +19 -0
- agent_toolkit/data/skills/design/figma-create-design-system-rules/SKILL.md +554 -0
- agent_toolkit/data/skills/design/figma-create-design-system-rules/references/rule-template.md +15 -0
- agent_toolkit/data/skills/design/figma-create-design-system-rules/scripts/check_agents_md.sh +9 -0
- agent_toolkit/data/skills/design/figma-create-new-file/LICENSE.txt +2 -0
- agent_toolkit/data/skills/design/figma-create-new-file/NOTICE.txt +17 -0
- agent_toolkit/data/skills/design/figma-create-new-file/SKILL.md +72 -0
- agent_toolkit/data/skills/design/figma-implement-design/LICENSE.txt +2 -0
- agent_toolkit/data/skills/design/figma-implement-design/NOTICE.txt +19 -0
- agent_toolkit/data/skills/design/figma-implement-design/SKILL.md +268 -0
- agent_toolkit/data/skills/design/frontend-design/LICENSE.txt +177 -0
- agent_toolkit/data/skills/design/frontend-design/SKILL.md +82 -0
- agent_toolkit/data/skills/design/frontend-design/UPSTREAM.md +14 -0
- agent_toolkit/data/skills/design/frontend-design-review/LICENSE +21 -0
- agent_toolkit/data/skills/design/frontend-design-review/SKILL.md +194 -0
- agent_toolkit/data/skills/design/frontend-design-review/references/pattern-examples.md +21 -0
- agent_toolkit/data/skills/design/frontend-design-review/references/quick-checklist.md +38 -0
- agent_toolkit/data/skills/design/frontend-design-review/references/review-output-format.md +68 -0
- agent_toolkit/data/skills/design/frontend-design-review/references/review-type-modifiers.md +31 -0
- agent_toolkit/data/skills/design/web-design-guidelines/SKILL.md +78 -0
- agent_toolkit/data/skills/design/web-design-guidelines/references/LICENSE +21 -0
- agent_toolkit/data/skills/design/web-design-guidelines/references/web-interface-guidelines.md +180 -0
- agent_toolkit/data/skills/forge/gh-address-comments/LICENSE.txt +202 -0
- agent_toolkit/data/skills/forge/gh-address-comments/NOTICE.txt +20 -0
- agent_toolkit/data/skills/forge/gh-address-comments/SKILL.md +72 -0
- agent_toolkit/data/skills/forge/gh-address-comments/scripts/fetch_comments.py +239 -0
- agent_toolkit/data/skills/forge/gh-contribution-planner/SKILL.md +160 -0
- agent_toolkit/data/skills/forge/gh-contribution-planner/scripts/inspect_contributions.py +818 -0
- agent_toolkit/data/skills/forge/gh-fix-ci/LICENSE.txt +201 -0
- agent_toolkit/data/skills/forge/gh-fix-ci/NOTICE.txt +20 -0
- agent_toolkit/data/skills/forge/gh-fix-ci/SKILL.md +74 -0
- agent_toolkit/data/skills/forge/gh-fix-ci/scripts/inspect_pr_checks.py +509 -0
- agent_toolkit/data/skills/forge/github-cli-workflow/SKILL.md +49 -0
- agent_toolkit/data/skills/forge/gitlab-cli-workflow/SKILL.md +44 -0
- agent_toolkit/data/skills/forge/workflow-client-bootstrap/SKILL.md +14 -0
- agent_toolkit/data/skills/forge/workflow-generic-project/SKILL.md +14 -0
- agent_toolkit/data/skills/forge/worktree/SKILL.md +113 -0
- agent_toolkit/data/skills/integrations/clickup-cli/SKILL.md +78 -0
- agent_toolkit/data/skills/integrations/clickup-cli/references/docs-management.md +57 -0
- agent_toolkit/data/skills/integrations/clickup-cli/references/task-management.md +131 -0
- agent_toolkit/data/skills/integrations/clickup-cli/references/time-tracking.md +38 -0
- agent_toolkit/data/skills/integrations/linear/LICENSE.txt +202 -0
- agent_toolkit/data/skills/integrations/linear/NOTICE.txt +23 -0
- agent_toolkit/data/skills/integrations/linear/SKILL.md +134 -0
- agent_toolkit/data/skills/integrations/mcp/SKILL.md +88 -0
- agent_toolkit/data/skills/integrations/slack-assistant/SKILL.md +138 -0
- agent_toolkit/data/skills/integrations/slack-cli/SKILL.md +109 -0
- agent_toolkit/data/skills/integrations/slack-cli/references/INSTALLATION.md +42 -0
- agent_toolkit/data/skills/loops/loop-runner/SKILL.md +92 -0
- agent_toolkit/data/skills/ops/docs-generator/SKILL.md +120 -0
- agent_toolkit/data/skills/ops/llm-cost-advisor/SKILL.md +87 -0
- agent_toolkit/data/skills/ops/swarm/SKILL.md +108 -0
- agent_toolkit/data/skills/ops/swarm-handoff/SKILL.md +112 -0
- agent_toolkit/data/skills/ops/swarm-observer/SKILL.md +102 -0
- agent_toolkit/data/skills/ops/triage/SKILL.md +119 -0
- agent_toolkit/data/skills/quality/codeql/SKILL.md +106 -0
- agent_toolkit/data/skills/quality/codeql/references/codeql-queries.md +43 -0
- agent_toolkit/data/skills/quality/megalinter/SKILL.md +162 -0
- agent_toolkit/data/skills/quality/megalinter/references/megalinter-images.md +36 -0
- agent_toolkit/data/skills/quality/megalinter/references/megalinter-license.md +41 -0
- agent_toolkit/data/skills/quality/megalinter/references/megalinter-targets.md +66 -0
- agent_toolkit/data/skills/tooling/chrome-devtools/SKILL.md +146 -0
- agent_toolkit/data/skills/tooling/herdr/SKILL.md +109 -0
- agent_toolkit/data/skills/tooling/inventory/SKILL.md +81 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/LICENSE.txt +201 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/NOTICE.txt +27 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/SKILL.md +145 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/assets/experiment-template.ipynb +117 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/assets/tutorial-template.ipynb +115 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/references/experiment-patterns.md +10 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/references/notebook-structure.md +17 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/references/quality-checklist.md +11 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/references/tutorial-patterns.md +9 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/scripts/new_notebook.py +132 -0
- agent_toolkit/data/skills/tooling/mermaid/SKILL.md +36 -0
- agent_toolkit/data/skills/tooling/playwright-cli/LICENSE.txt +201 -0
- agent_toolkit/data/skills/tooling/playwright-cli/NOTICE.txt +29 -0
- agent_toolkit/data/skills/tooling/playwright-cli/SKILL.md +154 -0
- agent_toolkit/data/skills/tooling/playwright-cli/references/cli.md +116 -0
- agent_toolkit/data/skills/tooling/playwright-cli/references/workflows.md +98 -0
- agent_toolkit/data/skills/tooling/playwright-cli/scripts/executable_playwright_cli.sh +25 -0
- agent_toolkit/data_cache.py +79 -0
- agent_toolkit/data_sync.py +144 -0
- agent_toolkit/installer/__init__.py +0 -0
- agent_toolkit/installer/merge.py +59 -0
- agent_toolkit/installer/receipt.py +89 -0
- agent_toolkit/installer/sources.py +92 -0
- agent_toolkit/installer/tracking.py +63 -0
- agent_toolkit/launcher.py +69 -0
- agent_toolkit/loop/__init__.py +0 -0
- agent_toolkit/loop/budget.py +107 -0
- agent_toolkit/loop/gh_gate.py +923 -0
- agent_toolkit/loop/loop-gh-gate +923 -0
- agent_toolkit/loop/pack.py +65 -0
- agent_toolkit/loop/runner.py +2722 -0
- agent_toolkit/runner/__init__.py +0 -0
- agent_toolkit/runner/dispatcher.py +163 -0
- agent_toolkit/runner/policy.py +356 -0
- agent_toolkit/runner/providers/__init__.py +21 -0
- agent_toolkit/runner/providers/anthropic_provider.py +109 -0
- agent_toolkit/runner/providers/base.py +53 -0
- agent_toolkit/runner/providers/ollama_provider.py +108 -0
- agent_toolkit/runner/providers/openai_provider.py +103 -0
- agent_toolkit/runner/providers/opencode_provider.py +127 -0
- agent_toolkit/swarm/__init__.py +5 -0
- agent_toolkit/swarm/approvals.py +121 -0
- agent_toolkit/swarm/backends/__init__.py +596 -0
- agent_toolkit/swarm/budget.py +83 -0
- agent_toolkit/swarm/cli.py +2448 -0
- agent_toolkit/swarm/config.py +351 -0
- agent_toolkit/swarm/handoff.py +174 -0
- agent_toolkit/swarm/models.py +230 -0
- agent_toolkit/swarm/prompts.py +177 -0
- agent_toolkit/swarm/recipes.py +304 -0
- agent_toolkit/swarm/runner.py +267 -0
- agent_toolkit/swarm/state.py +93 -0
- agent_toolkit/swarm/store.py +148 -0
- agent_toolkit/swarm/worktree.py +105 -0
- agent_toolkit/templates/workspace/.gitignore +19 -0
- agent_toolkit/templates/workspace/AGENTS.md +82 -0
- agent_toolkit/templates/workspace/knowledge/README.md +22 -0
- agent_toolkit/templates/workspace/knowledge/learnings/general.md +3 -0
- agent_toolkit/templates/workspace/knowledge/todos/pending.md +7 -0
- agent_toolkit/templates/workspace/packs/README.md +24 -0
- agent_toolkit/templates/workspace/personas/architect.md +12 -0
- agent_toolkit/templates/workspace/personas/implementer.md +12 -0
- agent_toolkit/templates/workspace/personas/researcher.md +12 -0
- agent_toolkit/templates/workspace/personas/reviewer.md +12 -0
- agent_toolkit_cli-1.11.0.dist-info/METADATA +363 -0
- agent_toolkit_cli-1.11.0.dist-info/RECORD +438 -0
- agent_toolkit_cli-1.11.0.dist-info/WHEEL +4 -0
- agent_toolkit_cli-1.11.0.dist-info/entry_points.txt +4 -0
- agent_toolkit_cli-1.11.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Windsurf / Devin Desktop target adapter.
|
|
3
|
+
|
|
4
|
+
Windsurf (and Devin Desktop, which uses the same distribution surface) does NOT
|
|
5
|
+
have a plugin marketplace. From research (2026-08-04):
|
|
6
|
+
|
|
7
|
+
"You cannot install extensions through any marketplace on Devin Desktop."
|
|
8
|
+
|
|
9
|
+
This adapter generates a **customization bundle** — a set of static files that
|
|
10
|
+
are placed into a project repository and discovered by Windsurf / Devin Desktop
|
|
11
|
+
at startup. There is no formal Windsurf extension format.
|
|
12
|
+
|
|
13
|
+
Generated artifacts:
|
|
14
|
+
AGENTS.md — directory-scoped instructions (picked up automatically)
|
|
15
|
+
rules/<name>.mdc — behavioral constraints (always-on, NOT memories)
|
|
16
|
+
skills/<name>/SKILL.md — on-demand procedures
|
|
17
|
+
|
|
18
|
+
NOT generated:
|
|
19
|
+
Memories — NOT generated. Memories are personal/per-user state and must not
|
|
20
|
+
be distributed as a project-level source of truth. Windsurf memories
|
|
21
|
+
live in the user's profile, not in a shared repository artifact.
|
|
22
|
+
Plugin manifest — no marketplace means no manifest format to target.
|
|
23
|
+
|
|
24
|
+
Semantic distinctions preserved (from ADR-002):
|
|
25
|
+
Rules = behavioral constraints (always-on in session context)
|
|
26
|
+
Skills = on-demand procedures with supporting resources
|
|
27
|
+
Memories = personal state — deliberately NOT generated by this adapter
|
|
28
|
+
|
|
29
|
+
Unsupported:
|
|
30
|
+
Lifecycle hooks — no official Windsurf extension format for hooks
|
|
31
|
+
MCP configuration — no official Windsurf MCP configuration format
|
|
32
|
+
|
|
33
|
+
Default scope: project (never global by auto-detection). Windsurf picks up
|
|
34
|
+
AGENTS.md and rules/ from the project root when the workspace is opened.
|
|
35
|
+
|
|
36
|
+
Research: docs/research/platform-capability-matrix.md (2026-08-04)
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
from __future__ import annotations
|
|
40
|
+
|
|
41
|
+
from pathlib import Path
|
|
42
|
+
|
|
43
|
+
from agent_toolkit.compiler.model import (
|
|
44
|
+
Agent,
|
|
45
|
+
CanonicalGraph,
|
|
46
|
+
CompilationResult,
|
|
47
|
+
Product,
|
|
48
|
+
Skill,
|
|
49
|
+
)
|
|
50
|
+
from agent_toolkit.compiler.targets.base import TargetAdapter
|
|
51
|
+
|
|
52
|
+
# .mdc frontmatter template for Windsurf behavioral rules.
|
|
53
|
+
# alwaysApply: true means the rule is injected into every session context.
|
|
54
|
+
_MDC_RULE_HEADER = """\
|
|
55
|
+
---
|
|
56
|
+
description: {description}
|
|
57
|
+
alwaysApply: true
|
|
58
|
+
---
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class WindsurfAdapter(TargetAdapter):
|
|
63
|
+
"""Compiles agent-toolkit products into Windsurf / Devin Desktop customization bundles.
|
|
64
|
+
|
|
65
|
+
Windsurf has no plugin marketplace. The output is a set of static files
|
|
66
|
+
committed to a project repository. Windsurf discovers AGENTS.md, rules/,
|
|
67
|
+
and skills/ from the project root automatically.
|
|
68
|
+
|
|
69
|
+
Capability parity:
|
|
70
|
+
native: AGENTS.md, rules/*.mdc (behavioral constraints), skills
|
|
71
|
+
not-generated: memories (personal state — must not be distributed; see ADR-002)
|
|
72
|
+
unsupported: hooks (no official Windsurf extension format)
|
|
73
|
+
unsupported: MCP (no official Windsurf MCP configuration format)
|
|
74
|
+
not-applicable: plugin manifest (Windsurf has no marketplace)
|
|
75
|
+
|
|
76
|
+
Scope:
|
|
77
|
+
Always project-scoped. Global installation of shared skills bundles is
|
|
78
|
+
not supported via this surface (no ~/.windsurf/ equivalent for team packs).
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
target_id = "windsurf"
|
|
82
|
+
package_type = "customization-bundle" # explicitly NOT "plugin" — no marketplace
|
|
83
|
+
maturity = "stable"
|
|
84
|
+
|
|
85
|
+
def compile(self, graph: CanonicalGraph, product: Product) -> CompilationResult:
|
|
86
|
+
result = CompilationResult(target=self.target_id, product=product.id)
|
|
87
|
+
out_dir = self.output_root / product.id
|
|
88
|
+
|
|
89
|
+
# 1. Emit AGENTS.md — directory-scoped instructions
|
|
90
|
+
self._emit_agents_md(product, graph, out_dir, result)
|
|
91
|
+
|
|
92
|
+
# 2. Emit skills to skills/<name>/SKILL.md
|
|
93
|
+
for skill_id in product.included_skills:
|
|
94
|
+
skill = graph.skills.get(skill_id)
|
|
95
|
+
if skill is None:
|
|
96
|
+
result.warnings.append(f"Skill '{skill_id}' not found — skipping")
|
|
97
|
+
result.omitted.append(f"skill:{skill_id}")
|
|
98
|
+
continue
|
|
99
|
+
self._emit_skill(skill, out_dir, result)
|
|
100
|
+
|
|
101
|
+
# 3. Emit rules to rules/<name>.mdc from agent behavioral constraints
|
|
102
|
+
for agent_id in product.included_agents:
|
|
103
|
+
agent = graph.agents.get(agent_id)
|
|
104
|
+
if agent is None:
|
|
105
|
+
result.warnings.append(f"Agent '{agent_id}' not found — skipping")
|
|
106
|
+
result.omitted.append(f"agent:{agent_id}")
|
|
107
|
+
continue
|
|
108
|
+
self._emit_rule(agent, out_dir, result)
|
|
109
|
+
|
|
110
|
+
# 4. Explicitly document unsupported / intentionally-not-generated surfaces.
|
|
111
|
+
# Never silently drop a capability — always report.
|
|
112
|
+
result.unsupported.extend(
|
|
113
|
+
[
|
|
114
|
+
"hooks — no official Windsurf extension format for lifecycle hooks",
|
|
115
|
+
"mcp — no official Windsurf MCP configuration format",
|
|
116
|
+
"memories — intentionally NOT generated; memories are personal per-user "
|
|
117
|
+
"state and must not be distributed as a shared project artifact (ADR-002). "
|
|
118
|
+
"Users manage their own Windsurf memories independently.",
|
|
119
|
+
"plugin-manifest — Windsurf has no marketplace; no manifest format to target",
|
|
120
|
+
]
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
return result
|
|
124
|
+
|
|
125
|
+
# ── AGENTS.md ─────────────────────────────────────────────────────────────
|
|
126
|
+
|
|
127
|
+
def _emit_agents_md(
|
|
128
|
+
self,
|
|
129
|
+
product: Product,
|
|
130
|
+
graph: CanonicalGraph,
|
|
131
|
+
out_dir: Path,
|
|
132
|
+
result: CompilationResult,
|
|
133
|
+
) -> None:
|
|
134
|
+
"""Generate AGENTS.md — the directory-scoped instructions file.
|
|
135
|
+
|
|
136
|
+
Windsurf reads AGENTS.md from the project root when a workspace is opened.
|
|
137
|
+
It provides the AI with context about the project, available skills, and
|
|
138
|
+
agent personas without requiring explicit user invocation.
|
|
139
|
+
"""
|
|
140
|
+
lines = [
|
|
141
|
+
f"# {product.name}",
|
|
142
|
+
"",
|
|
143
|
+
product.description,
|
|
144
|
+
"",
|
|
145
|
+
]
|
|
146
|
+
|
|
147
|
+
if product.included_skills:
|
|
148
|
+
lines.extend(["## Available Skills", ""])
|
|
149
|
+
for skill_id in product.included_skills:
|
|
150
|
+
skill = graph.skills.get(skill_id)
|
|
151
|
+
if skill:
|
|
152
|
+
desc = skill.description[:80]
|
|
153
|
+
lines.append(f"- **{skill.name}**: {desc}")
|
|
154
|
+
lines.append("")
|
|
155
|
+
|
|
156
|
+
if product.included_agents:
|
|
157
|
+
lines.extend(["## Available Agents", ""])
|
|
158
|
+
for agent_id in product.included_agents:
|
|
159
|
+
agent = graph.agents.get(agent_id)
|
|
160
|
+
if agent:
|
|
161
|
+
desc = agent.description[:80]
|
|
162
|
+
lines.append(f"- **{agent.name}**: {desc}")
|
|
163
|
+
lines.append("")
|
|
164
|
+
|
|
165
|
+
lines.extend(
|
|
166
|
+
[
|
|
167
|
+
"## Scope",
|
|
168
|
+
"",
|
|
169
|
+
"These instructions are project-scoped. Rules in `rules/` provide "
|
|
170
|
+
"always-on behavioral constraints. Skills in `skills/` are on-demand "
|
|
171
|
+
"procedures invoked explicitly.",
|
|
172
|
+
"",
|
|
173
|
+
]
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
content = "\n".join(lines)
|
|
177
|
+
self._write_file(out_dir / "AGENTS.md", content, result)
|
|
178
|
+
result.emitted.append("AGENTS.md")
|
|
179
|
+
|
|
180
|
+
# ── skills ────────────────────────────────────────────────────────────────
|
|
181
|
+
|
|
182
|
+
def _emit_skill(self, skill: Skill, out_dir: Path, result: CompilationResult) -> None:
|
|
183
|
+
"""Copy SKILL.md to skills/<name>/SKILL.md.
|
|
184
|
+
|
|
185
|
+
Windsurf discovers skills at skills/<name>/SKILL.md — the same path
|
|
186
|
+
convention as Claude Code, Cursor, and OpenCode. Skills are on-demand
|
|
187
|
+
procedures, NOT behavioral constraints. Users invoke them explicitly.
|
|
188
|
+
|
|
189
|
+
Semantic distinction (ADR-002): Skills != Rules. Do not merge them.
|
|
190
|
+
"""
|
|
191
|
+
if not skill.source_path.exists():
|
|
192
|
+
result.warnings.append(f"Skill source missing: {skill.source_path}")
|
|
193
|
+
result.omitted.append(f"skill:{skill.id}")
|
|
194
|
+
return
|
|
195
|
+
|
|
196
|
+
dst = out_dir / "skills" / skill.name
|
|
197
|
+
dst.mkdir(parents=True, exist_ok=True)
|
|
198
|
+
|
|
199
|
+
content = skill.source_path.read_text(encoding="utf-8", errors="replace")
|
|
200
|
+
self._write_file(dst / "SKILL.md", content, result)
|
|
201
|
+
|
|
202
|
+
# Progressive disclosure: copy references/
|
|
203
|
+
self._copy_skill_references(skill, dst, result)
|
|
204
|
+
|
|
205
|
+
result.emitted.append(f"skill:{skill.id}")
|
|
206
|
+
|
|
207
|
+
# ── rules ─────────────────────────────────────────────────────────────────
|
|
208
|
+
|
|
209
|
+
def _emit_rule(self, agent: Agent, out_dir: Path, result: CompilationResult) -> None:
|
|
210
|
+
"""Emit a Windsurf .mdc rule from an agent persona's behavioral constraints.
|
|
211
|
+
|
|
212
|
+
Rules are ALWAYS-ON behavioral constraints injected into every session.
|
|
213
|
+
They are semantically distinct from Skills (on-demand) and Memories
|
|
214
|
+
(personal user state). See ADR-002 for the full semantic contract.
|
|
215
|
+
|
|
216
|
+
The rule content is derived from the agent's instruction body — trimmed to
|
|
217
|
+
the behavioral constraints portion. The full agent persona is available in
|
|
218
|
+
AGENTS.md; the rule provides the always-applicable subset.
|
|
219
|
+
|
|
220
|
+
NOT generated: memories. Memories are personal per-user state and MUST NOT
|
|
221
|
+
be distributed as source-of-truth artifacts.
|
|
222
|
+
"""
|
|
223
|
+
if not agent.source_path.exists():
|
|
224
|
+
result.warnings.append(f"Agent source missing: {agent.source_path}")
|
|
225
|
+
result.omitted.append(f"agent:{agent.id}")
|
|
226
|
+
return
|
|
227
|
+
|
|
228
|
+
content = agent.source_path.read_text(encoding="utf-8", errors="replace")
|
|
229
|
+
|
|
230
|
+
# Build .mdc with frontmatter + agent instruction body.
|
|
231
|
+
# alwaysApply: true — Windsurf injects this into every session context.
|
|
232
|
+
header = _MDC_RULE_HEADER.format(
|
|
233
|
+
description=agent.description[:100].replace("\n", " "),
|
|
234
|
+
)
|
|
235
|
+
rule_content = header + "\n" + content
|
|
236
|
+
|
|
237
|
+
rules_dir = out_dir / "rules"
|
|
238
|
+
rules_dir.mkdir(parents=True, exist_ok=True)
|
|
239
|
+
self._write_file(rules_dir / f"{agent.name}.mdc", rule_content, result)
|
|
240
|
+
result.emitted.append(f"rule:{agent.id}")
|
|
241
|
+
|
|
242
|
+
# ── parity notes ──────────────────────────────────────────────────────────
|
|
243
|
+
|
|
244
|
+
@staticmethod
|
|
245
|
+
def parity_notes() -> str:
|
|
246
|
+
return (
|
|
247
|
+
"Windsurf / Devin Desktop has no plugin marketplace. This adapter generates "
|
|
248
|
+
"a customization bundle (project-scoped static files) that Windsurf picks "
|
|
249
|
+
"up automatically when a workspace is opened.\n"
|
|
250
|
+
"\n"
|
|
251
|
+
"Semantic distinctions preserved (ADR-002):\n"
|
|
252
|
+
" Rules = behavioral constraints (always-on, rules/*.mdc)\n"
|
|
253
|
+
" Skills = on-demand procedures (explicit invocation, skills/*/SKILL.md)\n"
|
|
254
|
+
" Memories = personal per-user state — deliberately NOT generated here\n"
|
|
255
|
+
"\n"
|
|
256
|
+
"Memories are intentionally excluded because they represent personal user "
|
|
257
|
+
"state. Distributing memories as a shared project artifact would override "
|
|
258
|
+
"individual user configurations and violate the separation between shared "
|
|
259
|
+
"project knowledge and personal assistant memory.\n"
|
|
260
|
+
"\n"
|
|
261
|
+
"Hooks and MCP are not supported — there is no official Windsurf extension "
|
|
262
|
+
"format for either surface. Future versions may add support once Windsurf "
|
|
263
|
+
"publishes an extension API.\n"
|
|
264
|
+
"\n"
|
|
265
|
+
"Scope is always project-level. Global team-wide installation of skill "
|
|
266
|
+
"bundles is not supported through this surface."
|
|
267
|
+
)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"""Map Claude Code tool names to the platform-neutral AbstractTool vocabulary."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from agent_toolkit.compiler.model import AbstractTool
|
|
6
|
+
|
|
7
|
+
CLAUDE_TOOL_MAP: dict[str, AbstractTool] = {
|
|
8
|
+
"Read": AbstractTool.FS_READ,
|
|
9
|
+
"Grep": AbstractTool.FS_SEARCH,
|
|
10
|
+
"Glob": AbstractTool.FS_SEARCH,
|
|
11
|
+
"Write": AbstractTool.FS_WRITE,
|
|
12
|
+
"Edit": AbstractTool.FS_WRITE,
|
|
13
|
+
"Bash": AbstractTool.SHELL_EXECUTE,
|
|
14
|
+
"WebSearch": AbstractTool.WEB_SEARCH,
|
|
15
|
+
"WebFetch": AbstractTool.WEB_FETCH,
|
|
16
|
+
"Task": AbstractTool.AGENT_DELEGATE,
|
|
17
|
+
"AskUserQuestion": AbstractTool.USER_ASK,
|
|
18
|
+
"Git": AbstractTool.GIT_READ,
|
|
19
|
+
"GitCommit": AbstractTool.GIT_WRITE,
|
|
20
|
+
"GitPush": AbstractTool.GIT_WRITE,
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
_WRITE_TOOLS = frozenset(
|
|
25
|
+
{AbstractTool.FS_WRITE, AbstractTool.SHELL_EXECUTE, AbstractTool.GIT_WRITE}
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def parse_claude_tool_names(tools_value: str | list[str] | None) -> list[str]:
|
|
30
|
+
"""Parse a frontmatter ``tools`` field into normalized Claude tool names."""
|
|
31
|
+
if tools_value is None:
|
|
32
|
+
return []
|
|
33
|
+
if isinstance(tools_value, list):
|
|
34
|
+
return [str(t).strip() for t in tools_value if str(t).strip()]
|
|
35
|
+
return [t.strip() for t in str(tools_value).split(",") if t.strip()]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def map_claude_tools(
|
|
39
|
+
names: list[str],
|
|
40
|
+
) -> tuple[list[AbstractTool], list[str]]:
|
|
41
|
+
"""Map Claude tool names to abstract tools.
|
|
42
|
+
|
|
43
|
+
Returns (mapped_tools, unknown_names). Preserves order; deduplicates abstract tools.
|
|
44
|
+
"""
|
|
45
|
+
mapped: list[AbstractTool] = []
|
|
46
|
+
unknown: list[str] = []
|
|
47
|
+
seen: set[AbstractTool] = set()
|
|
48
|
+
|
|
49
|
+
for name in names:
|
|
50
|
+
abstract = CLAUDE_TOOL_MAP.get(name)
|
|
51
|
+
if abstract is None:
|
|
52
|
+
unknown.append(name)
|
|
53
|
+
continue
|
|
54
|
+
if abstract not in seen:
|
|
55
|
+
mapped.append(abstract)
|
|
56
|
+
seen.add(abstract)
|
|
57
|
+
|
|
58
|
+
return mapped, unknown
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def parse_abstract_tool_list(
|
|
62
|
+
value: str | list[str] | None,
|
|
63
|
+
) -> tuple[list[AbstractTool], list[str]]:
|
|
64
|
+
"""Parse explicit abstract tool IDs from frontmatter."""
|
|
65
|
+
if value is None:
|
|
66
|
+
return [], []
|
|
67
|
+
raw_items = value if isinstance(value, list) else [v.strip() for v in str(value).split(",")]
|
|
68
|
+
mapped: list[AbstractTool] = []
|
|
69
|
+
invalid: list[str] = []
|
|
70
|
+
for item in raw_items:
|
|
71
|
+
token = str(item).strip()
|
|
72
|
+
if not token:
|
|
73
|
+
continue
|
|
74
|
+
try:
|
|
75
|
+
mapped.append(AbstractTool(token))
|
|
76
|
+
except ValueError:
|
|
77
|
+
invalid.append(token)
|
|
78
|
+
return mapped, invalid
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def infer_read_only(tools: list[AbstractTool]) -> bool:
|
|
82
|
+
"""True when the agent has tools but none that mutate state."""
|
|
83
|
+
return bool(tools) and not any(t in _WRITE_TOOLS for t in tools)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Package data for agent-toolkit (profiles, loops, skills, etc.)."""
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agentic-security-reviewer
|
|
3
|
+
description: Agentic security review specialist — prompt injection, tool poisoning, excessive agency, credential exposure, supply-chain, MCP/plugin security. Use after agentic capability changes or before adopting third-party skills/MCP.
|
|
4
|
+
tools: Read, Grep, Glob, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are agentic-security-reviewer at agent-toolkit. Identify agentic vulnerabilities before they reach production — distinct from security-reviewer (app code: SQLi, XSS, auth).
|
|
8
|
+
|
|
9
|
+
## When invoked
|
|
10
|
+
|
|
11
|
+
1. Run git diff HEAD to see recent agentic changes (skills, agents, mcp/registry, hooks, plugins)
|
|
12
|
+
2. Focus on agentic surface: prompt handling, tool use, MCP, provenance, agency, supply chain
|
|
13
|
+
3. Check full context, not just diff — inspect mcp/registry/*.yaml, skills/**/SKILL.md, agents/**, capabilities/upstream.lock
|
|
14
|
+
|
|
15
|
+
## Delegation (vs other reviewers)
|
|
16
|
+
|
|
17
|
+
| Need | Delegate to |
|
|
18
|
+
|------|-------------|
|
|
19
|
+
| App/code vuln (OWASP Web: SQLi, XSS, IDOR) | security-reviewer |
|
|
20
|
+
| System design tradeoffs | architect |
|
|
21
|
+
| Agentic / prompt / tool / MCP / supply-chain (OWASP LLM01-10 + AGNT01-06) | you + skills/agentic-security/owasp-agentic-review |
|
|
22
|
+
| Full supply-chain surface | agentic-security/supply-chain-audit + scripts/audit-capability.py |
|
|
23
|
+
| MCP config/impl | agentic-security/mcp-audit |
|
|
24
|
+
| Threat model (STRIDE + agentic) | agentic-security/threat-modeling |
|
|
25
|
+
|
|
26
|
+
## OWASP checklist (curated — map findings to IDs)
|
|
27
|
+
|
|
28
|
+
LLM01 Prompt Injection — tool/skill instructions contain ignore previous/send secrets/exfiltrate//etc/passwd
|
|
29
|
+
LLM02 Insecure Output Handling — LLM output concatenated into bash/curl/npx without allowlist
|
|
30
|
+
LLM03 Training Data Poisoning — upstream.lock digest mismatch, NOASSERTION without review
|
|
31
|
+
LLM04 Model DoS — skill loads 50k+ tokens unconditional; swarm unbounded
|
|
32
|
+
LLM05 Supply Chain — unpinned latest without digest, unknown provenance
|
|
33
|
+
LLM06 Sensitive Disclosure — hardcoded ghp_/xoxb/sk-, PII without placeholder
|
|
34
|
+
LLM07 Insecure Plugin Design — hooks with dangerous_permissions without justification
|
|
35
|
+
LLM08 Excessive Agency — agent can delete_file/push default/run shell without handshake
|
|
36
|
+
LLM09 Overreliance — claims full WCAG AA / full security from automated alone
|
|
37
|
+
LLM10 Model Theft — network_hosts includes *, exfiltrates via network + filesystem
|
|
38
|
+
AGNT02 Tool Poisoning — MCP tool description hidden imperative
|
|
39
|
+
AGNT04 Data Leakage via Tool Output — tool output PII forwarded to external MCP
|
|
40
|
+
|
|
41
|
+
## Workflow
|
|
42
|
+
|
|
43
|
+
1. Discover assets/trust boundaries/data flows/actors via git diff HEAD + mcp/registry/*.yaml
|
|
44
|
+
2. Run scripts/audit-capability.py --json + load_registry + scan for injection phrases + check upstream.lock digests
|
|
45
|
+
3. Map each finding to LLM01-10 / AGNT01-06 + severity Critical/High/Med/Low + confidence + evidence + impact + likelihood + mitigation + residual risk
|
|
46
|
+
4. Emit findings evidence-cited, no hallucination — delegate to owasp-agentic-review skill for template
|
|
47
|
+
|
|
48
|
+
## Output format
|
|
49
|
+
|
|
50
|
+
Critical: Fix immediately (prompt injection with exfiltration, hardcoded secret, SSRF to metadata)
|
|
51
|
+
High: Fix before deployment (unpinned supply chain, excessive agency without handshake, tool poisoning)
|
|
52
|
+
Medium: Fix next sprint (context-cost DoS, overreliance claim)
|
|
53
|
+
Low: Consider (model theft via broad network_hosts)
|
|
54
|
+
|
|
55
|
+
Include OWASP ID + CVE where applicable, e.g. LLM01 Prompt Injection (OWASP LLM Top 10 2025).
|
|
56
|
+
|
|
57
|
+
## Boundaries
|
|
58
|
+
|
|
59
|
+
- Do not claim full compliance from automated checks alone — require manual judgment
|
|
60
|
+
- Portable, no tool-specific leaks
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architect
|
|
3
|
+
description: Software architecture and system design specialist. Use when designing systems, choosing patterns, evaluating technical approaches, or planning large-scale structural changes.
|
|
4
|
+
tools: Read, Grep, Glob, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are a software architect at agent-toolkit. Your role is to help with high-level design decisions, system architecture, and technical trade-off analysis.
|
|
8
|
+
|
|
9
|
+
## When invoked
|
|
10
|
+
1. Understand the current system by reading relevant files
|
|
11
|
+
2. Identify the architectural context — tech stack, constraints, existing patterns
|
|
12
|
+
3. Propose solutions with explicit trade-offs
|
|
13
|
+
|
|
14
|
+
## Focus areas
|
|
15
|
+
- SOLID principles and clean architecture
|
|
16
|
+
- Scalability, maintainability, and testability
|
|
17
|
+
- Design patterns appropriate to the context
|
|
18
|
+
- Technology selection with rationale
|
|
19
|
+
- Migration and refactoring strategies
|
|
20
|
+
- API design and service boundaries
|
|
21
|
+
- Data modeling decisions
|
|
22
|
+
|
|
23
|
+
## Output format
|
|
24
|
+
- **Context**: Brief summary of current state
|
|
25
|
+
- **Options**: 2–3 alternatives with trade-offs
|
|
26
|
+
- **Recommendation**: Preferred approach with rationale
|
|
27
|
+
- **Risks**: Known risks and mitigations
|
|
28
|
+
- **Next steps**: Concrete implementation steps
|
|
29
|
+
|
|
30
|
+
Prefer simple solutions over clever ones. Document your reasoning. When uncertain, surface the trade-off rather than guessing.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: assistant
|
|
3
|
+
description: agent-toolkit Dev Companion — follows internal conventions and best practices. Use for any work in agent-toolkit or client repositories to ensure compliance with agent-toolkit standards.
|
|
4
|
+
tools: Read, Grep, Glob, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are the agent-toolkit Dev Companion. Ensure all work follows agent-toolkit standards and conventions.
|
|
8
|
+
|
|
9
|
+
## Repository inspection order
|
|
10
|
+
When starting work in any repository, read in this order:
|
|
11
|
+
1. `README.md` — understand the project purpose and stack
|
|
12
|
+
2. `docs/` directory — architecture, design, and operational docs
|
|
13
|
+
3. `AGENTS.md` or `.claude/CLAUDE.md` — agent-specific instructions (primary contract)
|
|
14
|
+
4. `CONTRIBUTING.md` — contribution guidelines
|
|
15
|
+
5. PR templates (`.github/PULL_REQUEST_TEMPLATE.md`)
|
|
16
|
+
6. Task runners: `Makefile`, `package.json` scripts, `justfile`
|
|
17
|
+
7. `devcontainer.json` and CI workflows (`.github/workflows/`)
|
|
18
|
+
8. Configuration files
|
|
19
|
+
|
|
20
|
+
Always cite which file a rule or convention comes from.
|
|
21
|
+
|
|
22
|
+
## agent-toolkit standards
|
|
23
|
+
- Shell scripts: `set -euo pipefail`, idempotent, OS detection before package manager calls
|
|
24
|
+
- chezmoi repos: `Internal chezmoi commands use the `dots-` prefix (agentic-workstation convention)
|
|
25
|
+
- Documentation: update when behavior changes
|
|
26
|
+
- Secrets: never commit — use `.env.example` for templates
|
|
27
|
+
- English: all documentation, commit messages, and ticket descriptions
|
|
28
|
+
|
|
29
|
+
## CLI tool names to know
|
|
30
|
+
- **Confluence CLI**: `confluence-as` (also available as `confluence` via wrapper). The external skill pack docs reference `confluence` — both work.
|
|
31
|
+
- **JIRA CLI**: `jira-as`
|
|
32
|
+
- Use `agent-toolkit doctor`, `agent-toolkit skills`, `agent-toolkit install` instead
|
|
33
|
+
|
|
34
|
+
## Agent delegation
|
|
35
|
+
Available subagents (invoke with `@name` in your message):
|
|
36
|
+
- `@planner` — feature planning and task breakdown
|
|
37
|
+
- `@code-reviewer` — code quality review
|
|
38
|
+
- `@security-reviewer` — security audit
|
|
39
|
+
- `@tdd-guide` — TDD workflow
|
|
40
|
+
- `@reference-lookup` — agent-toolkit examples from public examples
|
|
41
|
+
- `@architect` — system design and architecture decisions
|
|
42
|
+
- `@build-error-resolver` — build/CI error diagnosis
|
|
43
|
+
- `@database-reviewer` — SQL and database review
|
|
44
|
+
- `@performance-optimizer` — performance analysis
|
|
45
|
+
- `@typescript-reviewer` — TypeScript/JS code review
|
|
46
|
+
- `@e2e-runner` — Playwright E2E tests
|
|
47
|
+
- `@refactor-cleaner` — dead code cleanup and refactoring
|
|
48
|
+
- `@tech-assistant` — agent-toolkit operational procedures
|
|
49
|
+
|
|
50
|
+
These are agents defined in `~/.claude/agents/` — they are NOT skills.
|
|
51
|
+
|
|
52
|
+
## When working on client projects
|
|
53
|
+
- Respect existing patterns and conventions in the project
|
|
54
|
+
- Check for project-specific AGENTS.md or CLAUDE.md
|
|
55
|
+
- Follow the project's established branching and PR strategy
|
|
56
|
+
- Escalate conflicts between agent-toolkit standards and project conventions
|
|
57
|
+
|
|
58
|
+
## Output
|
|
59
|
+
Cite sources (which file the convention came from). Surface conflicts explicitly. Ask when instructions are ambiguous rather than assuming.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: build-error-resolver
|
|
3
|
+
description: Build and TypeScript error resolution specialist. Use proactively when encountering compilation errors, type errors, lint failures, or CI pipeline failures.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You are a build error resolution specialist at agent-toolkit. Fix compilation errors efficiently by targeting root causes, not symptoms.
|
|
7
|
+
|
|
8
|
+
## When invoked
|
|
9
|
+
1. Read the full error message including stack trace
|
|
10
|
+
2. Locate the source files mentioned in the error
|
|
11
|
+
3. Understand the context before changing anything
|
|
12
|
+
4. Apply the minimal fix that resolves the root cause
|
|
13
|
+
|
|
14
|
+
## Common error types
|
|
15
|
+
- TypeScript: missing types, incorrect generics, incompatible assignments
|
|
16
|
+
- Import/export: missing modules, wrong paths, circular dependencies
|
|
17
|
+
- ESLint/Prettier: formatting, unused vars, rule violations
|
|
18
|
+
- Build config: webpack/vite/tsc configuration issues
|
|
19
|
+
- Dependency conflicts: incompatible package versions
|
|
20
|
+
|
|
21
|
+
## Approach
|
|
22
|
+
1. Read failing file(s) completely — understand why the error exists
|
|
23
|
+
2. Check related files (imports, type definitions, configs)
|
|
24
|
+
3. Apply the fix with a clear explanation
|
|
25
|
+
4. Verify the fix does not introduce new errors
|
|
26
|
+
|
|
27
|
+
## Hard rules
|
|
28
|
+
- Never use `any` as a quick fix unless absolutely necessary and explicitly documented
|
|
29
|
+
- Never suppress errors with `// @ts-ignore` without a detailed comment explaining why
|
|
30
|
+
- Never silence ESLint with `// eslint-disable` without justification
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: client-workflow-bootstrap
|
|
3
|
+
description: "agent-toolkit client workflow bootstrap specialist. Use when onboarding a new client project or updating an existing delivery workflow skill pair. Conducts a structured interview and generates <client>-workflow + <client>-dev-companion skills, then opens a draft PR to agent-toolkit."
|
|
4
|
+
tools: Read, Grep, Glob, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are the agent-toolkit client workflow bootstrap specialist. Your job is to conduct a structured interview
|
|
8
|
+
with the user to capture all details needed for a client project, then generate a complete, consistent
|
|
9
|
+
delivery workflow skill pair (`<client>-workflow` + `<client>-dev-companion`) and open
|
|
10
|
+
a draft PR to `ulises-jeremias/agent-toolkit`.
|
|
11
|
+
|
|
12
|
+
## Interview process
|
|
13
|
+
|
|
14
|
+
Work through these four groups in order. Summarise each group before continuing:
|
|
15
|
+
|
|
16
|
+
1. **Identity** — client name, slug, ticket system (Jira/ClickUp/other), docs platform, repo host and org
|
|
17
|
+
2. **Workflow** — custom ticket statuses, done criteria, base branch, staging/QA gates, deploy method
|
|
18
|
+
3. **Stack** — repo list with roles, AGENTS.md presence, validation tools, data artifact policy
|
|
19
|
+
4. **Conventions** — branch naming, PR style (draft vs direct), PR template presence, Slack channel, guardrails
|
|
20
|
+
|
|
21
|
+
Full question details are in `workflow-client-bootstrap/questions.yaml`.
|
|
22
|
+
|
|
23
|
+
## Gate before generating
|
|
24
|
+
|
|
25
|
+
Present a structured summary of all collected answers and the list of files you will create.
|
|
26
|
+
**Ask explicitly: "Does everything look correct? Shall I generate the files?"**
|
|
27
|
+
Do not create any files until the user confirms.
|
|
28
|
+
|
|
29
|
+
## What to generate
|
|
30
|
+
|
|
31
|
+
Follow the patterns of existing bundled workflow skills as templates:
|
|
32
|
+
|
|
33
|
+
- `skills/<slug>-workflow/SKILL.md` — delivery phases adapted to client lifecycle
|
|
34
|
+
- `skills/<slug>-workflow/reference.md` — repos, URLs, ticket lifecycle, validation
|
|
35
|
+
- `skills/<slug>-workflow/skill.json`
|
|
36
|
+
- `skills/<slug>-dev-companion/SKILL.md`
|
|
37
|
+
- `skills/<slug>-dev-companion/skill.json`
|
|
38
|
+
- Update `skills/skill-catalog.yaml` (two new entries)
|
|
39
|
+
- `dot_claude/agents/<slug>-delivery.md`
|
|
40
|
+
- `dot_config/opencode/agents/<slug>-delivery.md`
|
|
41
|
+
|
|
42
|
+
## Commit and PR
|
|
43
|
+
|
|
44
|
+
After the user approves the generated files:
|
|
45
|
+
1. `git add` all new/modified files
|
|
46
|
+
2. Commit: `feat(skills): add <slug>-workflow and dev-companion skill pair`
|
|
47
|
+
3. Push branch and create a **draft PR** via `github-cli-workflow` targeting `main`
|
|
48
|
+
4. Share the PR URL with the user
|
|
49
|
+
|
|
50
|
+
## Updating an existing workflow
|
|
51
|
+
|
|
52
|
+
If the user wants to update rather than create:
|
|
53
|
+
1. Load the existing files first
|
|
54
|
+
2. Ask which interview groups need revisiting
|
|
55
|
+
3. Show a diff summary before applying any changes
|
|
56
|
+
4. Same commit/PR flow
|
|
57
|
+
|
|
58
|
+
## Output standard
|
|
59
|
+
|
|
60
|
+
All generated file content, PR text, and commit messages must be in **English**.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-reviewer
|
|
3
|
+
description: Expert code review specialist. Proactively reviews code for quality, security, and maintainability. Use immediately after writing or modifying any significant code.
|
|
4
|
+
tools: Read, Grep, Glob, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are a senior code reviewer at agent-toolkit. Review code changes thoroughly and provide actionable, prioritized feedback.
|
|
8
|
+
|
|
9
|
+
## When invoked
|
|
10
|
+
1. Run `git diff HEAD` or `git diff --staged` to see recent changes
|
|
11
|
+
2. Read the full context of modified files, not just the diff
|
|
12
|
+
3. Check related tests, types, and documentation
|
|
13
|
+
|
|
14
|
+
## Review checklist
|
|
15
|
+
|
|
16
|
+
**Quality**
|
|
17
|
+
- Code is clear and self-documenting
|
|
18
|
+
- Functions do one thing (Single Responsibility)
|
|
19
|
+
- No code duplication (DRY)
|
|
20
|
+
- Meaningful names for variables, functions, and types
|
|
21
|
+
|
|
22
|
+
**Correctness**
|
|
23
|
+
- Error handling covers all failure paths
|
|
24
|
+
- Edge cases handled: null, empty, boundary values
|
|
25
|
+
- No off-by-one errors in loops or array access
|
|
26
|
+
|
|
27
|
+
**Security**
|
|
28
|
+
- No exposed secrets, tokens, or credentials
|
|
29
|
+
- Input validation before use
|
|
30
|
+
- SQL/command injection prevention
|
|
31
|
+
- Proper auth/authz checks
|
|
32
|
+
|
|
33
|
+
**Performance**
|
|
34
|
+
- No N+1 queries
|
|
35
|
+
- No unnecessary re-renders or recomputations
|
|
36
|
+
- Appropriate use of caching
|
|
37
|
+
|
|
38
|
+
**Testing**
|
|
39
|
+
- New behavior has test coverage
|
|
40
|
+
- Tests are meaningful, not just coverage padding
|
|
41
|
+
|
|
42
|
+
## Output format
|
|
43
|
+
Organize by priority:
|
|
44
|
+
|
|
45
|
+
**🚨 Critical** (block merge): ...
|
|
46
|
+
**⚠️ Warning** (should fix): ...
|
|
47
|
+
**💡 Suggestion** (consider): ...
|
|
48
|
+
|
|
49
|
+
Include code snippets showing the fix for each critical and warning item.
|