agentpack-cli 0.3.26__tar.gz → 0.3.29__tar.gz

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 (166) hide show
  1. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/PKG-INFO +2 -1
  2. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/README.md +1 -0
  3. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/pyproject.toml +1 -1
  4. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/__init__.py +1 -1
  5. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/adapters/codex.py +3 -0
  6. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/application/pack_service.py +4 -0
  7. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/doctor.py +20 -13
  8. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/init.py +11 -1
  9. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/install.py +15 -9
  10. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/learn.py +2 -0
  11. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/memory.py +31 -0
  12. agentpack_cli-0.3.29/src/agentpack/commands/upgrade.py +93 -0
  13. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/command_surface.py +10 -1
  14. agentpack_cli-0.3.29/src/agentpack/data/agentpack-learn.md +66 -0
  15. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/data/codex_plugin/.codex-plugin/plugin.json +2 -1
  16. agentpack_cli-0.3.29/src/agentpack/data/codex_plugin/skills/agentpack-learn.md +67 -0
  17. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/installers/antigravity.py +4 -2
  18. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/installers/claude.py +4 -2
  19. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/installers/codex.py +52 -2
  20. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/installers/cursor.py +3 -2
  21. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/installers/windsurf.py +3 -2
  22. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/integrations/agents.py +31 -1
  23. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/learning/collector.py +6 -0
  24. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/learning/extractor.py +2 -0
  25. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/learning/models.py +2 -0
  26. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/learning/renderers.py +5 -2
  27. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/router/models.py +3 -0
  28. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/router/prompt_builder.py +15 -0
  29. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/router/scoring.py +24 -3
  30. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/router/service.py +137 -1
  31. agentpack_cli-0.3.29/src/agentpack/session/references.py +288 -0
  32. agentpack_cli-0.3.26/src/agentpack/commands/upgrade.py +0 -38
  33. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/.gitignore +0 -0
  34. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/LICENSE +0 -0
  35. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/adapters/__init__.py +0 -0
  36. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/adapters/antigravity.py +0 -0
  37. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/adapters/base.py +0 -0
  38. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/adapters/claude.py +0 -0
  39. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/adapters/cursor.py +0 -0
  40. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/adapters/detect.py +0 -0
  41. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/adapters/generic.py +0 -0
  42. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/adapters/windsurf.py +0 -0
  43. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/__init__.py +0 -0
  44. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/dependency_graph.py +0 -0
  45. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/go_imports.py +0 -0
  46. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/java_imports.py +0 -0
  47. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/js_ts_imports.py +0 -0
  48. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/monorepo.py +0 -0
  49. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/naming_signals.py +0 -0
  50. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/python_ast.py +0 -0
  51. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/python_imports.py +0 -0
  52. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/ranking.py +0 -0
  53. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/repo_map.py +0 -0
  54. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/role_inference.py +0 -0
  55. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/rust_imports.py +0 -0
  56. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/symbols.py +0 -0
  57. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/task_classifier.py +0 -0
  58. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/analysis/tests.py +0 -0
  59. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/application/__init__.py +0 -0
  60. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/cli.py +0 -0
  61. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/__init__.py +0 -0
  62. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/_shared.py +0 -0
  63. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/benchmark.py +0 -0
  64. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/ci_cmd.py +0 -0
  65. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/claude_cmd.py +0 -0
  66. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/compress_output.py +0 -0
  67. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/dashboard.py +0 -0
  68. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/dev_check.py +0 -0
  69. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/diagnose_selection.py +0 -0
  70. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/diff.py +0 -0
  71. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/eval_cmd.py +0 -0
  72. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/explain.py +0 -0
  73. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/guard.py +0 -0
  74. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/hook_cmd.py +0 -0
  75. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/ignore_cmd.py +0 -0
  76. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/mcp_cmd.py +0 -0
  77. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/migrate.py +0 -0
  78. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/monitor.py +0 -0
  79. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/next_cmd.py +0 -0
  80. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/pack.py +0 -0
  81. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/perf.py +0 -0
  82. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/quickstart.py +0 -0
  83. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/release_check.py +0 -0
  84. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/release_cmd.py +0 -0
  85. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/repair.py +0 -0
  86. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/retrieve.py +0 -0
  87. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/route.py +0 -0
  88. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/scan.py +0 -0
  89. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/skills.py +0 -0
  90. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/start_cmd.py +0 -0
  91. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/state_cmd.py +0 -0
  92. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/stats.py +0 -0
  93. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/status.py +0 -0
  94. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/summarize.py +0 -0
  95. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/task_cmd.py +0 -0
  96. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/threads.py +0 -0
  97. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/tune.py +0 -0
  98. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/verify_wheel.py +0 -0
  99. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/watch.py +0 -0
  100. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/workflow_cmd.py +0 -0
  101. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/commands/wrap.py +0 -0
  102. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/__init__.py +0 -0
  103. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/bootstrap.py +0 -0
  104. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/cache.py +0 -0
  105. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/changed_paths.py +0 -0
  106. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/config.py +0 -0
  107. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/context_pack.py +0 -0
  108. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/diff.py +0 -0
  109. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/e2e_benchmark.py +0 -0
  110. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/evals.py +0 -0
  111. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/execution_state.py +0 -0
  112. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/git.py +0 -0
  113. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/git_hooks.py +0 -0
  114. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/global_install.py +0 -0
  115. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/ignore.py +0 -0
  116. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/loop_protocol.py +0 -0
  117. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/merkle.py +0 -0
  118. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/models.py +0 -0
  119. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/modes.py +0 -0
  120. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/pack_registry.py +0 -0
  121. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/redactor.py +0 -0
  122. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/scanner.py +0 -0
  123. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/snapshot.py +0 -0
  124. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/task_freshness.py +0 -0
  125. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/thread_context.py +0 -0
  126. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/token_estimator.py +0 -0
  127. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/core/vscode_tasks.py +0 -0
  128. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/dashboard/__init__.py +0 -0
  129. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/dashboard/collectors.py +0 -0
  130. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/dashboard/models.py +0 -0
  131. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/dashboard/renderers.py +0 -0
  132. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/data/agentpack.md +0 -0
  133. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/data/codex_plugin/skills/agentpack-pack.md +0 -0
  134. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/data/codex_plugin/skills/agentpack-refresh.md +0 -0
  135. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/data/codex_plugin/skills/agentpack-review.md +0 -0
  136. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/data/codex_plugin/skills/agentpack-route.md +0 -0
  137. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/data/codex_plugin/skills/agentpack.md +0 -0
  138. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/installers/__init__.py +0 -0
  139. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/integrations/__init__.py +0 -0
  140. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/integrations/git_hooks.py +0 -0
  141. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/integrations/global_install.py +0 -0
  142. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/integrations/platform.py +0 -0
  143. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/integrations/vscode_tasks.py +0 -0
  144. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/learning/__init__.py +0 -0
  145. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/learning/feedback.py +0 -0
  146. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/learning/lesson_ranker.py +0 -0
  147. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/learning/provider.py +0 -0
  148. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/learning/quality.py +0 -0
  149. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/learning/skill_map.py +0 -0
  150. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/mcp_server.py +0 -0
  151. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/output_compression/__init__.py +0 -0
  152. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/output_compression/core.py +0 -0
  153. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/renderers/__init__.py +0 -0
  154. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/renderers/compact.py +0 -0
  155. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/renderers/markdown.py +0 -0
  156. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/renderers/receipts.py +0 -0
  157. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/router/__init__.py +0 -0
  158. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/router/discovery.py +0 -0
  159. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/router/parser.py +0 -0
  160. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/router/skills_index.py +0 -0
  161. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/session/__init__.py +0 -0
  162. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/session/events.py +0 -0
  163. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/session/state.py +0 -0
  164. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/summaries/__init__.py +0 -0
  165. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/summaries/base.py +0 -0
  166. {agentpack_cli-0.3.26 → agentpack_cli-0.3.29}/src/agentpack/summaries/offline.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentpack-cli
3
- Version: 0.3.26
3
+ Version: 0.3.29
4
4
  Summary: Local context engine for AI coding agents that ranks relevant repo files and builds compact task-focused context packs for Claude Code, Codex, Cursor, Windsurf, MCP, and CI workflows.
5
5
  Project-URL: Homepage, https://github.com/vishal2612200/agentpack
6
6
  Project-URL: Documentation, https://vishal2612200.github.io/agentpack/
@@ -60,6 +60,7 @@ Description-Content-Type: text/markdown
60
60
  </p>
61
61
 
62
62
  <p align="center">
63
+ <a href="https://deepwiki.com/vishal2612200/agentpack"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
63
64
  <a href="https://pypi.org/project/agentpack-cli/"><img alt="PyPI version" src="https://img.shields.io/pypi/v/agentpack-cli.svg"></a>
64
65
  <a href="https://pepy.tech/projects/agentpack-cli"><img alt="PyPI downloads" src="https://static.pepy.tech/personalized-badge/agentpack-cli?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads"></a>
65
66
  <a href="https://www.npmjs.com/package/@vishal2612200/agentpack"><img alt="npm version" src="https://img.shields.io/npm/v/@vishal2612200/agentpack.svg"></a>
@@ -13,6 +13,7 @@
13
13
  </p>
14
14
 
15
15
  <p align="center">
16
+ <a href="https://deepwiki.com/vishal2612200/agentpack"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
16
17
  <a href="https://pypi.org/project/agentpack-cli/"><img alt="PyPI version" src="https://img.shields.io/pypi/v/agentpack-cli.svg"></a>
17
18
  <a href="https://pepy.tech/projects/agentpack-cli"><img alt="PyPI downloads" src="https://static.pepy.tech/personalized-badge/agentpack-cli?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads"></a>
18
19
  <a href="https://www.npmjs.com/package/@vishal2612200/agentpack"><img alt="npm version" src="https://img.shields.io/npm/v/@vishal2612200/agentpack.svg"></a>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agentpack-cli"
3
- version = "0.3.26"
3
+ version = "0.3.29"
4
4
  description = "Local context engine for AI coding agents that ranks relevant repo files and builds compact task-focused context packs for Claude Code, Codex, Cursor, Windsurf, MCP, and CI workflows."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -1,3 +1,3 @@
1
1
  """AgentPack — task-aware context packing for AI coding agents."""
2
2
 
3
- __version__ = "0.3.26"
3
+ __version__ = "0.3.29"
@@ -25,5 +25,8 @@ class CodexAdapter(BaseAdapter):
25
25
  def patch_codex_hooks(self, root: Path) -> str:
26
26
  return CodexInstaller().patch_codex_hooks(root)
27
27
 
28
+ def patch_codex_mcp_config(self, *, codex_home: Path | None = None) -> str:
29
+ return CodexInstaller().patch_codex_mcp_config(codex_home=codex_home)
30
+
28
31
  def install_auto_repack(self, root: Path) -> dict[str, str]:
29
32
  return CodexInstaller().install_auto_repack(root)
@@ -67,6 +67,7 @@ from agentpack.analysis.tests import find_related_tests
67
67
  from agentpack.analysis import dependency_graph as dep_graph_mod
68
68
  from agentpack.summaries.base import build_all_summaries
69
69
  from agentpack.session.events import record_event
70
+ from agentpack.session.references import collect_repo_issue_references
70
71
 
71
72
 
72
73
  @dataclass
@@ -829,11 +830,14 @@ class PackService:
829
830
  output_path=cfg.runtime.pack_registry_output,
830
831
  max_records=cfg.runtime.max_registry_records,
831
832
  )
833
+ issue_reference_details = collect_repo_issue_references(root, request.task)
832
834
  record_event(
833
835
  root,
834
836
  "pack",
835
837
  {
836
838
  "task": request.task,
839
+ "issue_references": [item.ref for item in issue_reference_details],
840
+ "issue_reference_details": [item.to_dict() for item in issue_reference_details],
837
841
  "agent": request.agent,
838
842
  "mode": plan.mode,
839
843
  "packed_tokens": packed_tokens,
@@ -321,7 +321,7 @@ def register(app: typer.Typer) -> None:
321
321
  if findings:
322
322
  for finding in findings:
323
323
  console.print(f" [yellow]![/] {finding}")
324
- ok = False
324
+ console.print(" [dim]warning only; keep these out of commits/releases.[/]")
325
325
  else:
326
326
  console.print(" [green]✓[/] no generated release-noise files staged or untracked")
327
327
 
@@ -334,18 +334,25 @@ def register(app: typer.Typer) -> None:
334
334
  else:
335
335
  console.print(" [green]✓[/] npm publish token available in environment")
336
336
 
337
- # --- Slash command ---
338
- console.print("\n[bold]Slash command (/agentpack)[/]")
339
- local_cmd = root / ".claude" / "commands" / "agentpack.md"
340
- global_cmd = Path.home() / ".claude" / "commands" / "agentpack.md"
341
- if local_cmd.exists():
342
- console.print(f" [green]✓[/] Slash command installed (local): {local_cmd}")
343
- else:
344
- console.print(" [dim]-[/] Slash command not installed locally — run: agentpack install --agent claude")
345
- if global_cmd.exists():
346
- console.print(f" [green][/] Slash command installed (global): {global_cmd}")
347
- else:
348
- console.print(" [dim]-[/] Slash command not installed globally — run: agentpack install --agent claude --global")
337
+ # --- Slash commands ---
338
+ console.print("\n[bold]Slash commands (/agentpack, /agentpack-learn)[/]")
339
+ for filename in ("agentpack.md", "agentpack-learn.md"):
340
+ local_cmd = root / ".claude" / "commands" / filename
341
+ global_cmd = Path.home() / ".claude" / "commands" / filename
342
+ if local_cmd.exists():
343
+ console.print(f" [green]✓[/] Slash command installed (local): {local_cmd}")
344
+ else:
345
+ console.print(
346
+ f" [dim]-[/] Slash command not installed locally: {local_cmd}"
347
+ "run: agentpack install --agent claude"
348
+ )
349
+ if global_cmd.exists():
350
+ console.print(f" [green]✓[/] Slash command installed (global): {global_cmd}")
351
+ else:
352
+ console.print(
353
+ f" [dim]-[/] Slash command not installed globally: {global_cmd} — "
354
+ "run: agentpack install --agent claude --global"
355
+ )
349
356
 
350
357
  _print_summary(ok)
351
358
 
@@ -206,6 +206,10 @@ def _patch_agentignore(
206
206
 
207
207
  def _install_agent_integration(root, agent: str) -> dict[str, str]:
208
208
  """Install repo-local agent integration files after `agentpack init`."""
209
+ if agent == "claude":
210
+ from agentpack.commands.install import _install_slash_command
211
+
212
+ return install_agent_integration(root, agent, install_slash_command=_install_slash_command)
209
213
  return install_agent_integration(root, agent)
210
214
 
211
215
 
@@ -246,7 +250,13 @@ def _resolve_init_agent(root: Path, agent: str, *, force: bool = False) -> str:
246
250
 
247
251
  def _agent_integration_paths(agent: str) -> tuple[str, ...]:
248
252
  if agent == "claude":
249
- return ("CLAUDE.md", ".claude/settings.json", ".mcp.json")
253
+ return (
254
+ "CLAUDE.md",
255
+ ".claude/settings.json",
256
+ ".mcp.json",
257
+ ".claude/commands/agentpack.md",
258
+ ".claude/commands/agentpack-learn.md",
259
+ )
250
260
  if agent == "cursor":
251
261
  return (".cursorrules", ".cursor/rules/agentpack.mdc", ".vscode/tasks.json")
252
262
  if agent == "windsurf":
@@ -47,8 +47,8 @@ def _print_install_results(agent: str, results: dict[str, str]) -> None:
47
47
  console.print(f"[green].git/hooks/{key[4:]} {action}.[/]")
48
48
  elif key == "vscode:tasks":
49
49
  console.print(f"[green].vscode/tasks.json {action}.[/]")
50
- elif key == "/agentpack":
51
- console.print(f"[green]/agentpack slash command {action}.[/]")
50
+ elif key.startswith("/"):
51
+ console.print(f"[green]{key} slash command {action}.[/]")
52
52
  else:
53
53
  console.print(f"[green]{key} {action}.[/]")
54
54
 
@@ -66,7 +66,7 @@ def _print_dry_run_agent(agent: str) -> None:
66
66
  elif agent == "windsurf":
67
67
  console.print("\n[dim]Would patch: .windsurfrules, VS Code task, git hooks[/]")
68
68
  elif agent == "codex":
69
- console.print("\n[dim]Would patch: AGENTS.md, .codex/hooks.json, git hooks[/]")
69
+ console.print("\n[dim]Would patch: AGENTS.md, .codex/hooks.json, Codex MCP config, git hooks[/]")
70
70
  elif agent == "antigravity":
71
71
  console.print("\n[dim]Would patch: GEMINI.md, VS Code task, git hooks[/]")
72
72
  elif agent == "generic":
@@ -256,18 +256,24 @@ def register(app: typer.Typer) -> None:
256
256
  console.print(" Current repo hooks now delegate through AgentPack's safe GitAutoRepack path.")
257
257
 
258
258
 
259
- def _install_slash_command(root: Path, global_install: bool) -> str:
260
- import importlib.resources
261
-
259
+ def _install_slash_command(root: Path, global_install: bool) -> dict[str, str]:
262
260
  commands_dir = Path.home() / ".claude" / "commands" if global_install else root / ".claude" / "commands"
263
261
  commands_dir.mkdir(parents=True, exist_ok=True)
264
- dest = commands_dir / "agentpack.md"
262
+ return {
263
+ "/agentpack": _install_slash_command_file(commands_dir, "agentpack.md"),
264
+ "/agentpack-learn": _install_slash_command_file(commands_dir, "agentpack-learn.md"),
265
+ }
266
+
267
+
268
+ def _install_slash_command_file(commands_dir: Path, filename: str) -> str:
269
+ import importlib.resources
265
270
 
271
+ dest = commands_dir / filename
266
272
  try:
267
- pkg_files = importlib.resources.files("agentpack") / "data" / "agentpack.md"
273
+ pkg_files = importlib.resources.files("agentpack") / "data" / filename
268
274
  source_text = pkg_files.read_text(encoding="utf-8")
269
275
  except Exception:
270
- source_text = (Path(__file__).parent.parent / "data" / "agentpack.md").read_text(encoding="utf-8")
276
+ source_text = (Path(__file__).parent.parent / "data" / filename).read_text(encoding="utf-8")
271
277
 
272
278
  existed = dest.exists()
273
279
  if existed and dest.read_text(encoding="utf-8") == source_text:
@@ -248,6 +248,8 @@ def register(app: typer.Typer) -> None:
248
248
  "learn",
249
249
  {
250
250
  "task": report.task,
251
+ "issue_references": report.issue_references,
252
+ "issue_reference_details": report.issue_reference_details,
251
253
  "changed_files": len(report.source_files),
252
254
  "concepts": report.concepts,
253
255
  "selected_hits": len(report.selected_hits),
@@ -9,6 +9,7 @@ from rich import box
9
9
 
10
10
  from agentpack.commands._shared import _root, console
11
11
  from agentpack.core.config import load_config
12
+ from agentpack.session.references import merge_issue_reference_objects, merge_issue_references
12
13
  from agentpack.session.events import read_events
13
14
 
14
15
 
@@ -26,8 +27,29 @@ def register(app: typer.Typer) -> None:
26
27
  for concept in (event.get("concepts") or [])
27
28
  if isinstance(concept, str)
28
29
  )
30
+ issue_references = merge_issue_references(
31
+ ref
32
+ for event in events
33
+ for ref in (event.get("issue_references") or [])
34
+ if isinstance(ref, str)
35
+ )
36
+ top_issue_references = Counter(
37
+ ref
38
+ for event in events
39
+ for ref in (event.get("issue_references") or [])
40
+ if isinstance(ref, str)
41
+ ).most_common(20)
42
+ issue_reference_details = merge_issue_reference_objects(
43
+ item
44
+ for event in events
45
+ for item in (event.get("issue_reference_details") or [])
46
+ if isinstance(item, dict)
47
+ )
29
48
  payload = {
30
49
  "recent_tasks": tasks[-20:],
50
+ "recent_issue_references": issue_references[-20:],
51
+ "issue_reference_details": [item.to_dict() for item in issue_reference_details[-20:]],
52
+ "top_issue_references": top_issue_references,
31
53
  "top_concepts": concepts.most_common(20),
32
54
  "event_count": len(events),
33
55
  }
@@ -40,6 +62,15 @@ def register(app: typer.Typer) -> None:
40
62
  table.add_row("events", str(len(events)))
41
63
  for task in tasks[-10:]:
42
64
  table.add_row("task", task)
65
+ for ref in issue_references[-10:]:
66
+ table.add_row("issue", ref)
67
+ for item in issue_reference_details[-10:]:
68
+ label = item.ref
69
+ if item.title:
70
+ label += f" — {item.title}"
71
+ if item.state:
72
+ label += f" ({item.state})"
73
+ table.add_row("issue detail", label)
43
74
  for concept, count in concepts.most_common(10):
44
75
  table.add_row("concept", f"{concept} ({count})")
45
76
  console.print(table)
@@ -0,0 +1,93 @@
1
+ from __future__ import annotations
2
+
3
+ import subprocess
4
+
5
+ import typer
6
+
7
+ from agentpack.commands._shared import console, _root
8
+ from agentpack.commands.install import (
9
+ _install_slash_command,
10
+ _print_global_template_results,
11
+ _print_install_results,
12
+ )
13
+ from agentpack.integrations import global_install as global_hooks
14
+ from agentpack.integrations.agents import SUPPORTED_AGENTS, expand_agents, install_agent_integration
15
+
16
+
17
+ def register(app: typer.Typer) -> None:
18
+ @app.command()
19
+ def upgrade(
20
+ agent: str = typer.Option(
21
+ "auto",
22
+ "--agent",
23
+ help=f"Agent integration to refresh after package upgrade ({' | '.join(SUPPORTED_AGENTS)}).",
24
+ ),
25
+ repair_existing_global_hooks: bool = typer.Option(
26
+ True,
27
+ "--repair-existing-global-hooks/--no-repair-existing-global-hooks",
28
+ help="Refresh already-installed global git/shell hooks after upgrading AgentPack.",
29
+ ),
30
+ ) -> None:
31
+ """Refresh existing AgentPack repo/global integration surfaces after a package upgrade."""
32
+ root = _root()
33
+ if agent not in SUPPORTED_AGENTS:
34
+ console.print(f"[yellow]Unknown agent: {agent}. Supported: {', '.join(SUPPORTED_AGENTS)}[/]")
35
+ raise typer.Exit(1)
36
+
37
+ agents = expand_agents(agent, root)
38
+ if agent == "auto":
39
+ console.print(f"[dim]Auto-detected agent: {agents[0]}[/]")
40
+
41
+ for selected in agents:
42
+ console.print(f"\n[bold]{selected}[/]")
43
+ results = install_agent_integration(
44
+ root,
45
+ selected,
46
+ install_slash_command=_install_slash_command,
47
+ )
48
+ _print_install_results(selected, results)
49
+
50
+ if repair_existing_global_hooks:
51
+ _repair_existing_global_hooks()
52
+
53
+ console.print("\n[bold green]Upgrade integration refresh complete.[/]")
54
+ console.print(f" Verify with: [bold]agentpack doctor --agent {agent}[/]")
55
+
56
+
57
+ def _repair_existing_global_hooks() -> None:
58
+ repaired = False
59
+ if _global_git_templates_are_installed():
60
+ repaired = True
61
+ console.print("\n[bold]Refreshing existing global git template hooks...[/]")
62
+ hook_results = global_hooks.install_git_template_hooks()
63
+ _print_global_template_results(hook_results)
64
+ git_cfg_action = global_hooks.configure_git_template_dir(dry_run=False)
65
+ console.print(f"[green]git config --global init.templateDir {git_cfg_action}.[/]")
66
+
67
+ rc_file = global_hooks._detect_rc_file()
68
+ if rc_file is not None and rc_file.exists() and global_hooks._SHELL_MARKER_START in rc_file.read_text(encoding="utf-8"):
69
+ repaired = True
70
+ console.print("\n[bold]Refreshing existing shell cd hook...[/]")
71
+ action, path = global_hooks.install_shell_hook(rc_file)
72
+ if path is not None:
73
+ console.print(f"[green]{path} {action}.[/]")
74
+
75
+ if not repaired:
76
+ console.print("\n[dim]No existing global AgentPack hooks found to refresh.[/]")
77
+
78
+
79
+ def _global_git_templates_are_installed() -> bool:
80
+ hooks_dir = global_hooks._GIT_TEMPLATE_DIR / "hooks"
81
+ for name in global_hooks._HOOK_SCRIPTS:
82
+ hook_path = hooks_dir / name
83
+ if hook_path.exists() and global_hooks._AGENTPACK_MARKER in hook_path.read_text(encoding="utf-8"):
84
+ return True
85
+ try:
86
+ result = subprocess.run(
87
+ ["git", "config", "--global", "init.templateDir"],
88
+ capture_output=True,
89
+ text=True,
90
+ )
91
+ except Exception:
92
+ return False
93
+ return result.stdout.strip() == str(global_hooks._GIT_TEMPLATE_DIR)
@@ -73,6 +73,15 @@ def fallback_agent_guidance() -> str:
73
73
  )
74
74
 
75
75
 
76
+ def prompt_quality_guidance() -> str:
77
+ return (
78
+ "Prompt hygiene: for agent-mode coding work, prefer `Task`, `Files`, "
79
+ "`Acceptance criteria`, `Constraints`, `Validation`, and `Output` sections. "
80
+ "For short/simple questions, use Ask/Chat mode instead of agent mode. "
81
+ "Keep routine responses concise unless the user asks for detail."
82
+ )
83
+
84
+
76
85
  def installed_cli_status() -> dict[str, object]:
77
86
  binary = shutil.which("agentpack")
78
87
  status: dict[str, object] = {
@@ -113,7 +122,7 @@ def _commands_from_help(text: str) -> list[str]:
113
122
  commands: set[str] = set()
114
123
  known = set(available_cli_commands())
115
124
  for line in text.splitlines():
116
- stripped = line.strip()
125
+ stripped = line.strip().strip("│").strip()
117
126
  if not stripped:
118
127
  continue
119
128
  first = stripped.split()[0].strip("`")
@@ -0,0 +1,66 @@
1
+ ---
2
+ description: Learn one thing from the current local AgentPack session context.
3
+ ---
4
+
5
+ # AgentPack Learn
6
+
7
+ Use current local agent session context to teach what the user asks to learn.
8
+
9
+ Keep this prompt prefix stable for caching. Do not move the user learning statement above the final line.
10
+
11
+ ## Freshness Check
12
+
13
+ Check whether current AgentPack context is present and current:
14
+
15
+ ```bash
16
+ agentpack status
17
+ ```
18
+
19
+ If `agentpack status` fails, says context is stale/missing, or `.agentpack/context.compact.md` is absent, refresh once:
20
+
21
+ ```bash
22
+ agentpack pack --task auto
23
+ ```
24
+
25
+ Do not loop on refresh. If refresh fails, continue from whatever local context exists and state that context may be stale.
26
+
27
+ ## Context Source
28
+
29
+ Use only local files first:
30
+
31
+ ```bash
32
+ test -f .agentpack/context.compact.md && sed -n '1,220p' .agentpack/context.compact.md
33
+ test -f .agentpack/task.md && sed -n '1,40p' .agentpack/task.md
34
+ test -f .agentpack/session.json && sed -n '1,120p' .agentpack/session.json
35
+ test -f .agentpack/learning.md && sed -n '1,220p' .agentpack/learning.md
36
+ test -f .agentpack/agent-lessons.md && sed -n '1,160p' .agentpack/agent-lessons.md
37
+ test -f .agentpack/skills-progress.json && sed -n '1,120p' .agentpack/skills-progress.json
38
+ test -f .agentpack/session-events.jsonl && tail -n 40 .agentpack/session-events.jsonl
39
+ ```
40
+
41
+ Use `.agentpack/context.md` only when compact context lacks needed detail.
42
+ Do not invent repo facts not present in local context or checked files.
43
+
44
+ ## Teaching Modes
45
+
46
+ Choose the smallest mode that matches the user's learning statement.
47
+
48
+ Learning Curve Destroyer: use when user wants to become functional fast. You only have 4 hours with them and will never see them again. No theory without practical use. No lists. Tell them what to learn first, what to ignore, and one exercise that puts them ahead of most people studying for months.
49
+
50
+ Real Error Simulator: use when user wants practice with a concept. Do not explain first. Drop them into a real situation from local context where they would use it and likely get it wrong. When they make a mistake, ask a question that exposes where thinking broke. Reveal answer only after at least two tries. Repeat until they get it right without hesitating.
51
+
52
+ Confusion Breaker: use when user says content or context is confusing. Before explaining, give one sentence that makes everything click. Explain only that sentence first using an everyday analogy with zero technical terms. Ask 3 questions only someone who truly gets it can answer. Do not move on until they pass all three.
53
+
54
+ Personal Learning Path: use when user gives a real goal, desired result, deadline, or current knowledge. Build a 7-day path. Each day has one 45-minute task, a clear correctness check, and what not to do that day. If path does not lead to goal, rebuild it.
55
+
56
+ Forced Feynman Method: use when user says they studied something or wants to explain back. Let them explain as if to a 10-year-old. Stop them when they use unknown words, skip reasoning, or oversimplify until wrong. End with exactly what mistakes reveal about weak understanding.
57
+
58
+ ## Output Rules
59
+
60
+ - Be practical and interactive.
61
+ - Ground examples in local agent session context when useful.
62
+ - Ask for missing goal/deadline/current-knowledge only if needed for the selected mode.
63
+ - Do not dump generic theory.
64
+ - Do not produce long lists unless the selected mode explicitly requires a 7-day path.
65
+
66
+ User learning statement: $ARGUMENTS
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentpack",
3
- "version": "0.3.26",
3
+ "version": "0.3.29",
4
4
  "description": "Thin Codex plugin for AgentPack ranked repo context.",
5
5
  "author": {
6
6
  "name": "AgentPack",
@@ -29,6 +29,7 @@
29
29
  "defaultPrompt": [
30
30
  "@agentpack-route fix auth token expiry",
31
31
  "@agentpack-pack fix auth token expiry",
32
+ "@agentpack-learn retry handling in this repo",
32
33
  "@agentpack-review"
33
34
  ],
34
35
  "brandColor": "#1F6FEB"
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: agentpack-learn
3
+ description: Learn one thing from current local AgentPack session context.
4
+ ---
5
+
6
+ # AgentPack Learn
7
+
8
+ Use when the user invokes `/agentpack-learn <statement>` or `@agentpack-learn <statement>`.
9
+
10
+ Use current local agent session context to teach what the user asks to learn.
11
+
12
+ Keep prompt prefix stable for caching. Treat the user's learning statement as the only variable and keep it at the end when constructing any reusable prompt.
13
+
14
+ ## Freshness Check
15
+
16
+ Check whether current AgentPack context is present and current:
17
+
18
+ ```bash
19
+ agentpack status
20
+ ```
21
+
22
+ If `agentpack status` fails, says context is stale/missing, or `.agentpack/context.compact.md` is absent, refresh once:
23
+
24
+ ```bash
25
+ agentpack pack --task auto
26
+ ```
27
+
28
+ Do not loop on refresh. If refresh fails, continue from whatever local context exists and state that context may be stale.
29
+
30
+ ## Context Source
31
+
32
+ Use only local files first:
33
+
34
+ ```bash
35
+ test -f .agentpack/context.compact.md && sed -n '1,220p' .agentpack/context.compact.md
36
+ test -f .agentpack/task.md && sed -n '1,40p' .agentpack/task.md
37
+ test -f .agentpack/session.json && sed -n '1,120p' .agentpack/session.json
38
+ test -f .agentpack/learning.md && sed -n '1,220p' .agentpack/learning.md
39
+ test -f .agentpack/agent-lessons.md && sed -n '1,160p' .agentpack/agent-lessons.md
40
+ test -f .agentpack/skills-progress.json && sed -n '1,120p' .agentpack/skills-progress.json
41
+ test -f .agentpack/session-events.jsonl && tail -n 40 .agentpack/session-events.jsonl
42
+ ```
43
+
44
+ Use `.agentpack/context.md` only when compact context lacks needed detail.
45
+ Do not invent repo facts not present in local context or checked files.
46
+
47
+ ## Teaching Modes
48
+
49
+ Choose the smallest mode that matches the user's learning statement.
50
+
51
+ Learning Curve Destroyer: use when user wants to become functional fast. You only have 4 hours with them and will never see them again. No theory without practical use. No lists. Tell them what to learn first, what to ignore, and one exercise that puts them ahead of most people studying for months.
52
+
53
+ Real Error Simulator: use when user wants practice with a concept. Do not explain first. Drop them into a real situation from local context where they would use it and likely get it wrong. When they make a mistake, ask a question that exposes where thinking broke. Reveal answer only after at least two tries. Repeat until they get it right without hesitating.
54
+
55
+ Confusion Breaker: use when user says content or context is confusing. Before explaining, give one sentence that makes everything click. Explain only that sentence first using an everyday analogy with zero technical terms. Ask 3 questions only someone who truly gets it can answer. Do not move on until they pass all three.
56
+
57
+ Personal Learning Path: use when user gives a real goal, desired result, deadline, or current knowledge. Build a 7-day path. Each day has one 45-minute task, a clear correctness check, and what not to do that day. If path does not lead to goal, rebuild it.
58
+
59
+ Forced Feynman Method: use when user says they studied something or wants to explain back. Let them explain as if to a 10-year-old. Stop them when they use unknown words, skip reasoning, or oversimplify until wrong. End with exactly what mistakes reveal about weak understanding.
60
+
61
+ ## Output Rules
62
+
63
+ - Be practical and interactive.
64
+ - Ground examples in local agent session context when useful.
65
+ - Ask for missing goal/deadline/current-knowledge only if needed for the selected mode.
66
+ - Do not dump generic theory.
67
+ - Do not produce long lists unless the selected mode explicitly requires a 7-day path.
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import re
4
4
  from pathlib import Path
5
5
 
6
- from agentpack.core.command_surface import fallback_agent_guidance, refresh_commands
6
+ from agentpack.core.command_surface import fallback_agent_guidance, prompt_quality_guidance, refresh_commands
7
7
  from agentpack.integrations.git_hooks import install_git_hooks
8
8
  from agentpack.integrations.vscode_tasks import install_vscode_tasks
9
9
 
@@ -31,7 +31,9 @@ At the start of every coding task:
31
31
 
32
32
  When the user switches to a different coding task, update `.agentpack/task.md`, then call MCP again or rerun the refresh command before editing.
33
33
 
34
- {fallback_agent_guidance()}{thread_line}
34
+ {fallback_agent_guidance()}
35
+
36
+ {prompt_quality_guidance()}{thread_line}
35
37
  <!-- agentpack:block:end -->"""
36
38
 
37
39
  _BLOCK_RE = re.compile(
@@ -4,7 +4,7 @@ import json
4
4
  import re
5
5
  from pathlib import Path
6
6
 
7
- from agentpack.core.command_surface import fallback_agent_guidance, refresh_commands
7
+ from agentpack.core.command_surface import fallback_agent_guidance, prompt_quality_guidance, refresh_commands
8
8
 
9
9
 
10
10
  def _agentpack_block() -> str:
@@ -59,7 +59,9 @@ agentpack pack --agent claude --task auto
59
59
 
60
60
  Then read `.agentpack/context.claude.md`.
61
61
 
62
- {fallback_agent_guidance()}{thread_line}
62
+ {fallback_agent_guidance()}
63
+
64
+ {prompt_quality_guidance()}{thread_line}
63
65
  <!-- agentpack:end -->"""
64
66
 
65
67