agentpack-cli 0.3.14__tar.gz → 0.3.15__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 (137) hide show
  1. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/PKG-INFO +41 -2
  2. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/README.md +40 -1
  3. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/pyproject.toml +1 -1
  4. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/__init__.py +1 -1
  5. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/application/pack_service.py +34 -13
  6. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/benchmark.py +221 -5
  7. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/explain.py +3 -3
  8. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/guard.py +3 -3
  9. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/init.py +18 -9
  10. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/migrate.py +3 -3
  11. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/pack.py +3 -3
  12. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/quickstart.py +3 -3
  13. agentpack_cli-0.3.15/src/agentpack/commands/skills.py +106 -0
  14. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/context_pack.py +8 -1
  15. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/models.py +1 -1
  16. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/mcp_server.py +16 -0
  17. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/router/models.py +9 -0
  18. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/router/parser.py +34 -1
  19. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/router/prompt_builder.py +25 -3
  20. agentpack_cli-0.3.15/src/agentpack/router/scoring.py +409 -0
  21. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/router/service.py +100 -0
  22. agentpack_cli-0.3.14/src/agentpack/commands/skills.py +0 -46
  23. agentpack_cli-0.3.14/src/agentpack/router/scoring.py +0 -178
  24. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/.gitignore +0 -0
  25. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/LICENSE +0 -0
  26. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/__init__.py +0 -0
  27. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/antigravity.py +0 -0
  28. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/base.py +0 -0
  29. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/claude.py +0 -0
  30. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/codex.py +0 -0
  31. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/cursor.py +0 -0
  32. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/detect.py +0 -0
  33. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/generic.py +0 -0
  34. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/windsurf.py +0 -0
  35. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/__init__.py +0 -0
  36. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/dependency_graph.py +0 -0
  37. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/go_imports.py +0 -0
  38. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/java_imports.py +0 -0
  39. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/js_ts_imports.py +0 -0
  40. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/monorepo.py +0 -0
  41. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/naming_signals.py +0 -0
  42. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/python_imports.py +0 -0
  43. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/ranking.py +0 -0
  44. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/repo_map.py +0 -0
  45. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/role_inference.py +0 -0
  46. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/rust_imports.py +0 -0
  47. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/symbols.py +0 -0
  48. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/task_classifier.py +0 -0
  49. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/tests.py +0 -0
  50. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/application/__init__.py +0 -0
  51. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/cli.py +0 -0
  52. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/__init__.py +0 -0
  53. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/_shared.py +0 -0
  54. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/ci_cmd.py +0 -0
  55. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/claude_cmd.py +0 -0
  56. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/dev_check.py +0 -0
  57. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/diagnose_selection.py +0 -0
  58. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/diff.py +0 -0
  59. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/doctor.py +0 -0
  60. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/eval_cmd.py +0 -0
  61. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/hook_cmd.py +0 -0
  62. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/ignore_cmd.py +0 -0
  63. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/install.py +0 -0
  64. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/learn.py +0 -0
  65. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/mcp_cmd.py +0 -0
  66. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/monitor.py +0 -0
  67. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/next_cmd.py +0 -0
  68. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/release_check.py +0 -0
  69. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/release_cmd.py +0 -0
  70. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/repair.py +0 -0
  71. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/route.py +0 -0
  72. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/scan.py +0 -0
  73. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/start_cmd.py +0 -0
  74. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/state_cmd.py +0 -0
  75. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/stats.py +0 -0
  76. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/status.py +0 -0
  77. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/summarize.py +0 -0
  78. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/task_cmd.py +0 -0
  79. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/threads.py +0 -0
  80. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/tune.py +0 -0
  81. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/verify_wheel.py +0 -0
  82. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/watch.py +0 -0
  83. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/workflow_cmd.py +0 -0
  84. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/__init__.py +0 -0
  85. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/bootstrap.py +0 -0
  86. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/cache.py +0 -0
  87. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/changed_paths.py +0 -0
  88. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/config.py +0 -0
  89. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/diff.py +0 -0
  90. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/evals.py +0 -0
  91. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/execution_state.py +0 -0
  92. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/git.py +0 -0
  93. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/git_hooks.py +0 -0
  94. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/global_install.py +0 -0
  95. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/ignore.py +0 -0
  96. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/merkle.py +0 -0
  97. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/redactor.py +0 -0
  98. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/scanner.py +0 -0
  99. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/snapshot.py +0 -0
  100. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/task_freshness.py +0 -0
  101. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/thread_context.py +0 -0
  102. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/token_estimator.py +0 -0
  103. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/vscode_tasks.py +0 -0
  104. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/data/agentpack.md +0 -0
  105. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/installers/__init__.py +0 -0
  106. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/installers/antigravity.py +0 -0
  107. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/installers/claude.py +0 -0
  108. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/installers/codex.py +0 -0
  109. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/installers/cursor.py +0 -0
  110. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/installers/windsurf.py +0 -0
  111. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/integrations/__init__.py +0 -0
  112. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/integrations/agents.py +0 -0
  113. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/integrations/git_hooks.py +0 -0
  114. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/integrations/global_install.py +0 -0
  115. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/integrations/platform.py +0 -0
  116. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/integrations/vscode_tasks.py +0 -0
  117. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/__init__.py +0 -0
  118. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/collector.py +0 -0
  119. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/extractor.py +0 -0
  120. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/feedback.py +0 -0
  121. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/lesson_ranker.py +0 -0
  122. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/models.py +0 -0
  123. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/provider.py +0 -0
  124. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/quality.py +0 -0
  125. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/renderers.py +0 -0
  126. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/skill_map.py +0 -0
  127. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/renderers/__init__.py +0 -0
  128. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/renderers/compact.py +0 -0
  129. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/renderers/markdown.py +0 -0
  130. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/renderers/receipts.py +0 -0
  131. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/router/__init__.py +0 -0
  132. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/router/discovery.py +0 -0
  133. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/session/__init__.py +0 -0
  134. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/session/state.py +0 -0
  135. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/summaries/__init__.py +0 -0
  136. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/summaries/base.py +0 -0
  137. {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/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.14
3
+ Version: 0.3.15
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
@@ -63,12 +63,39 @@ pipx run --spec agentpack-cli agentpack route --task "fix auth token expiry"
63
63
 
64
64
  ![AgentPack route demo](docs/assets/agentpack-route-demo.svg)
65
65
 
66
- > **Status: alpha (v0.3.14).** 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.
66
+ > **Status: alpha (v0.3.15).** 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
67
  >
68
68
  > **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.
69
69
  >
70
70
  > **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.
71
71
 
72
+ ## What's New in 0.3.15
73
+
74
+ AgentPack Router now recommends skills with stronger local signals: richer
75
+ frontmatter, confidence thresholds, negative triggers, diversity-aware ranking,
76
+ and a pull-based MCP `get_skill` flow. Skill benchmark cases can declare
77
+ `expected_skills` and `avoid_skills`, and `agentpack skills feedback` records
78
+ local outcome signals for future routing.
79
+
80
+ ## What's New in 0.3.14
81
+
82
+ AgentPack Learn now covers both sides of AI-assisted development: the coding
83
+ agent gets compact future-agent lessons, and the developer gets task-specific
84
+ learning notes, skill evidence, and practice follow-up.
85
+
86
+ - `agentpack learn --provider-command` adds an opt-in local provider bridge:
87
+ AgentPack sends a bounded, redacted report JSON on stdin and accepts
88
+ LearningReport-compatible JSON fields on stdout. No hosted service is called
89
+ unless your command does it.
90
+ - `agentpack learn --dashboard` writes a static
91
+ `.agentpack/learning-dashboard.html` for IDE/browser review.
92
+ - `agentpack learn --team-export` writes `.agentpack/team-lessons.md`, a
93
+ shareable lesson file that omits personal skill history.
94
+ - `agentpack learn --feedback`, `--skills`, and `--drills` close the loop from
95
+ a task summary to skill memory and next-practice prompts.
96
+ - `agentpack dev-check` and `agentpack release-check` now print bounded failure
97
+ excerpts, so CI shows the failing test instead of only a red stage name.
98
+
72
99
  ## Before vs After
73
100
 
74
101
  Without AgentPack, a cold coding-agent session often starts with manual repo orientation:
@@ -216,6 +243,11 @@ agentpack learn --feedback helpful --feedback-target "skill:CLI design" --feedba
216
243
 
217
244
  AgentPack writes developer notes to `.agentpack/learning.md` or `.agentpack/daily-summary.md`, updates a local skill memory in `.agentpack/skills-progress.json`, writes ranked `.agentpack/agent-lessons.md` for future coding agents, and can emit `.agentpack/learning.prompt.md`, `.agentpack/pr-learning-comment.md`, `.agentpack/learning-dashboard.html`, or `.agentpack/team-lessons.md`. Learn is local-first by default: `--provider-preview` shows the bounded payload for optional external refinement without making a network call, `--provider-command` runs only the local command you provide, and feedback stays in `.agentpack/learning-feedback.jsonl`.
218
245
 
246
+ Use `--dashboard` when a developer wants an IDE-friendly review surface. Use
247
+ `--team-export` when the useful lesson should be shared without publishing a
248
+ personal skill history. Use `--ci` to fail a workflow when the generated
249
+ learning is too generic or lacks changed-file evidence.
250
+
219
251
  ## Agent Setup
220
252
 
221
253
  AgentPack can install repo-local instructions and hooks for the coding agent you use. The installer is idempotent and merges with existing config where possible.
@@ -253,10 +285,15 @@ Generated instructions keep thread mode explicit. They recommend `AGENTPACK_THRE
253
285
  default_mode = "balanced"
254
286
  default_budget = 40000
255
287
 
288
+ [context_lite]
289
+ budget = 8000
290
+
256
291
  [agents.generic]
257
292
  output = ".agentpack/context.md"
258
293
  ```
259
294
 
295
+ Use `agentpack pack --mode lite` when you want a cheap ranked map before deeper file reads. Use `minimal`, `balanced`, or `deep` when you want progressively more file content in the generated pack.
296
+
260
297
  Use `.agentignore` to remove generated output, vendored code, large exports, or files that repeatedly appear as ranking noise. AgentPack imports obvious generated/noisy entries from gitignore sources during init, but repository-specific outputs should still be added by hand.
261
298
 
262
299
  Use scoring weights only after measuring a real miss:
@@ -414,6 +451,8 @@ AgentPack writes local artifacts under `.agentpack/`:
414
451
  | `.agentpack/agent-lessons.md` | compact repo-specific lessons injected into future packs |
415
452
  | `.agentpack/learning.prompt.md` | optional source-backed prompt for external LLM refinement |
416
453
  | `.agentpack/pr-learning-comment.md` | optional PR-comment-ready learning summary |
454
+ | `.agentpack/learning-dashboard.html` | optional static dashboard from `agentpack learn --dashboard` |
455
+ | `.agentpack/team-lessons.md` | optional shared lesson export from `agentpack learn --team-export` |
417
456
  | `.agentpack/learning-feedback.jsonl` | optional local helpful/not-helpful feedback records |
418
457
  | `.agentpack/pack_metadata.json` | freshness and pack metadata |
419
458
  | `.agentpack/cache/` | offline file summaries keyed by hash |
@@ -24,12 +24,39 @@ pipx run --spec agentpack-cli agentpack route --task "fix auth token expiry"
24
24
 
25
25
  ![AgentPack route demo](docs/assets/agentpack-route-demo.svg)
26
26
 
27
- > **Status: alpha (v0.3.14).** 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.
27
+ > **Status: alpha (v0.3.15).** 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
28
  >
29
29
  > **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
30
  >
31
31
  > **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
32
 
33
+ ## What's New in 0.3.15
34
+
35
+ AgentPack Router now recommends skills with stronger local signals: richer
36
+ frontmatter, confidence thresholds, negative triggers, diversity-aware ranking,
37
+ and a pull-based MCP `get_skill` flow. Skill benchmark cases can declare
38
+ `expected_skills` and `avoid_skills`, and `agentpack skills feedback` records
39
+ local outcome signals for future routing.
40
+
41
+ ## What's New in 0.3.14
42
+
43
+ AgentPack Learn now covers both sides of AI-assisted development: the coding
44
+ agent gets compact future-agent lessons, and the developer gets task-specific
45
+ learning notes, skill evidence, and practice follow-up.
46
+
47
+ - `agentpack learn --provider-command` adds an opt-in local provider bridge:
48
+ AgentPack sends a bounded, redacted report JSON on stdin and accepts
49
+ LearningReport-compatible JSON fields on stdout. No hosted service is called
50
+ unless your command does it.
51
+ - `agentpack learn --dashboard` writes a static
52
+ `.agentpack/learning-dashboard.html` for IDE/browser review.
53
+ - `agentpack learn --team-export` writes `.agentpack/team-lessons.md`, a
54
+ shareable lesson file that omits personal skill history.
55
+ - `agentpack learn --feedback`, `--skills`, and `--drills` close the loop from
56
+ a task summary to skill memory and next-practice prompts.
57
+ - `agentpack dev-check` and `agentpack release-check` now print bounded failure
58
+ excerpts, so CI shows the failing test instead of only a red stage name.
59
+
33
60
  ## Before vs After
34
61
 
35
62
  Without AgentPack, a cold coding-agent session often starts with manual repo orientation:
@@ -177,6 +204,11 @@ agentpack learn --feedback helpful --feedback-target "skill:CLI design" --feedba
177
204
 
178
205
  AgentPack writes developer notes to `.agentpack/learning.md` or `.agentpack/daily-summary.md`, updates a local skill memory in `.agentpack/skills-progress.json`, writes ranked `.agentpack/agent-lessons.md` for future coding agents, and can emit `.agentpack/learning.prompt.md`, `.agentpack/pr-learning-comment.md`, `.agentpack/learning-dashboard.html`, or `.agentpack/team-lessons.md`. Learn is local-first by default: `--provider-preview` shows the bounded payload for optional external refinement without making a network call, `--provider-command` runs only the local command you provide, and feedback stays in `.agentpack/learning-feedback.jsonl`.
179
206
 
207
+ Use `--dashboard` when a developer wants an IDE-friendly review surface. Use
208
+ `--team-export` when the useful lesson should be shared without publishing a
209
+ personal skill history. Use `--ci` to fail a workflow when the generated
210
+ learning is too generic or lacks changed-file evidence.
211
+
180
212
  ## Agent Setup
181
213
 
182
214
  AgentPack can install repo-local instructions and hooks for the coding agent you use. The installer is idempotent and merges with existing config where possible.
@@ -214,10 +246,15 @@ Generated instructions keep thread mode explicit. They recommend `AGENTPACK_THRE
214
246
  default_mode = "balanced"
215
247
  default_budget = 40000
216
248
 
249
+ [context_lite]
250
+ budget = 8000
251
+
217
252
  [agents.generic]
218
253
  output = ".agentpack/context.md"
219
254
  ```
220
255
 
256
+ Use `agentpack pack --mode lite` when you want a cheap ranked map before deeper file reads. Use `minimal`, `balanced`, or `deep` when you want progressively more file content in the generated pack.
257
+
221
258
  Use `.agentignore` to remove generated output, vendored code, large exports, or files that repeatedly appear as ranking noise. AgentPack imports obvious generated/noisy entries from gitignore sources during init, but repository-specific outputs should still be added by hand.
222
259
 
223
260
  Use scoring weights only after measuring a real miss:
@@ -375,6 +412,8 @@ AgentPack writes local artifacts under `.agentpack/`:
375
412
  | `.agentpack/agent-lessons.md` | compact repo-specific lessons injected into future packs |
376
413
  | `.agentpack/learning.prompt.md` | optional source-backed prompt for external LLM refinement |
377
414
  | `.agentpack/pr-learning-comment.md` | optional PR-comment-ready learning summary |
415
+ | `.agentpack/learning-dashboard.html` | optional static dashboard from `agentpack learn --dashboard` |
416
+ | `.agentpack/team-lessons.md` | optional shared lesson export from `agentpack learn --team-export` |
378
417
  | `.agentpack/learning-feedback.jsonl` | optional local helpful/not-helpful feedback records |
379
418
  | `.agentpack/pack_metadata.json` | freshness and pack metadata |
380
419
  | `.agentpack/cache/` | offline file summaries keyed by hash |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agentpack-cli"
3
- version = "0.3.14"
3
+ version = "0.3.15"
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.14"
3
+ __version__ = "0.3.15"
@@ -294,7 +294,6 @@ def _scan_metadata(
294
294
  "ignore_hash": _hash_text(ignore_text),
295
295
  "include_globs": include_globs,
296
296
  "exclude_globs": exclude_globs,
297
- "generated_paths": sorted(generated_paths),
298
297
  "max_file_tokens": cfg.context.max_file_tokens,
299
298
  "workspace": workspace,
300
299
  }
@@ -329,7 +328,10 @@ def _full_scan_reason(
329
328
  return "git unavailable"
330
329
 
331
330
  previous_meta = previous_snap.get("metadata") if isinstance(previous_snap.get("metadata"), dict) else {}
332
- if previous_meta.get("scan_fingerprint") != scan_metadata.get("scan_fingerprint"):
331
+ if previous_meta.get("scan_fingerprint") != scan_metadata.get("scan_fingerprint") and (
332
+ _normalized_scan_config(previous_meta.get("scan_config"))
333
+ != _normalized_scan_config(scan_metadata.get("scan_config"))
334
+ ):
333
335
  return "scan config or ignore rules changed"
334
336
  if previous_meta.get("git_branch") != scan_metadata.get("git_branch"):
335
337
  return "git branch changed"
@@ -346,6 +348,14 @@ def _hash_text(value: str) -> str:
346
348
  return hashlib.sha256(value.encode("utf-8")).hexdigest()
347
349
 
348
350
 
351
+ def _normalized_scan_config(value: Any) -> dict[str, Any]:
352
+ if not isinstance(value, dict):
353
+ return {}
354
+ normalized = dict(value)
355
+ normalized.pop("generated_paths", None)
356
+ return normalized
357
+
358
+
349
359
  def _hash_json(value: dict[str, Any]) -> str:
350
360
  raw = json.dumps(value, sort_keys=True, separators=(",", ":"))
351
361
  return _hash_text(raw)
@@ -382,7 +392,7 @@ class PackPlanner:
382
392
  def plan(self, request: PackRequest) -> PackPlan:
383
393
  root = request.root
384
394
  cfg = load_config(root)
385
- effective_budget = request.budget if request.budget > 0 else cfg.context.default_budget
395
+ effective_budget = _resolve_effective_budget(request, cfg)
386
396
  ignore_spec = load_spec(root / cfg.project.ignore_file)
387
397
  phase_times: dict[str, float] = {}
388
398
 
@@ -974,10 +984,18 @@ def _rank_omitted_relevant_files(files: list[OmittedRelevantFile]) -> list[Omitt
974
984
 
975
985
 
976
986
  def _repo_map_budget_for_mode(mode: str, effective_budget: int) -> int:
977
- caps = {"minimal": 300, "balanced": 600, "deep": 900}
987
+ caps = {"lite": 150, "minimal": 300, "balanced": 600, "deep": 900}
978
988
  return min(caps.get(mode, 500), max(0, effective_budget // 20))
979
989
 
980
990
 
991
+ def _resolve_effective_budget(request: PackRequest, cfg: Any) -> int:
992
+ if request.budget > 0:
993
+ return request.budget
994
+ if request.mode == "lite":
995
+ return cfg.context_lite.budget
996
+ return cfg.context.default_budget
997
+
998
+
981
999
  _FRONTEND_TASK_TERMS = {
982
1000
  "component", "components", "frontend", "landing", "layout", "page", "pages",
983
1001
  "preview", "previews", "public", "seo", "signup", "tool", "tools", "ui", "web",
@@ -1271,7 +1289,10 @@ def _summary_score_floor(cfg: Any, generic_ratio: float) -> float:
1271
1289
 
1272
1290
 
1273
1291
  def _summary_cap_for_mode(cfg: Any, mode: str, generic_ratio: float = 0.0) -> int:
1274
- if mode == "minimal":
1292
+ if mode == "lite":
1293
+ minimal_cap = cfg.context.max_summary_files_minimal
1294
+ cap = min(minimal_cap, cfg.context_lite.max_selected_files) if minimal_cap > 0 else cfg.context_lite.max_selected_files
1295
+ elif mode == "minimal":
1275
1296
  cap = cfg.context.max_summary_files_minimal
1276
1297
  elif mode == "balanced":
1277
1298
  cap = cfg.context.max_summary_files_balanced
@@ -1323,17 +1344,17 @@ def _guarded_summary_cap(
1323
1344
  if rows < 3:
1324
1345
  if no_live_changes and cap > 0:
1325
1346
  if effective_budget and effective_budget <= 2500:
1326
- return min(cap, 4 if mode == "minimal" else 6)
1347
+ return min(cap, 4 if mode in ("lite", "minimal") else 6)
1327
1348
  if effective_budget and effective_budget <= 6000:
1328
- return min(cap, 12 if mode == "minimal" else 16)
1349
+ return min(cap, 12 if mode in ("lite", "minimal") else 16)
1329
1350
  return min(cap, 16)
1330
1351
  return cap
1331
1352
  if avg_summary_precision <= 0.05:
1332
1353
  if no_live_changes:
1333
1354
  return -1
1334
- strict_cap = 3 if mode == "minimal" else 5 if mode == "balanced" else 10
1355
+ strict_cap = 2 if mode == "lite" else 3 if mode == "minimal" else 5 if mode == "balanced" else 10
1335
1356
  elif avg_summary_precision <= 0.15:
1336
- strict_cap = 3 if no_live_changes else 6 if mode == "minimal" else 12 if mode == "balanced" else 20
1357
+ strict_cap = 2 if mode == "lite" else 3 if no_live_changes else 6 if mode == "minimal" else 12 if mode == "balanced" else 20
1337
1358
  else:
1338
1359
  if no_live_changes and cap > 0:
1339
1360
  return min(cap, 8)
@@ -1391,15 +1412,15 @@ def _guarded_weak_signal_cap(
1391
1412
  if not no_live_changes:
1392
1413
  return 0
1393
1414
  if generic_ratio >= 0.5:
1394
- base = {"minimal": 0, "balanced": 1, "deep": 2}.get(mode, 1)
1415
+ base = {"lite": 0, "minimal": 0, "balanced": 1, "deep": 2}.get(mode, 1)
1395
1416
  elif generic_ratio >= 0.35:
1396
- base = {"minimal": 1, "balanced": 2, "deep": 3}.get(mode, 2)
1417
+ base = {"lite": 0, "minimal": 1, "balanced": 2, "deep": 3}.get(mode, 2)
1397
1418
  else:
1398
- base = {"minimal": 2, "balanced": 4, "deep": 6}.get(mode, 3)
1419
+ base = {"lite": 1, "minimal": 2, "balanced": 4, "deep": 6}.get(mode, 3)
1399
1420
  avg_precision, rows = _recent_token_precision(root)
1400
1421
  if rows >= 3:
1401
1422
  if avg_precision <= 0.1:
1402
- base = min(base, 0 if mode == "minimal" else 1)
1423
+ base = min(base, 0 if mode in ("lite", "minimal") else 1)
1403
1424
  elif avg_precision <= 0.2:
1404
1425
  base = min(base, 1 if mode != "deep" else 2)
1405
1426
  if effective_budget and effective_budget <= 2500: