agent-toolkit-cli 1.0.3__py3-none-any.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.
Files changed (310) hide show
  1. agent_toolkit/__init__.py +4 -0
  2. agent_toolkit/__main__.py +3 -0
  3. agent_toolkit/_paths.py +64 -0
  4. agent_toolkit/cli/__init__.py +0 -0
  5. agent_toolkit/cli/doctor.py +453 -0
  6. agent_toolkit/cli/install.py +445 -0
  7. agent_toolkit/cli/main.py +66 -0
  8. agent_toolkit/cli/mcp.py +418 -0
  9. agent_toolkit/cli/plugin.py +213 -0
  10. agent_toolkit/cli/skills.py +421 -0
  11. agent_toolkit/loop/__init__.py +0 -0
  12. agent_toolkit/loop/gh_gate.py +626 -0
  13. agent_toolkit/loop/runner.py +1548 -0
  14. agent_toolkit/runner/__init__.py +0 -0
  15. agent_toolkit/runner/dispatcher.py +164 -0
  16. agent_toolkit/runner/policy.py +345 -0
  17. agent_toolkit/runner/providers/__init__.py +21 -0
  18. agent_toolkit/runner/providers/anthropic_provider.py +109 -0
  19. agent_toolkit/runner/providers/base.py +53 -0
  20. agent_toolkit/runner/providers/ollama_provider.py +108 -0
  21. agent_toolkit/runner/providers/openai_provider.py +105 -0
  22. agent_toolkit/runner/providers/opencode_provider.py +127 -0
  23. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/architect/AGENT.md +30 -0
  24. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/assistant/AGENT.md +59 -0
  25. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/build-error-resolver/AGENT.md +30 -0
  26. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/client-workflow-bootstrap/AGENT.md +60 -0
  27. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/code-reviewer/AGENT.md +49 -0
  28. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/database-reviewer/AGENT.md +44 -0
  29. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/docs-lookup/AGENT.md +28 -0
  30. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/e2e-runner/AGENT.md +38 -0
  31. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/performance-optimizer/AGENT.md +52 -0
  32. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/planner/AGENT.md +41 -0
  33. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/refactor-cleaner/AGENT.md +43 -0
  34. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/reference-lookup/AGENT.md +33 -0
  35. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/security-reviewer/AGENT.md +47 -0
  36. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/tdd-guide/AGENT.md +58 -0
  37. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/tech-assistant/AGENT.md +11 -0
  38. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/agents/typescript-reviewer/AGENT.md +61 -0
  39. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/catalogs/agent-catalog.yaml +202 -0
  40. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/catalogs/loop-catalog.yaml +165 -0
  41. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/catalogs/skill-catalog.yaml +699 -0
  42. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/catalogs/skills-layout.json +337 -0
  43. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/loops/changelog-drafter/loop.yaml +40 -0
  44. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/loops/ci-sweeper/loop.yaml +53 -0
  45. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/loops/daily-triage/loop.yaml +47 -0
  46. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/loops/dep-sweeper/loop.yaml +46 -0
  47. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/loops/issue-triage/loop.yaml +40 -0
  48. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/loops/oss-daily-briefing/loop.yaml +65 -0
  49. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/loops/oss-pr-monitor/loop.yaml +85 -0
  50. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/loops/oss-triage/loop.yaml +67 -0
  51. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/loops/post-merge-cleanup/loop.yaml +44 -0
  52. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/loops/pr-babysitter/loop.yaml +46 -0
  53. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/clickup/README.md +45 -0
  54. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/clickup/config.template.json +7 -0
  55. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/clickup/wrapper.sh +23 -0
  56. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/figma/README.md +56 -0
  57. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/figma/config.template.json +9 -0
  58. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/github/README.md +11 -0
  59. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/github/config.template.json +7 -0
  60. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/github/wrapper.sh +23 -0
  61. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/linear/README.md +49 -0
  62. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/linear/config.template.json +10 -0
  63. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/notion/README.md +7 -0
  64. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/notion/config.template.json +7 -0
  65. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/notion/wrapper.sh +23 -0
  66. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/slack/README.md +8 -0
  67. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/slack/config.template.json +8 -0
  68. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/mcp/templates/slack/wrapper.sh +23 -0
  69. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/CLAUDE.md +66 -0
  70. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/agents/assistant.md +59 -0
  71. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/agents/build-error-resolver.md +30 -0
  72. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/agents/client-workflow-bootstrap.md +60 -0
  73. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/agents/contribution-planner.md +39 -0
  74. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/agents/database-reviewer.md +44 -0
  75. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/agents/docs-lookup.md +28 -0
  76. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/agents/e2e-runner.md +38 -0
  77. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/agents/performance-optimizer.md +52 -0
  78. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/agents/planner.md +41 -0
  79. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/agents/refactor-cleaner.md +43 -0
  80. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/agents/reference-lookup.md +33 -0
  81. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/agents/security-reviewer.md +47 -0
  82. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/agents/tdd-guide.md +58 -0
  83. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/agents/typescript-reviewer.md +61 -0
  84. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/claude-code/settings.json +87 -0
  85. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/copilot/copilot-instructions.md +15 -0
  86. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/README.md +33 -0
  87. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/rules/architect.mdc +23 -0
  88. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/rules/assistant.mdc +25 -0
  89. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/rules/build-error-resolver.mdc +20 -0
  90. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/rules/code-reviewer.mdc +21 -0
  91. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/rules/database-reviewer.mdc +29 -0
  92. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/rules/docs-lookup.mdc +15 -0
  93. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/rules/e2e-runner.mdc +30 -0
  94. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/rules/performance-optimizer.mdc +27 -0
  95. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/rules/planner.mdc +28 -0
  96. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/rules/refactor-cleaner.mdc +26 -0
  97. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/rules/reference-lookup.mdc +20 -0
  98. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/rules/security-reviewer.mdc +20 -0
  99. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/rules/tdd-guide.mdc +26 -0
  100. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/cursor/rules/typescript-reviewer.mdc +28 -0
  101. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/architect.md +30 -0
  102. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/assistant.md +52 -0
  103. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/build-error-resolver.md +31 -0
  104. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/client-workflow-bootstrap.md +66 -0
  105. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/code-reviewer.md +47 -0
  106. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/contribution-planner.md +44 -0
  107. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/database-reviewer.md +43 -0
  108. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/docs-lookup.md +28 -0
  109. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/e2e-runner.md +33 -0
  110. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/performance-optimizer.md +34 -0
  111. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/planner.md +27 -0
  112. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/refactor-cleaner.md +27 -0
  113. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/reference-lookup.md +27 -0
  114. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/security-reviewer.md +27 -0
  115. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/tdd-guide.md +27 -0
  116. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/agents/typescript-reviewer.md +30 -0
  117. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/opencode/opencode.json +37 -0
  118. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/pi/skills/architect/skill.md +5 -0
  119. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/pi/skills/assistant/skill.md +3 -0
  120. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/pi/skills/code-reviewer/skill.md +5 -0
  121. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/pi/skills/planner/skill.md +3 -0
  122. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/pi/skills/security-reviewer/skill.md +3 -0
  123. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/windsurf/memories/global_rules.md +74 -0
  124. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/windsurf/rules/architect.mdc +23 -0
  125. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/windsurf/rules/build-error-resolver.mdc +20 -0
  126. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/windsurf/rules/code-reviewer.mdc +21 -0
  127. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/windsurf/rules/database-reviewer.mdc +29 -0
  128. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/windsurf/rules/docs-lookup.mdc +15 -0
  129. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/windsurf/rules/e2e-runner.mdc +30 -0
  130. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/windsurf/rules/performance-optimizer.mdc +27 -0
  131. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/windsurf/rules/planner.mdc +28 -0
  132. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/windsurf/rules/refactor-cleaner.mdc +26 -0
  133. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/windsurf/rules/security-reviewer.mdc +20 -0
  134. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/windsurf/rules/tdd-guide.mdc +26 -0
  135. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/profiles/windsurf/rules/typescript-reviewer.mdc +28 -0
  136. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/core/assistant/SKILL.md +213 -0
  137. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/core/assistant/references/AGENTS_TEMPLATE.md +0 -0
  138. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/core/assistant/references/ORCHESTRATION.md +0 -0
  139. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/core/assistant/references/REPO_INSPECTION.md +0 -0
  140. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/core/dev-companion/SKILL.md +65 -0
  141. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/core/dev-companion/references/LOOP_GUARDRAILS.md +0 -0
  142. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/core/onboarding/SKILL.md +119 -0
  143. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/core/output-handshake/SKILL.md +24 -0
  144. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/core/pr-fallback/SKILL.md +33 -0
  145. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/core/pr-fallback/references/pr-body-default.md +0 -0
  146. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/core/workspace-knowledge-sync/SKILL.md +141 -0
  147. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/data/dbt-validation/SKILL.md +41 -0
  148. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/data/snowflake-validation/SKILL.md +38 -0
  149. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/adr/SKILL.md +46 -0
  150. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/adr/references/default-template.md +0 -0
  151. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/adr/references/example-001-graphql-adoption.md +66 -0
  152. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/agreement/SKILL.md +23 -0
  153. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/agreement/references/default-template.md +0 -0
  154. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/agreement/references/example-api-versioning.md +29 -0
  155. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/bug/SKILL.md +25 -0
  156. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/bug/references/default-template.md +0 -0
  157. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/bug/references/example-search-filter-bug.md +58 -0
  158. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/decision-log/SKILL.md +27 -0
  159. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/decision-log/references/default-template.md +0 -0
  160. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/decision-log/references/example-repository-pattern.md +27 -0
  161. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/development-workflow/SKILL.md +33 -0
  162. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/development-workflow/references/default-template.md +0 -0
  163. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/development-workflow/references/default-workflow-checklist.md +44 -0
  164. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/epic/SKILL.md +21 -0
  165. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/epic/references/default-template.md +0 -0
  166. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/epic/references/example-unified-dashboard.md +40 -0
  167. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/incident/SKILL.md +23 -0
  168. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/incident/references/default-template.md +0 -0
  169. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/incident/references/example-payment-outage.md +62 -0
  170. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/management-unit-assessment/SKILL.md +105 -0
  171. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/management-unit-assessment/references/default-template.md +0 -0
  172. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/management-unit-assessment/references/example-team-assessment.md +126 -0
  173. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/meeting-minutes/SKILL.md +24 -0
  174. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/meeting-minutes/references/default-template.md +0 -0
  175. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/meeting-minutes/references/example-weekly-sync.md +72 -0
  176. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/planning/SKILL.md +30 -0
  177. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/planning/references/default-template.md +0 -0
  178. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/planning/references/example-sprint-planning.md +62 -0
  179. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/prd/SKILL.md +44 -0
  180. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/prd/references/default-template.md +0 -0
  181. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/prd/references/example-unified-api.md +71 -0
  182. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/project-assessment/SKILL.md +90 -0
  183. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/project-assessment/references/default-template.md +0 -0
  184. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/project-assessment/references/example-platform-assessment.md +122 -0
  185. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/project-assessment-evidence/SKILL.md +88 -0
  186. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/project-assessment-evidence/references/default-template.md +0 -0
  187. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/project-assessment-evidence/references/example-evidence-map.md +46 -0
  188. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/spike/SKILL.md +23 -0
  189. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/spike/references/default-template.md +0 -0
  190. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/spike/references/example-graphql-federation.md +79 -0
  191. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/task/SKILL.md +20 -0
  192. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/task/references/default-template.md +0 -0
  193. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/task/references/example-nav-system.md +33 -0
  194. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/technical-unit-assessment/SKILL.md +58 -0
  195. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/technical-unit-assessment/references/default-template.md +0 -0
  196. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/technical-unit-assessment/references/example-frontend-assessment.md +112 -0
  197. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/technical-unit-assessment/references/indicator-groups.md +65 -0
  198. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/trd/SKILL.md +47 -0
  199. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/trd/references/default-template.md +0 -0
  200. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/trd/references/example-api-migration.md +122 -0
  201. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/user-story/SKILL.md +20 -0
  202. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/user-story/references/default-template.md +0 -0
  203. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/user-story/references/example-advanced-filtering.md +37 -0
  204. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/work-item/SKILL.md +30 -0
  205. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/work-item/references/default-template.md +0 -0
  206. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/work-item/references/example-routing-dashboard.md +23 -0
  207. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/workflow-client-bootstrap/SKILL.md +148 -0
  208. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/workflow-client-bootstrap/questions.yaml +165 -0
  209. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/delivery/workflow-generic-project/SKILL.md +78 -0
  210. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma/LICENSE.txt +2 -0
  211. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma/NOTICE.txt +25 -0
  212. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma/SKILL.md +95 -0
  213. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma/references/figma-mcp-config.md +82 -0
  214. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma/references/figma-tools-and-prompts.md +34 -0
  215. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-code-connect-components/LICENSE.txt +2 -0
  216. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-code-connect-components/NOTICE.txt +18 -0
  217. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-code-connect-components/SKILL.md +350 -0
  218. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-code-connect-components/references/mapping-checklist.md +7 -0
  219. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-code-connect-components/scripts/normalize_node_id.py +25 -0
  220. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-create-design-system-rules/LICENSE.txt +2 -0
  221. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-create-design-system-rules/NOTICE.txt +19 -0
  222. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-create-design-system-rules/SKILL.md +550 -0
  223. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-create-design-system-rules/references/rule-template.md +15 -0
  224. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-create-design-system-rules/scripts/check_agents_md.sh +9 -0
  225. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-create-new-file/LICENSE.txt +2 -0
  226. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-create-new-file/NOTICE.txt +17 -0
  227. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-create-new-file/SKILL.md +69 -0
  228. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-implement-design/LICENSE.txt +2 -0
  229. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-implement-design/NOTICE.txt +19 -0
  230. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/figma-implement-design/SKILL.md +264 -0
  231. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/SKILL.md +60 -0
  232. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/charts.csv +26 -0
  233. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/colors.csv +97 -0
  234. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/icons.csv +101 -0
  235. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/landing.csv +31 -0
  236. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/products.csv +97 -0
  237. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/react-performance.csv +45 -0
  238. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  239. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  240. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  241. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  242. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  243. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  244. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  245. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  246. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/stacks/react.csv +54 -0
  247. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  248. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  249. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  250. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  251. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/styles.csv +68 -0
  252. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/typography.csv +58 -0
  253. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  254. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  255. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/data/web-interface.csv +31 -0
  256. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/references/pre-delivery-checklist.md +39 -0
  257. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/references/search-reference.md +44 -0
  258. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/references/ui-rules.md +35 -0
  259. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/scripts/core.py +253 -0
  260. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/scripts/design_system.py +1067 -0
  261. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/design/ui-ux-pro-max/scripts/search.py +114 -0
  262. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/forge/gh-address-comments/LICENSE.txt +202 -0
  263. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/forge/gh-address-comments/NOTICE.txt +20 -0
  264. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/forge/gh-address-comments/SKILL.md +69 -0
  265. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/forge/gh-address-comments/scripts/fetch_comments.py +237 -0
  266. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/forge/gh-contribution-planner/SKILL.md +157 -0
  267. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/forge/gh-contribution-planner/scripts/inspect_contributions.py +800 -0
  268. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/forge/gh-fix-ci/LICENSE.txt +201 -0
  269. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/forge/gh-fix-ci/NOTICE.txt +20 -0
  270. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/forge/gh-fix-ci/SKILL.md +71 -0
  271. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/forge/gh-fix-ci/scripts/inspect_pr_checks.py +509 -0
  272. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/forge/github-cli-workflow/SKILL.md +49 -0
  273. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/forge/gitlab-cli-workflow/SKILL.md +44 -0
  274. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/forge/workflow-client-bootstrap/SKILL.md +14 -0
  275. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/forge/workflow-generic-project/SKILL.md +14 -0
  276. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/integrations/clickup-cli/SKILL.md +75 -0
  277. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/integrations/clickup-cli/references/docs-management.md +57 -0
  278. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/integrations/clickup-cli/references/task-management.md +131 -0
  279. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/integrations/clickup-cli/references/time-tracking.md +38 -0
  280. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/integrations/linear/LICENSE.txt +202 -0
  281. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/integrations/linear/NOTICE.txt +23 -0
  282. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/integrations/linear/SKILL.md +131 -0
  283. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/integrations/slack-assistant/SKILL.md +134 -0
  284. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/integrations/slack-cli/SKILL.md +105 -0
  285. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/integrations/slack-cli/references/INSTALLATION.md +42 -0
  286. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/loops/loop-runner/SKILL.md +90 -0
  287. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/ops/docs-generator/SKILL.md +81 -0
  288. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/ops/llm-cost-advisor/SKILL.md +83 -0
  289. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/ops/triage/SKILL.md +117 -0
  290. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/jupyter-notebook/LICENSE.txt +201 -0
  291. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/jupyter-notebook/NOTICE.txt +27 -0
  292. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/jupyter-notebook/SKILL.md +142 -0
  293. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/jupyter-notebook/assets/experiment-template.ipynb +110 -0
  294. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/jupyter-notebook/assets/tutorial-template.ipynb +107 -0
  295. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/jupyter-notebook/references/experiment-patterns.md +10 -0
  296. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/jupyter-notebook/references/notebook-structure.md +17 -0
  297. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/jupyter-notebook/references/quality-checklist.md +11 -0
  298. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/jupyter-notebook/references/tutorial-patterns.md +9 -0
  299. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/jupyter-notebook/scripts/new_notebook.py +130 -0
  300. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/playwright-cli/LICENSE.txt +201 -0
  301. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/playwright-cli/NOTICE.txt +29 -0
  302. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/playwright-cli/SKILL.md +151 -0
  303. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/playwright-cli/references/cli.md +116 -0
  304. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/playwright-cli/references/workflows.md +98 -0
  305. agent_toolkit_cli-1.0.3.data/data/agent_toolkit/data/skills/tooling/playwright-cli/scripts/executable_playwright_cli.sh +25 -0
  306. agent_toolkit_cli-1.0.3.dist-info/METADATA +411 -0
  307. agent_toolkit_cli-1.0.3.dist-info/RECORD +310 -0
  308. agent_toolkit_cli-1.0.3.dist-info/WHEEL +4 -0
  309. agent_toolkit_cli-1.0.3.dist-info/entry_points.txt +2 -0
  310. agent_toolkit_cli-1.0.3.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,4 @@
1
+ """agent-toolkit: Composable AI agent capabilities for all major AI coding tools."""
2
+
3
+ __version__ = "1.0.3"
4
+ __author__ = "ulises-jeremias"
@@ -0,0 +1,3 @@
1
+ """agent-toolkit — run as python -m agent_toolkit"""
2
+ from agent_toolkit.cli.main import main
3
+ main()
@@ -0,0 +1,64 @@
1
+ """Shared toolkit path resolution — works in both editable and wheel installs."""
2
+ from __future__ import annotations
3
+ import os
4
+ from pathlib import Path
5
+
6
+
7
+ def find_toolkit_root() -> Path:
8
+ """
9
+ Locate the agent-toolkit root directory (where skills/, loops/, profiles/ live).
10
+
11
+ Resolution order:
12
+ 1. AGENT_TOOLKIT_ROOT env var (user override)
13
+ 2. AI_WORKSPACE env var (ai-workspace compat)
14
+ 3. importlib.resources data (wheel install — data packed into the wheel)
15
+ 4. Walk up from module file to find profiles/ (editable install)
16
+ 5. CWD fallback
17
+
18
+ Raises EnvironmentError if no root can be found with required subdirs.
19
+ """
20
+ # 1. Explicit env override
21
+ for env in ("AGENT_TOOLKIT_ROOT", "AI_WORKSPACE"):
22
+ val = os.environ.get(env, "").strip()
23
+ if val:
24
+ p = Path(val)
25
+ if (p / "skills").is_dir() or (p / "loops").is_dir():
26
+ return p
27
+
28
+ # 2. Importlib resources (wheel installs pack data alongside the package)
29
+ try:
30
+ import importlib.resources as _ir
31
+ import agent_toolkit.data as _data_pkg # noqa: F401
32
+ data_path = Path(str(_ir.files("agent_toolkit.data")))
33
+ if data_path.is_dir():
34
+ return data_path
35
+ except (ImportError, TypeError, ModuleNotFoundError):
36
+ pass
37
+
38
+ # 3. Walk up from this file (editable install)
39
+ here = Path(__file__).resolve()
40
+ for parent in here.parents:
41
+ if (parent / "skills").is_dir() and (parent / "loops").is_dir():
42
+ return parent
43
+
44
+ # 4. CWD
45
+ cwd = Path.cwd()
46
+ if (cwd / "skills").is_dir() or (cwd / "loops").is_dir():
47
+ return cwd
48
+
49
+ raise EnvironmentError(
50
+ "Cannot locate agent-toolkit data directory.\n"
51
+ "Set AGENT_TOOLKIT_ROOT to your agent-toolkit checkout or install root."
52
+ )
53
+
54
+
55
+ # Lazy singleton
56
+ _root: Path | None = None
57
+
58
+
59
+ def toolkit_root() -> Path:
60
+ """Cached toolkit root."""
61
+ global _root
62
+ if _root is None:
63
+ _root = find_toolkit_root()
64
+ return _root
File without changes
@@ -0,0 +1,453 @@
1
+ """
2
+ doctor — Check system health and AI tool availability.
3
+
4
+ Usage:
5
+ agent-toolkit doctor [options]
6
+
7
+ Options:
8
+ --json Output results as JSON
9
+ --fix Attempt to auto-fix issues (installs missing profiles)
10
+ --help Show this help message
11
+
12
+ Exit codes:
13
+ 0 — no errors detected
14
+ 1 — one or more errors detected
15
+ """
16
+ from __future__ import annotations
17
+
18
+ import json
19
+ import os
20
+ import platform
21
+ import shutil
22
+ import subprocess
23
+ import sys
24
+ import urllib.request
25
+ from pathlib import Path
26
+ from agent_toolkit._paths import toolkit_root
27
+
28
+
29
+ # ---------------------------------------------------------------------------
30
+ # Result model
31
+ # ---------------------------------------------------------------------------
32
+
33
+ class CheckResult:
34
+ """A single health-check item."""
35
+
36
+ STATUS_OK = "ok"
37
+ STATUS_WARN = "warn"
38
+ STATUS_ERR = "error"
39
+
40
+ def __init__(self, category: str, name: str, status: str, detail: str = "") -> None:
41
+ self.category = category
42
+ self.name = name
43
+ self.status = status
44
+ self.detail = detail
45
+
46
+ @property
47
+ def icon(self) -> str:
48
+ return {"ok": "✓", "warn": "⚠", "error": "✗"}.get(self.status, "?")
49
+
50
+ def to_dict(self) -> dict:
51
+ return {
52
+ "category": self.category,
53
+ "name": self.name,
54
+ "status": self.status,
55
+ "detail": self.detail,
56
+ }
57
+
58
+
59
+ # ---------------------------------------------------------------------------
60
+ # Toolkit directory resolution
61
+ # ---------------------------------------------------------------------------
62
+
63
+ def toolkit_root() -> Path | None:
64
+ candidate = Path(__file__).resolve()
65
+ for _ in range(10):
66
+ candidate = candidate.parent
67
+ if (candidate / "profiles").is_dir():
68
+ return candidate
69
+ return None
70
+
71
+
72
+ # ---------------------------------------------------------------------------
73
+ # Individual checks
74
+ # ---------------------------------------------------------------------------
75
+
76
+ def _check_python_version() -> CheckResult:
77
+ vi = sys.version_info
78
+ version_str = f"{vi.major}.{vi.minor}.{vi.micro}"
79
+ if (vi.major, vi.minor) >= (3, 10):
80
+ return CheckResult("system", "python >= 3.10", CheckResult.STATUS_OK, version_str)
81
+ return CheckResult("system", "python >= 3.10", CheckResult.STATUS_ERR,
82
+ f"Found {version_str} — need 3.10+")
83
+
84
+
85
+ def _check_command(category: str, name: str, cmd: str) -> CheckResult:
86
+ path = shutil.which(cmd)
87
+ if path:
88
+ # Try to get version
89
+ try:
90
+ result = subprocess.run(
91
+ [cmd, "--version"], capture_output=True, text=True, timeout=5
92
+ )
93
+ version = (result.stdout or result.stderr or "").strip().splitlines()[0]
94
+ except Exception:
95
+ version = path
96
+ return CheckResult(category, name, CheckResult.STATUS_OK, version)
97
+ return CheckResult(category, name, CheckResult.STATUS_ERR, f"'{cmd}' not found in PATH")
98
+
99
+
100
+ def _check_gh_auth() -> CheckResult:
101
+ if shutil.which("gh") is None:
102
+ return CheckResult("system", "gh auth", CheckResult.STATUS_ERR, "'gh' not found in PATH")
103
+ try:
104
+ result = subprocess.run(
105
+ ["gh", "auth", "status"], capture_output=True, text=True, timeout=10
106
+ )
107
+ if result.returncode == 0:
108
+ return CheckResult("system", "gh auth", CheckResult.STATUS_OK, "authenticated")
109
+ return CheckResult("system", "gh auth", CheckResult.STATUS_WARN,
110
+ "gh installed but not authenticated — run: gh auth login")
111
+ except Exception as exc:
112
+ return CheckResult("system", "gh auth", CheckResult.STATUS_WARN, str(exc))
113
+
114
+
115
+ def _check_ai_tool(name: str, cmd: str) -> CheckResult:
116
+ path = shutil.which(cmd)
117
+ if path:
118
+ return CheckResult("ai_tools", name, CheckResult.STATUS_OK, path)
119
+ return CheckResult("ai_tools", name, CheckResult.STATUS_WARN,
120
+ f"'{cmd}' not found — tool may not be installed")
121
+
122
+
123
+ def _profile_installed(category: str, name: str, path: Path) -> CheckResult:
124
+ if path.exists():
125
+ return CheckResult(category, name, CheckResult.STATUS_OK, str(path))
126
+ return CheckResult(category, name, CheckResult.STATUS_WARN,
127
+ f"Not installed: {path}")
128
+
129
+
130
+ def _check_profiles() -> list[CheckResult]:
131
+ """Check whether profiles are installed for each detected tool."""
132
+ results: list[CheckResult] = []
133
+ home = Path.home()
134
+
135
+ # claude-code
136
+ if shutil.which("claude") or (home / ".claude").is_dir():
137
+ results.append(_profile_installed("profiles", "claude-code CLAUDE.md",
138
+ home / ".claude" / "CLAUDE.md"))
139
+ results.append(_profile_installed("profiles", "claude-code settings.json",
140
+ home / ".claude" / "settings.json"))
141
+ results.append(_profile_installed("profiles", "claude-code agents/",
142
+ home / ".claude" / "agents"))
143
+
144
+ # cursor
145
+ if shutil.which("cursor") or (home / ".cursor").is_dir():
146
+ results.append(_profile_installed("profiles", "cursor rules/",
147
+ home / ".cursor" / "rules"))
148
+
149
+ # opencode
150
+ if shutil.which("opencode") or (home / ".config" / "opencode").is_dir():
151
+ results.append(_profile_installed("profiles", "opencode agents/",
152
+ home / ".config" / "opencode" / "agents"))
153
+ results.append(_profile_installed("profiles", "opencode opencode.json",
154
+ home / ".config" / "opencode" / "opencode.json"))
155
+
156
+ # windsurf
157
+ windsurf_dir: Path | None = None
158
+ if (home / ".codeium" / "windsurf").is_dir():
159
+ windsurf_dir = home / ".codeium" / "windsurf"
160
+ elif (home / ".windsurf").is_dir():
161
+ windsurf_dir = home / ".windsurf"
162
+ elif shutil.which("windsurf"):
163
+ windsurf_dir = home / ".codeium" / "windsurf"
164
+
165
+ if windsurf_dir is not None:
166
+ results.append(_profile_installed("profiles", "windsurf rules/",
167
+ windsurf_dir / "rules"))
168
+ results.append(_profile_installed("profiles", "windsurf memories/",
169
+ windsurf_dir / "memories"))
170
+
171
+ # pi
172
+ if shutil.which("pi") or (home / ".pi").is_dir():
173
+ results.append(_profile_installed("profiles", "pi skills/",
174
+ home / ".pi" / "agent" / "skills"))
175
+
176
+ return results
177
+
178
+
179
+ def _check_loop_runtime(toolkit_dir: Path | None) -> list[CheckResult]:
180
+ results: list[CheckResult] = []
181
+
182
+ # Check if `agent-toolkit loop` resolves (basic import test)
183
+ try:
184
+ subprocess.run(
185
+ [sys.executable, "-m", "agent_toolkit", "loop", "--help"],
186
+ capture_output=True, timeout=10
187
+ )
188
+ results.append(CheckResult("loops", "loop subcommand", CheckResult.STATUS_OK,
189
+ "agent-toolkit loop --help succeeded"))
190
+ except Exception as exc:
191
+ results.append(CheckResult("loops", "loop subcommand", CheckResult.STATUS_WARN,
192
+ f"Could not run loop command: {exc}"))
193
+
194
+ # Check loops/ templates
195
+ if toolkit_dir:
196
+ loops_dir = toolkit_dir / "loops"
197
+ if loops_dir.is_dir():
198
+ count = sum(1 for d in loops_dir.iterdir() if d.is_dir())
199
+ results.append(CheckResult("loops", "loop templates", CheckResult.STATUS_OK,
200
+ f"{count} template(s) found in {loops_dir}"))
201
+ else:
202
+ results.append(CheckResult("loops", "loop templates", CheckResult.STATUS_WARN,
203
+ f"loops/ directory not found at {loops_dir}"))
204
+ else:
205
+ results.append(CheckResult("loops", "loop templates", CheckResult.STATUS_WARN,
206
+ "Toolkit directory not found — cannot check loop templates"))
207
+
208
+ return results
209
+
210
+
211
+ def _check_llm_providers() -> list[CheckResult]:
212
+ results: list[CheckResult] = []
213
+
214
+ # API keys
215
+ for var in ("ANTHROPIC_API_KEY", "OPENAI_API_KEY"):
216
+ val = os.environ.get(var, "")
217
+ if val:
218
+ masked = val[:8] + "..." if len(val) > 8 else "***"
219
+ results.append(CheckResult("llm", var, CheckResult.STATUS_OK, f"set ({masked})"))
220
+ else:
221
+ results.append(CheckResult("llm", var, CheckResult.STATUS_WARN, "not set"))
222
+
223
+ # Ollama
224
+ try:
225
+ req = urllib.request.Request("http://localhost:11434", method="HEAD")
226
+ req.add_header("User-Agent", "agent-toolkit-doctor/1")
227
+ with urllib.request.urlopen(req, timeout=3):
228
+ pass
229
+ results.append(CheckResult("llm", "ollama", CheckResult.STATUS_OK,
230
+ "running at localhost:11434"))
231
+ except Exception:
232
+ results.append(CheckResult("llm", "ollama", CheckResult.STATUS_WARN,
233
+ "not reachable at localhost:11434"))
234
+
235
+ # opencode socket
236
+ xdg_runtime = os.environ.get("XDG_RUNTIME_DIR", f"/run/user/{os.getuid()}")
237
+ socket_paths = [
238
+ Path(xdg_runtime) / "opencode.sock",
239
+ Path.home() / ".config" / "opencode" / "opencode.sock",
240
+ ]
241
+ for sp in socket_paths:
242
+ if sp.exists():
243
+ results.append(CheckResult("llm", "opencode socket", CheckResult.STATUS_OK,
244
+ str(sp)))
245
+ break
246
+ else:
247
+ results.append(CheckResult("llm", "opencode socket", CheckResult.STATUS_WARN,
248
+ "socket not found (opencode may not be running)"))
249
+
250
+ return results
251
+
252
+
253
+ def _check_mcp() -> list[CheckResult]:
254
+ results: list[CheckResult] = []
255
+ config_path = Path.home() / ".config" / "agent-toolkit" / "mcp-config.json"
256
+
257
+ if not config_path.exists():
258
+ results.append(CheckResult("mcp", "mcp-config.json", CheckResult.STATUS_WARN,
259
+ f"Not found: {config_path} (run: agent-toolkit mcp setup <provider>)"))
260
+ return results
261
+
262
+ try:
263
+ data = json.loads(config_path.read_text())
264
+ providers = data.get("providers", {})
265
+ if not providers:
266
+ results.append(CheckResult("mcp", "mcp providers", CheckResult.STATUS_WARN,
267
+ "Config exists but no providers configured"))
268
+ return results
269
+ for name, cfg in providers.items():
270
+ enabled = cfg.get("enabled", False)
271
+ validated = cfg.get("validated_at", "never")
272
+ status = CheckResult.STATUS_OK if enabled else CheckResult.STATUS_WARN
273
+ results.append(CheckResult("mcp", f"provider:{name}", status,
274
+ f"enabled={enabled}, validated_at={validated}"))
275
+ except (json.JSONDecodeError, OSError) as exc:
276
+ results.append(CheckResult("mcp", "mcp-config.json", CheckResult.STATUS_ERR,
277
+ f"Cannot read config: {exc}"))
278
+
279
+ return results
280
+
281
+
282
+ def _check_scheduled_loops() -> list[CheckResult]:
283
+ results: list[CheckResult] = []
284
+ system = platform.system()
285
+
286
+ if system == "Linux":
287
+ timer_dir = Path.home() / ".config" / "systemd" / "user"
288
+ if timer_dir.is_dir():
289
+ timers = list(timer_dir.glob("agent-toolkit-*.timer"))
290
+ if timers:
291
+ for t in sorted(timers):
292
+ results.append(CheckResult("scheduled", t.name, CheckResult.STATUS_OK, str(t)))
293
+ else:
294
+ results.append(CheckResult("scheduled", "systemd timers", CheckResult.STATUS_WARN,
295
+ "No agent-toolkit-*.timer files found"))
296
+ else:
297
+ results.append(CheckResult("scheduled", "systemd user dir", CheckResult.STATUS_WARN,
298
+ f"Not found: {timer_dir}"))
299
+ elif system == "Darwin":
300
+ launchd_dir = Path.home() / "Library" / "LaunchAgents"
301
+ if launchd_dir.is_dir():
302
+ plists = list(launchd_dir.glob("com.agent-toolkit.*.plist"))
303
+ if plists:
304
+ for p in sorted(plists):
305
+ results.append(CheckResult("scheduled", p.name, CheckResult.STATUS_OK, str(p)))
306
+ else:
307
+ results.append(CheckResult("scheduled", "launchd plists", CheckResult.STATUS_WARN,
308
+ "No com.agent-toolkit.*.plist files found"))
309
+ else:
310
+ results.append(CheckResult("scheduled", "LaunchAgents dir", CheckResult.STATUS_WARN,
311
+ f"Not found: {launchd_dir}"))
312
+ else:
313
+ results.append(CheckResult("scheduled", "scheduled loops", CheckResult.STATUS_WARN,
314
+ f"Unsupported platform: {system}"))
315
+
316
+ return results
317
+
318
+
319
+ # ---------------------------------------------------------------------------
320
+ # Formatting
321
+ # ---------------------------------------------------------------------------
322
+
323
+ def _print_section(title: str) -> None:
324
+ print(f"\n── {title} ──")
325
+
326
+
327
+ def _print_result(r: CheckResult) -> None:
328
+ detail = f" ({r.detail})" if r.detail else ""
329
+ print(f" {r.icon} {r.name}{detail}")
330
+
331
+
332
+ # ---------------------------------------------------------------------------
333
+ # Argument parsing
334
+ # ---------------------------------------------------------------------------
335
+
336
+ def _parse_args(args: list[str]) -> tuple[bool, bool] | None:
337
+ """Return (json_output, fix) or None to signal early exit."""
338
+ json_output = False
339
+ fix = False
340
+
341
+ for arg in args:
342
+ if arg in ("-h", "--help"):
343
+ print(__doc__)
344
+ return None
345
+ elif arg == "--json":
346
+ json_output = True
347
+ elif arg == "--fix":
348
+ fix = True
349
+ else:
350
+ print(f" ✗ Unknown option: {arg} (run 'agent-toolkit doctor --help')",
351
+ file=sys.stderr)
352
+ return None
353
+
354
+ return json_output, fix
355
+
356
+
357
+ # ---------------------------------------------------------------------------
358
+ # Main entry point
359
+ # ---------------------------------------------------------------------------
360
+
361
+ def cmd_doctor(args: list[str]) -> int:
362
+ """Run health checks for the agent-toolkit installation.
363
+
364
+ Returns 0 if no errors, 1 if any errors found.
365
+ """
366
+ result = _parse_args(args)
367
+ if result is None:
368
+ return 0
369
+
370
+ json_output, fix = result
371
+ toolkit_dir = toolkit_root()
372
+
373
+ # Run all checks
374
+ all_results: list[CheckResult] = []
375
+
376
+ # 1. System baseline
377
+ all_results.append(_check_python_version())
378
+ all_results.append(_check_command("system", "git", "git"))
379
+ all_results.append(_check_command("system", "gh (GitHub CLI)", "gh"))
380
+ all_results.append(_check_gh_auth())
381
+
382
+ # 2. AI tools
383
+ for tool_name, cmd in [
384
+ ("claude", "claude"),
385
+ ("cursor", "cursor"),
386
+ ("opencode", "opencode"),
387
+ ("windsurf", "windsurf"),
388
+ ]:
389
+ all_results.append(_check_ai_tool(tool_name, cmd))
390
+
391
+ # 3. Profiles
392
+ all_results.extend(_check_profiles())
393
+
394
+ # 4. Loop runtime
395
+ all_results.extend(_check_loop_runtime(toolkit_dir))
396
+
397
+ # 5. LLM providers
398
+ all_results.extend(_check_llm_providers())
399
+
400
+ # 6. MCP
401
+ all_results.extend(_check_mcp())
402
+
403
+ # 7. Scheduled loops
404
+ all_results.extend(_check_scheduled_loops())
405
+
406
+ # Output
407
+ if json_output:
408
+ print(json.dumps({"checks": [r.to_dict() for r in all_results]}, indent=2))
409
+ else:
410
+ print()
411
+ print("agent-toolkit doctor")
412
+
413
+ categories_seen: list[str] = []
414
+ category_labels = {
415
+ "system": "System baseline",
416
+ "ai_tools": "AI tools",
417
+ "profiles": "Profiles",
418
+ "loops": "Loop runtime",
419
+ "llm": "LLM providers",
420
+ "mcp": "MCP",
421
+ "scheduled": "Scheduled loops",
422
+ }
423
+ for r in all_results:
424
+ if r.category not in categories_seen:
425
+ categories_seen.append(r.category)
426
+ label = category_labels.get(r.category, r.category)
427
+ _print_section(label)
428
+ _print_result(r)
429
+
430
+ # Summary
431
+ n_ok = sum(1 for r in all_results if r.status == CheckResult.STATUS_OK)
432
+ n_warn = sum(1 for r in all_results if r.status == CheckResult.STATUS_WARN)
433
+ n_err = sum(1 for r in all_results if r.status == CheckResult.STATUS_ERR)
434
+
435
+ print()
436
+ print("── Summary ──")
437
+ print(f" ✓ {n_ok} ok ⚠ {n_warn} warnings ✗ {n_err} errors")
438
+ print()
439
+
440
+ # --fix: call install for warnings/errors related to profiles
441
+ if fix:
442
+ has_profile_issues = any(
443
+ r.category == "profiles" and r.status != CheckResult.STATUS_OK
444
+ for r in all_results
445
+ )
446
+ if has_profile_issues:
447
+ if not json_output:
448
+ print("── Auto-fix: running install ──")
449
+ from agent_toolkit.cli.install import cmd_install
450
+ cmd_install([])
451
+
452
+ errors = [r for r in all_results if r.status == CheckResult.STATUS_ERR]
453
+ return 1 if errors else 0