agentpack-cli 0.3.19__tar.gz → 0.3.20__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 (152) hide show
  1. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/PKG-INFO +9 -35
  2. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/README.md +8 -34
  3. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/pyproject.toml +1 -1
  4. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/__init__.py +1 -1
  5. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/dashboard/collectors.py +68 -4
  6. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/dashboard/renderers.py +180 -56
  7. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/router/parser.py +197 -17
  8. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/router/skills_index.py +4 -0
  9. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/.gitignore +0 -0
  10. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/LICENSE +0 -0
  11. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/adapters/__init__.py +0 -0
  12. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/adapters/antigravity.py +0 -0
  13. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/adapters/base.py +0 -0
  14. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/adapters/claude.py +0 -0
  15. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/adapters/codex.py +0 -0
  16. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/adapters/cursor.py +0 -0
  17. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/adapters/detect.py +0 -0
  18. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/adapters/generic.py +0 -0
  19. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/adapters/windsurf.py +0 -0
  20. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/__init__.py +0 -0
  21. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/dependency_graph.py +0 -0
  22. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/go_imports.py +0 -0
  23. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/java_imports.py +0 -0
  24. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/js_ts_imports.py +0 -0
  25. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/monorepo.py +0 -0
  26. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/naming_signals.py +0 -0
  27. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/python_ast.py +0 -0
  28. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/python_imports.py +0 -0
  29. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/ranking.py +0 -0
  30. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/repo_map.py +0 -0
  31. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/role_inference.py +0 -0
  32. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/rust_imports.py +0 -0
  33. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/symbols.py +0 -0
  34. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/task_classifier.py +0 -0
  35. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/analysis/tests.py +0 -0
  36. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/application/__init__.py +0 -0
  37. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/application/pack_service.py +0 -0
  38. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/cli.py +0 -0
  39. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/__init__.py +0 -0
  40. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/_shared.py +0 -0
  41. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/benchmark.py +0 -0
  42. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/ci_cmd.py +0 -0
  43. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/claude_cmd.py +0 -0
  44. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/compress_output.py +0 -0
  45. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/dashboard.py +0 -0
  46. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/dev_check.py +0 -0
  47. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/diagnose_selection.py +0 -0
  48. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/diff.py +0 -0
  49. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/doctor.py +0 -0
  50. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/eval_cmd.py +0 -0
  51. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/explain.py +0 -0
  52. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/guard.py +0 -0
  53. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/hook_cmd.py +0 -0
  54. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/ignore_cmd.py +0 -0
  55. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/init.py +0 -0
  56. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/install.py +0 -0
  57. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/learn.py +0 -0
  58. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/mcp_cmd.py +0 -0
  59. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/memory.py +0 -0
  60. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/migrate.py +0 -0
  61. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/monitor.py +0 -0
  62. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/next_cmd.py +0 -0
  63. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/pack.py +0 -0
  64. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/perf.py +0 -0
  65. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/quickstart.py +0 -0
  66. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/release_check.py +0 -0
  67. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/release_cmd.py +0 -0
  68. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/repair.py +0 -0
  69. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/retrieve.py +0 -0
  70. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/route.py +0 -0
  71. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/scan.py +0 -0
  72. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/skills.py +0 -0
  73. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/start_cmd.py +0 -0
  74. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/state_cmd.py +0 -0
  75. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/stats.py +0 -0
  76. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/status.py +0 -0
  77. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/summarize.py +0 -0
  78. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/task_cmd.py +0 -0
  79. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/threads.py +0 -0
  80. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/tune.py +0 -0
  81. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/verify_wheel.py +0 -0
  82. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/watch.py +0 -0
  83. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/workflow_cmd.py +0 -0
  84. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/commands/wrap.py +0 -0
  85. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/__init__.py +0 -0
  86. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/bootstrap.py +0 -0
  87. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/cache.py +0 -0
  88. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/changed_paths.py +0 -0
  89. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/config.py +0 -0
  90. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/context_pack.py +0 -0
  91. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/diff.py +0 -0
  92. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/evals.py +0 -0
  93. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/execution_state.py +0 -0
  94. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/git.py +0 -0
  95. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/git_hooks.py +0 -0
  96. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/global_install.py +0 -0
  97. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/ignore.py +0 -0
  98. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/loop_protocol.py +0 -0
  99. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/merkle.py +0 -0
  100. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/models.py +0 -0
  101. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/pack_registry.py +0 -0
  102. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/redactor.py +0 -0
  103. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/scanner.py +0 -0
  104. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/snapshot.py +0 -0
  105. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/task_freshness.py +0 -0
  106. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/thread_context.py +0 -0
  107. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/token_estimator.py +0 -0
  108. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/core/vscode_tasks.py +0 -0
  109. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/dashboard/__init__.py +0 -0
  110. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/dashboard/models.py +0 -0
  111. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/data/agentpack.md +0 -0
  112. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/installers/__init__.py +0 -0
  113. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/installers/antigravity.py +0 -0
  114. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/installers/claude.py +0 -0
  115. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/installers/codex.py +0 -0
  116. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/installers/cursor.py +0 -0
  117. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/installers/windsurf.py +0 -0
  118. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/integrations/__init__.py +0 -0
  119. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/integrations/agents.py +0 -0
  120. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/integrations/git_hooks.py +0 -0
  121. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/integrations/global_install.py +0 -0
  122. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/integrations/platform.py +0 -0
  123. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/integrations/vscode_tasks.py +0 -0
  124. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/learning/__init__.py +0 -0
  125. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/learning/collector.py +0 -0
  126. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/learning/extractor.py +0 -0
  127. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/learning/feedback.py +0 -0
  128. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/learning/lesson_ranker.py +0 -0
  129. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/learning/models.py +0 -0
  130. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/learning/provider.py +0 -0
  131. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/learning/quality.py +0 -0
  132. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/learning/renderers.py +0 -0
  133. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/learning/skill_map.py +0 -0
  134. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/mcp_server.py +0 -0
  135. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/output_compression/__init__.py +0 -0
  136. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/output_compression/core.py +0 -0
  137. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/renderers/__init__.py +0 -0
  138. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/renderers/compact.py +0 -0
  139. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/renderers/markdown.py +0 -0
  140. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/renderers/receipts.py +0 -0
  141. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/router/__init__.py +0 -0
  142. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/router/discovery.py +0 -0
  143. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/router/models.py +0 -0
  144. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/router/prompt_builder.py +0 -0
  145. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/router/scoring.py +0 -0
  146. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/router/service.py +0 -0
  147. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/session/__init__.py +0 -0
  148. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/session/events.py +0 -0
  149. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/session/state.py +0 -0
  150. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/summaries/__init__.py +0 -0
  151. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/src/agentpack/summaries/base.py +0 -0
  152. {agentpack_cli-0.3.19 → agentpack_cli-0.3.20}/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.19
3
+ Version: 0.3.20
4
4
  Summary: Local MCP context router for Claude Code, Codex, Cursor, and AI coding agents.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -55,8 +55,7 @@ Claude Code, Codex, Cursor, and other coding agents can waste tool calls redisco
55
55
 
56
56
  AgentPack gives them a ranked map of likely relevant files, tests, rules, and skills for each task. It analyzes your repo locally and packages compact context for CLI and MCP workflows.
57
57
 
58
- How it works: AgentPack compresses repo context into ranked packs, caches scans/summaries/pack metadata for fast refreshes, and retrieves exact file or symbol blocks later when an agent needs more detail. Rendered packs also put stable instructions before volatile task, timestamp, git, and file sections so provider prompt-prefix caches can reuse the front of repeated refreshes. No cloud indexing, embeddings, or API calls are required for scan, summarize, rank, pack, stats, or benchmark.
59
-
58
+ How it works: AgentPack compresses repo context into ranked packs, caches scans/summaries/pack metadata for fast refreshes, and retrieves exact file or symbol blocks later when an agent needs more detail. Rendered packs also put stable instructions before volatile task, timestamp, git, and file sections so provider prompt-prefix caches can reuse the front of repeated refreshes. No cloud indexing, embeddings, or API calls are required for scan, summarize, rank, pack, stats, or benchmark. See [How AgentPack works](docs/how-agentpack-works.md) for the full scan, rank, compress, cache, retrieve, route, and benchmark flow.
60
59
  Try the read-only task router without writing context files:
61
60
 
62
61
  ```bash
@@ -65,44 +64,18 @@ pipx run --spec agentpack-cli agentpack route --task "fix auth token expiry"
65
64
 
66
65
  ![AgentPack route demo](docs/assets/agentpack-route-demo.svg)
67
66
 
68
- > **Status: alpha (v0.3.16).** Works, tested, and used in real sessions. Python and JavaScript/TypeScript are the best-supported languages. Current benchmarks are useful regression checks, not broad proof that AgentPack improves coding-agent success. API may change before 1.0.
67
+ > **Status: alpha (v0.3.20).** Works, tested, and used in real sessions. Python and JavaScript/TypeScript are the best-supported languages. Current benchmarks are useful regression checks, not broad proof that AgentPack improves coding-agent success. API may change before 1.0.
69
68
  >
70
69
  > **Platform note:** macOS, Linux, and Windows are supported. Windows support targets PowerShell plus Git for Windows. `cmd.exe` and bare Git setups are not a supported path yet.
71
70
  >
72
71
  > **Name note:** PyPI package is `agentpack-cli`, npm package is `@vishal2612200/agentpack`, and the command is `agentpack`. This project is unrelated to AgentPack dataset papers or other repos with the same name.
73
72
 
74
- ## What's New in 0.3.16
75
-
76
- `0.3.16` bundles `watchdog` in normal installs so `agentpack watch` uses native
77
- filesystem events by default instead of polling after `pipx`, `pip`, or npm
78
- wrapper installation.
79
-
80
- ## What's New in 0.3.15
81
-
82
- AgentPack Router now recommends skills with stronger local signals: richer
83
- frontmatter, confidence thresholds, negative triggers, diversity-aware ranking,
84
- and a pull-based MCP `get_skill` flow. Skill benchmark cases can declare
85
- `expected_skills` and `avoid_skills`, and `agentpack skills feedback` records
86
- local outcome signals for future routing.
87
-
88
- ## What's New in 0.3.14
89
-
90
- AgentPack Learn now covers both sides of AI-assisted development: the coding
91
- agent gets compact future-agent lessons, and the developer gets task-specific
92
- learning notes, skill evidence, and practice follow-up.
73
+ ## What's New in 0.3.20
93
74
 
94
- - `agentpack learn --provider-command` adds an opt-in local provider bridge:
95
- AgentPack sends a bounded, redacted report JSON on stdin and accepts
96
- LearningReport-compatible JSON fields on stdout. No hosted service is called
97
- unless your command does it.
98
- - `agentpack learn --dashboard` writes a static
99
- `.agentpack/learning-dashboard.html` for IDE/browser review.
100
- - `agentpack learn --team-export` writes `.agentpack/team-lessons.md`, a
101
- shareable lesson file that omits personal skill history.
102
- - `agentpack learn --feedback`, `--skills`, and `--drills` close the loop from
103
- a task summary to skill memory and next-practice prompts.
104
- - `agentpack dev-check` and `agentpack release-check` now print bounded failure
105
- excerpts, so CI shows the failing test instead of only a red stage name.
75
+ `0.3.20` adds a dedicated "How AgentPack works" guide for scan, rank, compress,
76
+ cache, retrieve, route, stable-prefix caching, and skill keyword quality. It
77
+ also polishes the local dashboard and expands skill-routing benchmark guidance
78
+ for `expected_skills`, `avoid_skills`, recall, precision, MRR, and noise.
106
79
 
107
80
  ## Before vs After
108
81
 
@@ -170,6 +143,7 @@ Full table: [`benchmarks/results/2026-05-27-public.md`](benchmarks/results/2026-
170
143
  - [Cursor context packing](docs/cursor-context-packing.md)
171
144
  - [AI coding agent context packing](docs/ai-coding-agent-context.md)
172
145
  - [Reduce Claude Code token usage](docs/reduce-claude-code-token-usage.md)
146
+ - [How AgentPack works](docs/how-agentpack-works.md)
173
147
  - [AgentPack vs Repomix](docs/agentpack-vs-repomix.md)
174
148
  - [AgentPack vs Augment Context Engine](docs/agentpack-vs-augment-context-engine.md)
175
149
  - [Docs index](docs/index.md)
@@ -14,8 +14,7 @@ Claude Code, Codex, Cursor, and other coding agents can waste tool calls redisco
14
14
 
15
15
  AgentPack gives them a ranked map of likely relevant files, tests, rules, and skills for each task. It analyzes your repo locally and packages compact context for CLI and MCP workflows.
16
16
 
17
- How it works: AgentPack compresses repo context into ranked packs, caches scans/summaries/pack metadata for fast refreshes, and retrieves exact file or symbol blocks later when an agent needs more detail. Rendered packs also put stable instructions before volatile task, timestamp, git, and file sections so provider prompt-prefix caches can reuse the front of repeated refreshes. No cloud indexing, embeddings, or API calls are required for scan, summarize, rank, pack, stats, or benchmark.
18
-
17
+ How it works: AgentPack compresses repo context into ranked packs, caches scans/summaries/pack metadata for fast refreshes, and retrieves exact file or symbol blocks later when an agent needs more detail. Rendered packs also put stable instructions before volatile task, timestamp, git, and file sections so provider prompt-prefix caches can reuse the front of repeated refreshes. No cloud indexing, embeddings, or API calls are required for scan, summarize, rank, pack, stats, or benchmark. See [How AgentPack works](docs/how-agentpack-works.md) for the full scan, rank, compress, cache, retrieve, route, and benchmark flow.
19
18
  Try the read-only task router without writing context files:
20
19
 
21
20
  ```bash
@@ -24,44 +23,18 @@ pipx run --spec agentpack-cli agentpack route --task "fix auth token expiry"
24
23
 
25
24
  ![AgentPack route demo](docs/assets/agentpack-route-demo.svg)
26
25
 
27
- > **Status: alpha (v0.3.16).** Works, tested, and used in real sessions. Python and JavaScript/TypeScript are the best-supported languages. Current benchmarks are useful regression checks, not broad proof that AgentPack improves coding-agent success. API may change before 1.0.
26
+ > **Status: alpha (v0.3.20).** Works, tested, and used in real sessions. Python and JavaScript/TypeScript are the best-supported languages. Current benchmarks are useful regression checks, not broad proof that AgentPack improves coding-agent success. API may change before 1.0.
28
27
  >
29
28
  > **Platform note:** macOS, Linux, and Windows are supported. Windows support targets PowerShell plus Git for Windows. `cmd.exe` and bare Git setups are not a supported path yet.
30
29
  >
31
30
  > **Name note:** PyPI package is `agentpack-cli`, npm package is `@vishal2612200/agentpack`, and the command is `agentpack`. This project is unrelated to AgentPack dataset papers or other repos with the same name.
32
31
 
33
- ## What's New in 0.3.16
34
-
35
- `0.3.16` bundles `watchdog` in normal installs so `agentpack watch` uses native
36
- filesystem events by default instead of polling after `pipx`, `pip`, or npm
37
- wrapper installation.
38
-
39
- ## What's New in 0.3.15
40
-
41
- AgentPack Router now recommends skills with stronger local signals: richer
42
- frontmatter, confidence thresholds, negative triggers, diversity-aware ranking,
43
- and a pull-based MCP `get_skill` flow. Skill benchmark cases can declare
44
- `expected_skills` and `avoid_skills`, and `agentpack skills feedback` records
45
- local outcome signals for future routing.
46
-
47
- ## What's New in 0.3.14
48
-
49
- AgentPack Learn now covers both sides of AI-assisted development: the coding
50
- agent gets compact future-agent lessons, and the developer gets task-specific
51
- learning notes, skill evidence, and practice follow-up.
32
+ ## What's New in 0.3.20
52
33
 
53
- - `agentpack learn --provider-command` adds an opt-in local provider bridge:
54
- AgentPack sends a bounded, redacted report JSON on stdin and accepts
55
- LearningReport-compatible JSON fields on stdout. No hosted service is called
56
- unless your command does it.
57
- - `agentpack learn --dashboard` writes a static
58
- `.agentpack/learning-dashboard.html` for IDE/browser review.
59
- - `agentpack learn --team-export` writes `.agentpack/team-lessons.md`, a
60
- shareable lesson file that omits personal skill history.
61
- - `agentpack learn --feedback`, `--skills`, and `--drills` close the loop from
62
- a task summary to skill memory and next-practice prompts.
63
- - `agentpack dev-check` and `agentpack release-check` now print bounded failure
64
- excerpts, so CI shows the failing test instead of only a red stage name.
34
+ `0.3.20` adds a dedicated "How AgentPack works" guide for scan, rank, compress,
35
+ cache, retrieve, route, stable-prefix caching, and skill keyword quality. It
36
+ also polishes the local dashboard and expands skill-routing benchmark guidance
37
+ for `expected_skills`, `avoid_skills`, recall, precision, MRR, and noise.
65
38
 
66
39
  ## Before vs After
67
40
 
@@ -129,6 +102,7 @@ Full table: [`benchmarks/results/2026-05-27-public.md`](benchmarks/results/2026-
129
102
  - [Cursor context packing](docs/cursor-context-packing.md)
130
103
  - [AI coding agent context packing](docs/ai-coding-agent-context.md)
131
104
  - [Reduce Claude Code token usage](docs/reduce-claude-code-token-usage.md)
105
+ - [How AgentPack works](docs/how-agentpack-works.md)
132
106
  - [AgentPack vs Repomix](docs/agentpack-vs-repomix.md)
133
107
  - [AgentPack vs Augment Context Engine](docs/agentpack-vs-augment-context-engine.md)
134
108
  - [Docs index](docs/index.md)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agentpack-cli"
3
- version = "0.3.19"
3
+ version = "0.3.20"
4
4
  description = "Local MCP context router for Claude Code, Codex, Cursor, and AI coding agents."
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.19"
3
+ __version__ = "0.3.20"
@@ -413,7 +413,7 @@ def _skill_metadata(
413
413
  if quality == "inferred" and domains != ["uncategorized"]:
414
414
  items.append("inferred domains: " + ", ".join(domains))
415
415
  if skill.description:
416
- items.append("description: " + _clip(skill.description, 120))
416
+ items.append("description: " + " ".join(skill.description.split()))
417
417
  if skill.task_types:
418
418
  items.append("task: " + ", ".join(skill.task_types))
419
419
  if skill.languages:
@@ -424,16 +424,80 @@ def _skill_metadata(
424
424
  items.append("tools: " + ", ".join(skill.tools_required))
425
425
  if skill.applies_to_paths:
426
426
  items.append("paths: " + ", ".join(skill.applies_to_paths[:3]))
427
- useful_triggers = [
427
+ name_parts = _trigger_name_parts(skill.name)
428
+ evidenced_terms = set(_domain_token_list(skill.description))
429
+ path = Path(skill.path)
430
+ hidden_triggers = {
431
+ skill.name.lower().replace("_", "-"),
432
+ path.parent.name.lower().replace("_", "-"),
433
+ path.stem.lower().replace("_", "-"),
434
+ }
435
+ candidate_triggers = [
428
436
  trigger
429
437
  for trigger in skill.triggers
430
- if trigger not in set(skill.name.lower().replace("_", "-").split("-"))
431
- ][:5]
438
+ if _show_skill_trigger(trigger, hidden_triggers=hidden_triggers, name_parts=name_parts, evidenced_terms=evidenced_terms)
439
+ ]
440
+ useful_triggers = _rank_skill_triggers(candidate_triggers, skill=skill, domains=domains, evidenced_terms=evidenced_terms)[:8]
432
441
  if useful_triggers:
433
442
  items.append("triggers: " + ", ".join(useful_triggers))
434
443
  return items[:MAX_METADATA_ITEMS]
435
444
 
436
445
 
446
+ def _show_skill_trigger(
447
+ trigger: str,
448
+ *,
449
+ hidden_triggers: set[str],
450
+ name_parts: set[str],
451
+ evidenced_terms: set[str],
452
+ ) -> bool:
453
+ if trigger in hidden_triggers:
454
+ return False
455
+ parts = trigger.split("-")
456
+ if trigger in name_parts:
457
+ return trigger in evidenced_terms
458
+ if len(parts) > 1:
459
+ return not all(part in name_parts for part in parts)
460
+ return not any(part in name_parts for part in parts)
461
+
462
+
463
+ def _rank_skill_triggers(
464
+ triggers: list[str],
465
+ *,
466
+ skill: SkillArtifact,
467
+ domains: list[str],
468
+ evidenced_terms: set[str],
469
+ ) -> list[str]:
470
+ domain_terms = set(domains) | set(skill.domains) | set(skill.languages) | set(skill.frameworks) | set(skill.tools_required)
471
+ indexed = list(enumerate(triggers))
472
+
473
+ def score(item: tuple[int, str]) -> tuple[int, int]:
474
+ index, trigger = item
475
+ parts = trigger.split("-")
476
+ value = 0
477
+ if len(parts) > 1:
478
+ value += 100 + min(len(parts), 3) * 8
479
+ if any(char.isdigit() for char in trigger) or any(marker in trigger for marker in ("+", ".")):
480
+ value += 4
481
+ else:
482
+ value -= 30
483
+ if trigger in evidenced_terms:
484
+ value += 20
485
+ if trigger in domain_terms:
486
+ value += 20
487
+ if any(char.isdigit() for char in trigger) or any(marker in trigger for marker in ("+", ".")):
488
+ value += 8
489
+ if trigger not in domain_terms and trigger not in evidenced_terms and trigger not in {"ai", "go", "ui"}:
490
+ value -= 25
491
+ return (-value, index)
492
+
493
+ return [trigger for _index, trigger in sorted(indexed, key=score)]
494
+
495
+
496
+ def _trigger_name_parts(value: str) -> set[str]:
497
+ normalized = value.lower().replace("_", "-")
498
+ return {part for part in re.split(r"[^a-z0-9]+", normalized) if part}
499
+
500
+
437
501
  def _domain_token_list(text: str) -> list[str]:
438
502
  lower = text.lower().replace("_", "-")
439
503
  raw_tokens = re.findall(r"[a-z][a-z0-9+.-]{1,}", lower)