agentpack-cli 0.3.24__tar.gz → 0.3.25__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 (160) hide show
  1. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/PKG-INFO +20 -6
  2. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/README.md +19 -5
  3. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/pyproject.toml +1 -1
  4. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/__init__.py +1 -1
  5. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/cli.py +2 -0
  6. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/ci_cmd.py +3 -1
  7. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/release_check.py +33 -0
  8. agentpack_cli-0.3.25/src/agentpack/commands/upgrade.py +38 -0
  9. agentpack_cli-0.3.25/src/agentpack/data/codex_plugin/.codex-plugin/plugin.json +36 -0
  10. agentpack_cli-0.3.25/src/agentpack/data/codex_plugin/skills/agentpack-pack.md +30 -0
  11. agentpack_cli-0.3.25/src/agentpack/data/codex_plugin/skills/agentpack-refresh.md +29 -0
  12. agentpack_cli-0.3.25/src/agentpack/data/codex_plugin/skills/agentpack-review.md +32 -0
  13. agentpack_cli-0.3.25/src/agentpack/data/codex_plugin/skills/agentpack-route.md +24 -0
  14. agentpack_cli-0.3.25/src/agentpack/data/codex_plugin/skills/agentpack.md +29 -0
  15. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/installers/codex.py +62 -0
  16. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/integrations/agents.py +5 -1
  17. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/.gitignore +0 -0
  18. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/LICENSE +0 -0
  19. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/adapters/__init__.py +0 -0
  20. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/adapters/antigravity.py +0 -0
  21. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/adapters/base.py +0 -0
  22. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/adapters/claude.py +0 -0
  23. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/adapters/codex.py +0 -0
  24. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/adapters/cursor.py +0 -0
  25. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/adapters/detect.py +0 -0
  26. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/adapters/generic.py +0 -0
  27. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/adapters/windsurf.py +0 -0
  28. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/__init__.py +0 -0
  29. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/dependency_graph.py +0 -0
  30. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/go_imports.py +0 -0
  31. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/java_imports.py +0 -0
  32. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/js_ts_imports.py +0 -0
  33. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/monorepo.py +0 -0
  34. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/naming_signals.py +0 -0
  35. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/python_ast.py +0 -0
  36. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/python_imports.py +0 -0
  37. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/ranking.py +0 -0
  38. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/repo_map.py +0 -0
  39. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/role_inference.py +0 -0
  40. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/rust_imports.py +0 -0
  41. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/symbols.py +0 -0
  42. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/task_classifier.py +0 -0
  43. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/analysis/tests.py +0 -0
  44. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/application/__init__.py +0 -0
  45. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/application/pack_service.py +0 -0
  46. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/__init__.py +0 -0
  47. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/_shared.py +0 -0
  48. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/benchmark.py +0 -0
  49. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/claude_cmd.py +0 -0
  50. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/compress_output.py +0 -0
  51. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/dashboard.py +0 -0
  52. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/dev_check.py +0 -0
  53. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/diagnose_selection.py +0 -0
  54. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/diff.py +0 -0
  55. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/doctor.py +0 -0
  56. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/eval_cmd.py +0 -0
  57. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/explain.py +0 -0
  58. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/guard.py +0 -0
  59. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/hook_cmd.py +0 -0
  60. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/ignore_cmd.py +0 -0
  61. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/init.py +0 -0
  62. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/install.py +0 -0
  63. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/learn.py +0 -0
  64. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/mcp_cmd.py +0 -0
  65. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/memory.py +0 -0
  66. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/migrate.py +0 -0
  67. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/monitor.py +0 -0
  68. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/next_cmd.py +0 -0
  69. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/pack.py +0 -0
  70. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/perf.py +0 -0
  71. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/quickstart.py +0 -0
  72. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/release_cmd.py +0 -0
  73. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/repair.py +0 -0
  74. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/retrieve.py +0 -0
  75. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/route.py +0 -0
  76. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/scan.py +0 -0
  77. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/skills.py +0 -0
  78. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/start_cmd.py +0 -0
  79. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/state_cmd.py +0 -0
  80. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/stats.py +0 -0
  81. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/status.py +0 -0
  82. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/summarize.py +0 -0
  83. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/task_cmd.py +0 -0
  84. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/threads.py +0 -0
  85. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/tune.py +0 -0
  86. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/verify_wheel.py +0 -0
  87. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/watch.py +0 -0
  88. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/workflow_cmd.py +0 -0
  89. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/commands/wrap.py +0 -0
  90. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/__init__.py +0 -0
  91. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/bootstrap.py +0 -0
  92. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/cache.py +0 -0
  93. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/changed_paths.py +0 -0
  94. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/config.py +0 -0
  95. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/context_pack.py +0 -0
  96. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/diff.py +0 -0
  97. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/evals.py +0 -0
  98. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/execution_state.py +0 -0
  99. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/git.py +0 -0
  100. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/git_hooks.py +0 -0
  101. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/global_install.py +0 -0
  102. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/ignore.py +0 -0
  103. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/loop_protocol.py +0 -0
  104. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/merkle.py +0 -0
  105. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/models.py +0 -0
  106. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/modes.py +0 -0
  107. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/pack_registry.py +0 -0
  108. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/redactor.py +0 -0
  109. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/scanner.py +0 -0
  110. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/snapshot.py +0 -0
  111. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/task_freshness.py +0 -0
  112. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/thread_context.py +0 -0
  113. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/token_estimator.py +0 -0
  114. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/core/vscode_tasks.py +0 -0
  115. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/dashboard/__init__.py +0 -0
  116. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/dashboard/collectors.py +0 -0
  117. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/dashboard/models.py +0 -0
  118. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/dashboard/renderers.py +0 -0
  119. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/data/agentpack.md +0 -0
  120. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/installers/__init__.py +0 -0
  121. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/installers/antigravity.py +0 -0
  122. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/installers/claude.py +0 -0
  123. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/installers/cursor.py +0 -0
  124. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/installers/windsurf.py +0 -0
  125. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/integrations/__init__.py +0 -0
  126. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/integrations/git_hooks.py +0 -0
  127. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/integrations/global_install.py +0 -0
  128. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/integrations/platform.py +0 -0
  129. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/integrations/vscode_tasks.py +0 -0
  130. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/learning/__init__.py +0 -0
  131. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/learning/collector.py +0 -0
  132. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/learning/extractor.py +0 -0
  133. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/learning/feedback.py +0 -0
  134. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/learning/lesson_ranker.py +0 -0
  135. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/learning/models.py +0 -0
  136. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/learning/provider.py +0 -0
  137. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/learning/quality.py +0 -0
  138. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/learning/renderers.py +0 -0
  139. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/learning/skill_map.py +0 -0
  140. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/mcp_server.py +0 -0
  141. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/output_compression/__init__.py +0 -0
  142. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/output_compression/core.py +0 -0
  143. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/renderers/__init__.py +0 -0
  144. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/renderers/compact.py +0 -0
  145. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/renderers/markdown.py +0 -0
  146. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/renderers/receipts.py +0 -0
  147. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/router/__init__.py +0 -0
  148. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/router/discovery.py +0 -0
  149. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/router/models.py +0 -0
  150. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/router/parser.py +0 -0
  151. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/router/prompt_builder.py +0 -0
  152. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/router/scoring.py +0 -0
  153. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/router/service.py +0 -0
  154. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/router/skills_index.py +0 -0
  155. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/session/__init__.py +0 -0
  156. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/session/events.py +0 -0
  157. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/session/state.py +0 -0
  158. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/summaries/__init__.py +0 -0
  159. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/src/agentpack/summaries/base.py +0 -0
  160. {agentpack_cli-0.3.24 → agentpack_cli-0.3.25}/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.24
3
+ Version: 0.3.25
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/
@@ -61,7 +61,9 @@ Description-Content-Type: text/markdown
61
61
 
62
62
  <p align="center">
63
63
  <a href="https://pypi.org/project/agentpack-cli/"><img alt="PyPI version" src="https://img.shields.io/pypi/v/agentpack-cli.svg"></a>
64
+ <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>
64
65
  <a href="https://www.npmjs.com/package/@vishal2612200/agentpack"><img alt="npm version" src="https://img.shields.io/npm/v/@vishal2612200/agentpack.svg"></a>
66
+ <a href="https://www.npmjs.com/package/@vishal2612200/agentpack"><img alt="npm downloads" src="https://img.shields.io/npm/dm/@vishal2612200/agentpack.svg"></a>
65
67
  <a href="https://github.com/vishal2612200/agentpack/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/vishal2612200/agentpack/actions/workflows/ci.yml/badge.svg"></a>
66
68
  <a href="https://opensource.org/licenses/MIT"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg"></a>
67
69
  </p>
@@ -69,6 +71,8 @@ Description-Content-Type: text/markdown
69
71
  <p align="center">
70
72
  <code>local preflight</code>
71
73
  <code>ranked files</code>
74
+ <code>skill routing</code>
75
+ <code>warm cache</code>
72
76
  <code>tests + commands</code>
73
77
  <code>receipts</code>
74
78
  <code>no cloud index</code>
@@ -83,6 +87,7 @@ AgentPack does the repo-orientation pass first.
83
87
  ```text
84
88
  agentpack route --task "fix auth token expiry"
85
89
  -> files that probably matter
90
+ -> skills and rules that fit the task
86
91
  -> tests that probably prove it
87
92
  -> rules, commands, warnings
88
93
  -> compact context before the agent edits
@@ -101,7 +106,9 @@ No cloud index. No embeddings. No model calls for scan/rank/pack. Just local rep
101
106
 
102
107
  It is not a repo dump. It is not a second brain. It is not a promise that your agent will be right.
103
108
 
104
- It is a preflight map: likely files, likely tests, repo rules, commands, warnings, and a compact pack your agent can inspect before touching code.
109
+ It is a preflight map: likely files, likely tests, the right local skill or rule, commands, warnings, and a compact pack your agent can inspect before touching code.
110
+
111
+ The first run builds local summaries and repo signals. Later runs reuse that cache, so agents do less repeat discovery and spend more of their budget on the actual change.
105
112
 
106
113
  ## Quick Start
107
114
 
@@ -145,6 +152,7 @@ agentpack route --task "fix billing webhook retry handling"
145
152
  ```
146
153
 
147
154
  AgentPack returns likely files, tests, rules, commands, and warnings without changing source files.
155
+ It also recommends matching skills or agent rules when the task points at a known workflow, framework, language, or repo convention.
148
156
 
149
157
  Build context pack next:
150
158
 
@@ -154,13 +162,16 @@ agentpack pack --task auto
154
162
  ```
155
163
 
156
164
  AgentPack writes local context under `.agentpack/`, including selected files, omitted-file receipts, freshness checks, and token stats.
165
+ It reuses cached file summaries and snapshot metadata so repeated packs do not start from zero.
157
166
 
158
167
  ## What AgentPack Gives Your Agent
159
168
 
160
169
  - ranked files for current task
170
+ - skill and rule routing for current task
161
171
  - likely tests and commands
162
172
  - repo rules and agent instructions
163
173
  - compact context pack under budget
174
+ - cached summaries for faster repeated orientation
164
175
  - omitted-file receipts for review
165
176
  - freshness warnings when task or git state changes
166
177
  - local benchmark data when selected context misses real changed files
@@ -229,7 +240,8 @@ See [`docs/agent-plugins.md`](docs/agent-plugins.md) and [`docs/codex-plugin.md`
229
240
  | Repo dumpers | Dump selected or all files | AgentPack ranks files by task |
230
241
  | Coding agents | Edit code | AgentPack prepares context before editing |
231
242
  | IDE search | Finds files on demand | AgentPack pre-routes before agent starts |
232
- | Skills/rules | Change agent behavior | AgentPack changes the context the agent sees |
243
+ | Skills/rules | Change agent behavior | AgentPack routes the matching skill or rule for the task |
244
+ | Cache warmers | Speed repeated scans | AgentPack reuses summaries and snapshots inside the context workflow |
233
245
 
234
246
  ## When To Use It
235
247
 
@@ -241,6 +253,8 @@ Use AgentPack when:
241
253
  - CI or PR review needs reproducible context
242
254
  - agents waste tool calls opening irrelevant files
243
255
  - tasks often miss tests, config, generated rules, or repo conventions
256
+ - teams have useful skills/rules but agents do not reliably pick the right one
257
+ - repeated agent sessions keep rediscovering the same repo structure
244
258
 
245
259
  Do not use AgentPack when:
246
260
 
@@ -252,9 +266,9 @@ Do not use AgentPack when:
252
266
 
253
267
  ## How It Works
254
268
 
255
- AgentPack scans repo locally, combines filename, git, config, dependency, summary, and benchmark signals, ranks likely files for task, then renders a compact context pack.
269
+ AgentPack scans repo locally, builds and reuses file summaries, indexes local skills and rules, combines filename, git, config, dependency, summary, and benchmark signals, ranks likely files for task, then renders a compact context pack.
256
270
 
257
- It can expose same workflow through CLI, markdown files, MCP tools, hooks, and CI.
271
+ It can expose the same workflow through CLI, markdown files, MCP tools, hooks, plugins, and CI.
258
272
 
259
273
  Deep dive: [`docs/architecture.md`](docs/architecture.md), [`docs/how-agentpack-works.md`](docs/how-agentpack-works.md), and [`docs/commands.md`](docs/commands.md).
260
274
 
@@ -307,7 +321,7 @@ pipx ensurepath
307
321
 
308
322
  ## Status
309
323
 
310
- Alpha: `0.3.24`.
324
+ Alpha: `0.3.25`.
311
325
 
312
326
  Works, tested, and used in real sessions. Python and JavaScript/TypeScript have strongest support. APIs may change before 1.0.
313
327
 
@@ -14,7 +14,9 @@
14
14
 
15
15
  <p align="center">
16
16
  <a href="https://pypi.org/project/agentpack-cli/"><img alt="PyPI version" src="https://img.shields.io/pypi/v/agentpack-cli.svg"></a>
17
+ <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>
17
18
  <a href="https://www.npmjs.com/package/@vishal2612200/agentpack"><img alt="npm version" src="https://img.shields.io/npm/v/@vishal2612200/agentpack.svg"></a>
19
+ <a href="https://www.npmjs.com/package/@vishal2612200/agentpack"><img alt="npm downloads" src="https://img.shields.io/npm/dm/@vishal2612200/agentpack.svg"></a>
18
20
  <a href="https://github.com/vishal2612200/agentpack/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/vishal2612200/agentpack/actions/workflows/ci.yml/badge.svg"></a>
19
21
  <a href="https://opensource.org/licenses/MIT"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg"></a>
20
22
  </p>
@@ -22,6 +24,8 @@
22
24
  <p align="center">
23
25
  <code>local preflight</code>
24
26
  <code>ranked files</code>
27
+ <code>skill routing</code>
28
+ <code>warm cache</code>
25
29
  <code>tests + commands</code>
26
30
  <code>receipts</code>
27
31
  <code>no cloud index</code>
@@ -36,6 +40,7 @@ AgentPack does the repo-orientation pass first.
36
40
  ```text
37
41
  agentpack route --task "fix auth token expiry"
38
42
  -> files that probably matter
43
+ -> skills and rules that fit the task
39
44
  -> tests that probably prove it
40
45
  -> rules, commands, warnings
41
46
  -> compact context before the agent edits
@@ -54,7 +59,9 @@ No cloud index. No embeddings. No model calls for scan/rank/pack. Just local rep
54
59
 
55
60
  It is not a repo dump. It is not a second brain. It is not a promise that your agent will be right.
56
61
 
57
- It is a preflight map: likely files, likely tests, repo rules, commands, warnings, and a compact pack your agent can inspect before touching code.
62
+ It is a preflight map: likely files, likely tests, the right local skill or rule, commands, warnings, and a compact pack your agent can inspect before touching code.
63
+
64
+ The first run builds local summaries and repo signals. Later runs reuse that cache, so agents do less repeat discovery and spend more of their budget on the actual change.
58
65
 
59
66
  ## Quick Start
60
67
 
@@ -98,6 +105,7 @@ agentpack route --task "fix billing webhook retry handling"
98
105
  ```
99
106
 
100
107
  AgentPack returns likely files, tests, rules, commands, and warnings without changing source files.
108
+ It also recommends matching skills or agent rules when the task points at a known workflow, framework, language, or repo convention.
101
109
 
102
110
  Build context pack next:
103
111
 
@@ -107,13 +115,16 @@ agentpack pack --task auto
107
115
  ```
108
116
 
109
117
  AgentPack writes local context under `.agentpack/`, including selected files, omitted-file receipts, freshness checks, and token stats.
118
+ It reuses cached file summaries and snapshot metadata so repeated packs do not start from zero.
110
119
 
111
120
  ## What AgentPack Gives Your Agent
112
121
 
113
122
  - ranked files for current task
123
+ - skill and rule routing for current task
114
124
  - likely tests and commands
115
125
  - repo rules and agent instructions
116
126
  - compact context pack under budget
127
+ - cached summaries for faster repeated orientation
117
128
  - omitted-file receipts for review
118
129
  - freshness warnings when task or git state changes
119
130
  - local benchmark data when selected context misses real changed files
@@ -182,7 +193,8 @@ See [`docs/agent-plugins.md`](docs/agent-plugins.md) and [`docs/codex-plugin.md`
182
193
  | Repo dumpers | Dump selected or all files | AgentPack ranks files by task |
183
194
  | Coding agents | Edit code | AgentPack prepares context before editing |
184
195
  | IDE search | Finds files on demand | AgentPack pre-routes before agent starts |
185
- | Skills/rules | Change agent behavior | AgentPack changes the context the agent sees |
196
+ | Skills/rules | Change agent behavior | AgentPack routes the matching skill or rule for the task |
197
+ | Cache warmers | Speed repeated scans | AgentPack reuses summaries and snapshots inside the context workflow |
186
198
 
187
199
  ## When To Use It
188
200
 
@@ -194,6 +206,8 @@ Use AgentPack when:
194
206
  - CI or PR review needs reproducible context
195
207
  - agents waste tool calls opening irrelevant files
196
208
  - tasks often miss tests, config, generated rules, or repo conventions
209
+ - teams have useful skills/rules but agents do not reliably pick the right one
210
+ - repeated agent sessions keep rediscovering the same repo structure
197
211
 
198
212
  Do not use AgentPack when:
199
213
 
@@ -205,9 +219,9 @@ Do not use AgentPack when:
205
219
 
206
220
  ## How It Works
207
221
 
208
- AgentPack scans repo locally, combines filename, git, config, dependency, summary, and benchmark signals, ranks likely files for task, then renders a compact context pack.
222
+ AgentPack scans repo locally, builds and reuses file summaries, indexes local skills and rules, combines filename, git, config, dependency, summary, and benchmark signals, ranks likely files for task, then renders a compact context pack.
209
223
 
210
- It can expose same workflow through CLI, markdown files, MCP tools, hooks, and CI.
224
+ It can expose the same workflow through CLI, markdown files, MCP tools, hooks, plugins, and CI.
211
225
 
212
226
  Deep dive: [`docs/architecture.md`](docs/architecture.md), [`docs/how-agentpack-works.md`](docs/how-agentpack-works.md), and [`docs/commands.md`](docs/commands.md).
213
227
 
@@ -260,7 +274,7 @@ pipx ensurepath
260
274
 
261
275
  ## Status
262
276
 
263
- Alpha: `0.3.24`.
277
+ Alpha: `0.3.25`.
264
278
 
265
279
  Works, tested, and used in real sessions. Python and JavaScript/TypeScript have strongest support. APIs may change before 1.0.
266
280
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agentpack-cli"
3
- version = "0.3.24"
3
+ version = "0.3.25"
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.24"
3
+ __version__ = "0.3.25"
@@ -42,6 +42,7 @@ from agentpack.commands import (
42
42
  task_cmd,
43
43
  threads,
44
44
  tune,
45
+ upgrade,
45
46
  verify_wheel,
46
47
  watch,
47
48
  wrap,
@@ -95,6 +96,7 @@ for mod in [
95
96
  diagnose_selection,
96
97
  eval_cmd,
97
98
  tune,
99
+ upgrade,
98
100
  watch,
99
101
  claude_cmd,
100
102
  benchmark,
@@ -79,6 +79,8 @@ jobs:
79
79
  if: github.event_name == 'push'
80
80
  steps:
81
81
  - uses: actions/checkout@v4
82
+ with:
83
+ fetch-depth: 0
82
84
  - uses: actions/setup-python@v5
83
85
  with:
84
86
  python-version: "3.11"
@@ -86,5 +88,5 @@ jobs:
86
88
  with:
87
89
  node-version: "20"
88
90
  - run: python -m pip install -e ".[dev]" build
89
- - run: python -m agentpack.cli release-check
91
+ - run: python -m agentpack.cli release-check --profile auto
90
92
  """
@@ -145,11 +145,44 @@ def _pytest_args_for_profile(root: Path, profile: str) -> list[str]:
145
145
 
146
146
 
147
147
  def _changed_files(root: Path) -> list[str]:
148
+ ci_changed = _github_event_changed_files(root)
149
+ if ci_changed:
150
+ return ci_changed
148
151
  tracked = _git_lines(root, ["git", "diff", "--name-only", "HEAD", "--"])
149
152
  untracked = _git_lines(root, ["git", "ls-files", "--others", "--exclude-standard"])
150
153
  return sorted(set(tracked + untracked))
151
154
 
152
155
 
156
+ def _github_event_changed_files(root: Path) -> list[str]:
157
+ event_path = os.environ.get("GITHUB_EVENT_PATH")
158
+ event_name = os.environ.get("GITHUB_EVENT_NAME", "")
159
+ if not event_path:
160
+ return []
161
+ try:
162
+ payload = json.loads(Path(event_path).read_text(encoding="utf-8"))
163
+ except (OSError, json.JSONDecodeError):
164
+ return []
165
+ if not isinstance(payload, dict):
166
+ return []
167
+
168
+ base = ""
169
+ head = ""
170
+ if event_name == "push":
171
+ base = str(payload.get("before") or "")
172
+ head = str(payload.get("after") or os.environ.get("GITHUB_SHA") or "")
173
+ elif event_name == "pull_request":
174
+ pull_request = payload.get("pull_request")
175
+ if isinstance(pull_request, dict):
176
+ base_ref = pull_request.get("base")
177
+ head_ref = pull_request.get("head")
178
+ if isinstance(base_ref, dict) and isinstance(head_ref, dict):
179
+ base = str(base_ref.get("sha") or "")
180
+ head = str(head_ref.get("sha") or "")
181
+ if not base or not head or set(base) == {"0"}:
182
+ return []
183
+ return _git_lines(root, ["git", "diff", "--name-only", base, head, "--"])
184
+
185
+
153
186
  def _git_lines(root: Path, command: list[str]) -> list[str]:
154
187
  result = subprocess.run(command, cwd=root, capture_output=True, text=True)
155
188
  if result.returncode != 0:
@@ -0,0 +1,38 @@
1
+ from __future__ import annotations
2
+
3
+ import typer
4
+
5
+ from agentpack.commands._shared import console, _root
6
+ from agentpack.commands.install import _install_slash_command, _print_install_results
7
+ from agentpack.integrations.agents import SUPPORTED_AGENTS, expand_agents, install_agent_integration
8
+
9
+
10
+ def register(app: typer.Typer) -> None:
11
+ @app.command()
12
+ def upgrade(
13
+ agent: str = typer.Option(
14
+ "auto",
15
+ "--agent",
16
+ help=f"Agent integration to refresh after package upgrade ({' | '.join(SUPPORTED_AGENTS)}).",
17
+ ),
18
+ ) -> None:
19
+ """Refresh the detected AgentPack IDE/agent integration after upgrading the package."""
20
+ root = _root()
21
+ if agent not in SUPPORTED_AGENTS:
22
+ console.print(f"[yellow]Unknown agent: {agent}. Supported: {', '.join(SUPPORTED_AGENTS)}[/]")
23
+ raise typer.Exit(1)
24
+
25
+ agents = expand_agents(agent, root)
26
+ if agent == "auto":
27
+ console.print(f"[dim]Auto-detected agent: {agents[0]}[/]")
28
+
29
+ for selected in agents:
30
+ console.print(f"\n[bold]{selected}[/]")
31
+ results = install_agent_integration(
32
+ root,
33
+ selected,
34
+ install_slash_command=_install_slash_command,
35
+ )
36
+ _print_install_results(selected, results)
37
+
38
+ console.print("\n[bold green]Upgrade integration refresh complete.[/]")
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "agentpack",
3
+ "version": "0.3.25",
4
+ "description": "Thin Codex plugin for AgentPack ranked repo context.",
5
+ "author": {
6
+ "name": "AgentPack",
7
+ "url": "https://github.com/vishal2612200/agentpack"
8
+ },
9
+ "homepage": "https://github.com/vishal2612200/agentpack/blob/main/docs/codex-plugin.md",
10
+ "repository": "https://github.com/vishal2612200/agentpack",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "agentpack",
14
+ "codex",
15
+ "context",
16
+ "coding-agents"
17
+ ],
18
+ "skills": "./skills/",
19
+ "interface": {
20
+ "displayName": "AgentPack",
21
+ "shortDescription": "Start Codex with ranked repo context.",
22
+ "longDescription": "AgentPack is a local context engine, not a coding agent. This plugin gives Codex lightweight commands for routing tasks, refreshing context packs, and reviewing diffs with the existing local AgentPack CLI or MCP tools.",
23
+ "developerName": "AgentPack",
24
+ "category": "Productivity",
25
+ "capabilities": [
26
+ "Interactive"
27
+ ],
28
+ "websiteURL": "https://github.com/vishal2612200/agentpack",
29
+ "defaultPrompt": [
30
+ "@agentpack-route fix auth token expiry",
31
+ "@agentpack-pack fix auth token expiry",
32
+ "@agentpack-review"
33
+ ],
34
+ "brandColor": "#1F6FEB"
35
+ }
36
+ }
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: agentpack-pack
3
+ description: Generate a local AgentPack context pack for Codex before editing.
4
+ ---
5
+
6
+ # AgentPack Pack
7
+
8
+ Use when the user invokes `@agentpack-pack <task>` or asks Codex to prepare full AgentPack context.
9
+
10
+ AgentPack prepares context. It does not prove correctness and does not replace code review or tests.
11
+
12
+ ## Steps
13
+
14
+ 1. Write the task:
15
+
16
+ ```bash
17
+ agentpack task set "<task>"
18
+ ```
19
+
20
+ 2. Generate fresh context:
21
+
22
+ ```bash
23
+ agentpack pack --task auto
24
+ ```
25
+
26
+ 3. Read `.agentpack/context.md`.
27
+ 4. Inspect selected files before editing.
28
+ 5. Use normal repo search if selected files miss obvious tests, config, routes, or callers.
29
+
30
+ If AgentPack MCP is available, prefer the pack or context MCP tool and use markdown as fallback.
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: agentpack-refresh
3
+ description: Refresh AgentPack context when task, git state, or repo files changed.
4
+ ---
5
+
6
+ # AgentPack Refresh
7
+
8
+ Use when the user invokes `@agentpack-refresh`, context looks stale, or task/git state changed.
9
+
10
+ ## Steps
11
+
12
+ 1. Run the guarded refresh path:
13
+
14
+ ```bash
15
+ agentpack guard --agent codex --repair-stale --refresh-context
16
+ ```
17
+
18
+ 2. If the task changed, update it first:
19
+
20
+ ```bash
21
+ agentpack task set "<task>"
22
+ agentpack guard --agent codex --repair-stale --refresh-context
23
+ ```
24
+
25
+ 3. Read `.agentpack/context.md` after refresh.
26
+ 4. Warn if context still appears stale or task text does not match.
27
+ 5. Treat the pack as a map, not proof of correctness.
28
+
29
+ Prefer AgentPack MCP refresh/get-context behavior when available.
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: agentpack-review
3
+ description: Review Codex edits with git diff and AgentPack benchmark capture guidance.
4
+ ---
5
+
6
+ # AgentPack Review
7
+
8
+ Use when the user invokes `@agentpack-review` after edits.
9
+
10
+ Do not claim correctness unless relevant checks actually ran.
11
+
12
+ ## Steps
13
+
14
+ 1. Inspect current diff:
15
+
16
+ ```bash
17
+ git diff --stat
18
+ git diff
19
+ ```
20
+
21
+ 2. Look for missed tests, config files, callers, broad unrelated diffs, or generated files.
22
+ 3. Run or recommend the smallest relevant checks.
23
+ 4. When the diff represents a completed task, suggest benchmark capture:
24
+
25
+ ```bash
26
+ agentpack benchmark capture --since main --task "<task>"
27
+ agentpack benchmark --misses
28
+ ```
29
+
30
+ 5. Report validation exactly: passed, failed, or not run.
31
+
32
+ AgentPack benchmark capture records file-selection evidence. It does not prove the code is correct.
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: agentpack-route
3
+ description: Run read-only AgentPack task routing for ranked files, tests, rules, commands, and warnings.
4
+ ---
5
+
6
+ # AgentPack Route
7
+
8
+ Use when the user invokes `@agentpack-route <task>`.
9
+
10
+ This is read-only. Do not write `.agentpack/context.md` and do not edit source files from route output alone.
11
+
12
+ ## Steps
13
+
14
+ 1. Run:
15
+
16
+ ```bash
17
+ agentpack route --task "<task>"
18
+ ```
19
+
20
+ 2. Return ranked files, likely tests, rules or skills, suggested commands, and warnings.
21
+ 3. Tell Codex to verify selected files with actual code before editing.
22
+ 4. If the task needs fuller context, suggest `@agentpack-pack <task>`.
23
+
24
+ If AgentPack MCP is available, prefer the equivalent route task tool.
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: agentpack
3
+ description: Explain AgentPack status and choose the next local context step in a Codex session.
4
+ ---
5
+
6
+ # AgentPack
7
+
8
+ Use when the user invokes `@agentpack` or asks whether AgentPack context is ready.
9
+
10
+ AgentPack is not a coding agent. AgentPack is a local context engine that helps Codex start with ranked repo context.
11
+
12
+ ## Steps
13
+
14
+ 1. Check whether `.agentpack/context.md` exists.
15
+ 2. If it exists, inspect its freshness block and task summary before editing.
16
+ 3. If context is missing or stale, suggest `@agentpack-route <task>` for read-only orientation or `@agentpack-pack <task>` for a context pack.
17
+ 4. Tell Codex to treat selected files as a starting map, not proof of correctness.
18
+ 5. Use normal repo search when AgentPack output looks incomplete.
19
+
20
+ ## Local commands
21
+
22
+ ```bash
23
+ agentpack status
24
+ agentpack route --task "<task>"
25
+ agentpack task set "<task>"
26
+ agentpack pack --task auto
27
+ ```
28
+
29
+ Prefer AgentPack MCP tools when available: route first, then fetch full context only when needed.
@@ -1,9 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import json
4
+ import os
4
5
  import re
6
+ import shutil
7
+ from importlib import resources
5
8
  from pathlib import Path
6
9
 
10
+ from agentpack import __version__
7
11
  from agentpack.integrations.git_hooks import install_git_hooks
8
12
 
9
13
  _AGENTPACK_BLOCK = """\
@@ -108,3 +112,61 @@ class CodexInstaller:
108
112
  hook_results = install_git_hooks(root, agent="auto")
109
113
  results.update({f"git:{k}": v for k, v in hook_results.items()})
110
114
  return results
115
+
116
+ def install_codex_plugin(self, *, codex_home: Path | None = None) -> dict[str, str]:
117
+ """Install AgentPack's thin Codex plugin package into the local Codex cache."""
118
+ source = _codex_plugin_source()
119
+ target = _codex_plugin_target(codex_home)
120
+ action = _copy_tree_if_changed(source, target)
121
+ return {str(target): action}
122
+
123
+
124
+ def _codex_plugin_target(codex_home: Path | None = None) -> Path:
125
+ root = codex_home or Path(os.environ.get("CODEX_HOME", "~/.codex")).expanduser()
126
+ return root / "plugins" / "cache" / "local" / "agentpack" / __version__
127
+
128
+
129
+ def _codex_plugin_source() -> Path:
130
+ checkout_source = Path(__file__).resolve().parents[3] / "src" / "agentpack" / "data" / "codex_plugin"
131
+ if checkout_source.exists():
132
+ return checkout_source
133
+ return Path(str(resources.files("agentpack").joinpath("data", "codex_plugin")))
134
+
135
+
136
+ def _copy_tree_if_changed(source: Path, target: Path) -> str:
137
+ if not source.exists():
138
+ raise FileNotFoundError(f"AgentPack Codex plugin assets not found: {source}")
139
+ existed = target.exists()
140
+ changed = False
141
+ for source_file in sorted(path for path in source.rglob("*") if path.is_file()):
142
+ relative = source_file.relative_to(source)
143
+ target_file = target / relative
144
+ try:
145
+ current = target_file.read_bytes()
146
+ except OSError:
147
+ current = None
148
+ desired = source_file.read_bytes()
149
+ if current != desired:
150
+ target_file.parent.mkdir(parents=True, exist_ok=True)
151
+ target_file.write_bytes(desired)
152
+ changed = True
153
+ if existed:
154
+ _remove_stale_files(source, target)
155
+ elif not target.exists():
156
+ shutil.copytree(source, target)
157
+ changed = True
158
+ if not existed:
159
+ return "created"
160
+ return "updated" if changed else "unchanged"
161
+
162
+
163
+ def _remove_stale_files(source: Path, target: Path) -> None:
164
+ expected = {path.relative_to(source) for path in source.rglob("*") if path.is_file()}
165
+ for target_file in sorted((path for path in target.rglob("*") if path.is_file()), reverse=True):
166
+ if target_file.relative_to(target) not in expected:
167
+ target_file.unlink()
168
+ for directory in sorted((path for path in target.rglob("*") if path.is_dir()), reverse=True):
169
+ try:
170
+ directory.rmdir()
171
+ except OSError:
172
+ pass
@@ -83,7 +83,11 @@ def install_agent_integration(
83
83
 
84
84
  if agent == "codex":
85
85
  installer = CodexInstaller()
86
- results = {"AGENTS.md": installer.patch_agents_md(root)}
86
+ plugin_result = installer.install_codex_plugin()
87
+ results = {
88
+ "AGENTS.md": installer.patch_agents_md(root),
89
+ "~/.codex/plugins/cache/local/agentpack": next(iter(plugin_result.values())),
90
+ }
87
91
  if not global_install:
88
92
  results.update(installer.install_auto_repack(root))
89
93
  return results
File without changes