agentpack-cli 0.3.13__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.
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/PKG-INFO +50 -5
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/README.md +49 -4
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/pyproject.toml +1 -1
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/__init__.py +1 -1
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/application/pack_service.py +36 -13
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/benchmark.py +243 -5
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/dev_check.py +14 -1
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/explain.py +3 -3
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/guard.py +3 -3
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/init.py +22 -9
- agentpack_cli-0.3.15/src/agentpack/commands/learn.py +179 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/migrate.py +3 -3
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/pack.py +3 -3
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/quickstart.py +3 -3
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/release_check.py +16 -1
- agentpack_cli-0.3.15/src/agentpack/commands/skills.py +106 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/config.py +8 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/context_pack.py +8 -1
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/models.py +1 -1
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/learning/__init__.py +4 -0
- agentpack_cli-0.3.15/src/agentpack/learning/feedback.py +171 -0
- agentpack_cli-0.3.15/src/agentpack/learning/lesson_ranker.py +39 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/learning/models.py +34 -0
- agentpack_cli-0.3.15/src/agentpack/learning/provider.py +52 -0
- agentpack_cli-0.3.15/src/agentpack/learning/renderers.py +235 -0
- agentpack_cli-0.3.15/src/agentpack/learning/skill_map.py +142 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/mcp_server.py +16 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/router/models.py +9 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/router/parser.py +34 -1
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/router/prompt_builder.py +25 -3
- agentpack_cli-0.3.15/src/agentpack/router/scoring.py +409 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/router/service.py +100 -0
- agentpack_cli-0.3.13/src/agentpack/commands/learn.py +0 -101
- agentpack_cli-0.3.13/src/agentpack/commands/skills.py +0 -46
- agentpack_cli-0.3.13/src/agentpack/learning/feedback.py +0 -22
- agentpack_cli-0.3.13/src/agentpack/learning/renderers.py +0 -99
- agentpack_cli-0.3.13/src/agentpack/learning/skill_map.py +0 -29
- agentpack_cli-0.3.13/src/agentpack/router/scoring.py +0 -178
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/.gitignore +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/LICENSE +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/adapters/__init__.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/adapters/antigravity.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/adapters/base.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/adapters/claude.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/adapters/codex.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/adapters/cursor.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/adapters/detect.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/adapters/generic.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/adapters/windsurf.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/__init__.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/dependency_graph.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/go_imports.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/java_imports.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/js_ts_imports.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/monorepo.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/naming_signals.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/python_imports.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/ranking.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/repo_map.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/role_inference.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/rust_imports.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/symbols.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/task_classifier.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/analysis/tests.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/application/__init__.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/cli.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/__init__.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/_shared.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/ci_cmd.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/claude_cmd.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/diagnose_selection.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/diff.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/doctor.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/eval_cmd.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/hook_cmd.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/ignore_cmd.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/install.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/mcp_cmd.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/monitor.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/next_cmd.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/release_cmd.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/repair.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/route.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/scan.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/start_cmd.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/state_cmd.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/stats.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/status.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/summarize.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/task_cmd.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/threads.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/tune.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/verify_wheel.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/watch.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/commands/workflow_cmd.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/__init__.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/bootstrap.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/cache.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/changed_paths.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/diff.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/evals.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/execution_state.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/git.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/git_hooks.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/global_install.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/ignore.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/merkle.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/redactor.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/scanner.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/snapshot.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/task_freshness.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/thread_context.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/token_estimator.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/core/vscode_tasks.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/data/agentpack.md +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/installers/__init__.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/installers/antigravity.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/installers/claude.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/installers/codex.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/installers/cursor.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/installers/windsurf.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/integrations/__init__.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/integrations/agents.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/integrations/git_hooks.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/integrations/global_install.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/integrations/platform.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/integrations/vscode_tasks.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/learning/collector.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/learning/extractor.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/learning/quality.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/renderers/__init__.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/renderers/compact.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/renderers/markdown.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/renderers/receipts.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/router/__init__.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/router/discovery.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/session/__init__.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/session/state.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/summaries/__init__.py +0 -0
- {agentpack_cli-0.3.13 → agentpack_cli-0.3.15}/src/agentpack/summaries/base.py +0 -0
- {agentpack_cli-0.3.13 → 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.
|
|
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
|

|
|
65
65
|
|
|
66
|
-
> **Status: alpha (v0.3.
|
|
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:
|
|
@@ -205,10 +232,21 @@ agentpack learn --today
|
|
|
205
232
|
agentpack learn --since main
|
|
206
233
|
agentpack learn --json
|
|
207
234
|
agentpack learn --llm-prompt --pr-comment
|
|
208
|
-
agentpack learn --
|
|
235
|
+
agentpack learn --provider-preview
|
|
236
|
+
agentpack learn --provider-command "python scripts/learn_provider.py"
|
|
237
|
+
agentpack learn --dashboard --team-export
|
|
238
|
+
agentpack learn --skills
|
|
239
|
+
agentpack learn --drills
|
|
240
|
+
agentpack learn --ci
|
|
241
|
+
agentpack learn --feedback helpful --feedback-target "skill:CLI design" --feedback-note "Useful review prompts"
|
|
209
242
|
```
|
|
210
243
|
|
|
211
|
-
AgentPack writes developer notes to `.agentpack/learning.md` or `.agentpack/daily-summary.md`, updates `.agentpack/skills-progress.json`, writes `.agentpack/agent-lessons.md` for future coding agents, and can emit `.agentpack/learning.prompt.md
|
|
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`.
|
|
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.
|
|
212
250
|
|
|
213
251
|
## Agent Setup
|
|
214
252
|
|
|
@@ -247,10 +285,15 @@ Generated instructions keep thread mode explicit. They recommend `AGENTPACK_THRE
|
|
|
247
285
|
default_mode = "balanced"
|
|
248
286
|
default_budget = 40000
|
|
249
287
|
|
|
288
|
+
[context_lite]
|
|
289
|
+
budget = 8000
|
|
290
|
+
|
|
250
291
|
[agents.generic]
|
|
251
292
|
output = ".agentpack/context.md"
|
|
252
293
|
```
|
|
253
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
|
+
|
|
254
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.
|
|
255
298
|
|
|
256
299
|
Use scoring weights only after measuring a real miss:
|
|
@@ -319,7 +362,7 @@ gate.
|
|
|
319
362
|
| `agentpack work "task"` | Initialize if needed, start task, refresh context, show next steps |
|
|
320
363
|
| `agentpack start "task"` | Write task and run the guard/refresh workflow |
|
|
321
364
|
| `agentpack finish --since main` | Diagnose, capture benchmark case, run checks, mark done |
|
|
322
|
-
| `agentpack learn` | Generate developer learning notes, skill
|
|
365
|
+
| `agentpack learn` | Generate developer learning notes, skill memory, feedback-aware drills, and future-agent lessons |
|
|
323
366
|
| `agentpack task show|set|clear` | Manage global or thread-scoped task files |
|
|
324
367
|
| `agentpack pack` | Generate a ranked context pack for `.agentpack/task.md` |
|
|
325
368
|
| `agentpack next --fix-all-safe` | Ask AgentPack what command or safe repair should happen next |
|
|
@@ -408,6 +451,8 @@ AgentPack writes local artifacts under `.agentpack/`:
|
|
|
408
451
|
| `.agentpack/agent-lessons.md` | compact repo-specific lessons injected into future packs |
|
|
409
452
|
| `.agentpack/learning.prompt.md` | optional source-backed prompt for external LLM refinement |
|
|
410
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` |
|
|
411
456
|
| `.agentpack/learning-feedback.jsonl` | optional local helpful/not-helpful feedback records |
|
|
412
457
|
| `.agentpack/pack_metadata.json` | freshness and pack metadata |
|
|
413
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
|

|
|
26
26
|
|
|
27
|
-
> **Status: alpha (v0.3.
|
|
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:
|
|
@@ -166,10 +193,21 @@ agentpack learn --today
|
|
|
166
193
|
agentpack learn --since main
|
|
167
194
|
agentpack learn --json
|
|
168
195
|
agentpack learn --llm-prompt --pr-comment
|
|
169
|
-
agentpack learn --
|
|
196
|
+
agentpack learn --provider-preview
|
|
197
|
+
agentpack learn --provider-command "python scripts/learn_provider.py"
|
|
198
|
+
agentpack learn --dashboard --team-export
|
|
199
|
+
agentpack learn --skills
|
|
200
|
+
agentpack learn --drills
|
|
201
|
+
agentpack learn --ci
|
|
202
|
+
agentpack learn --feedback helpful --feedback-target "skill:CLI design" --feedback-note "Useful review prompts"
|
|
170
203
|
```
|
|
171
204
|
|
|
172
|
-
AgentPack writes developer notes to `.agentpack/learning.md` or `.agentpack/daily-summary.md`, updates `.agentpack/skills-progress.json`, writes `.agentpack/agent-lessons.md` for future coding agents, and can emit `.agentpack/learning.prompt.md
|
|
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`.
|
|
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.
|
|
173
211
|
|
|
174
212
|
## Agent Setup
|
|
175
213
|
|
|
@@ -208,10 +246,15 @@ Generated instructions keep thread mode explicit. They recommend `AGENTPACK_THRE
|
|
|
208
246
|
default_mode = "balanced"
|
|
209
247
|
default_budget = 40000
|
|
210
248
|
|
|
249
|
+
[context_lite]
|
|
250
|
+
budget = 8000
|
|
251
|
+
|
|
211
252
|
[agents.generic]
|
|
212
253
|
output = ".agentpack/context.md"
|
|
213
254
|
```
|
|
214
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
|
+
|
|
215
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.
|
|
216
259
|
|
|
217
260
|
Use scoring weights only after measuring a real miss:
|
|
@@ -280,7 +323,7 @@ gate.
|
|
|
280
323
|
| `agentpack work "task"` | Initialize if needed, start task, refresh context, show next steps |
|
|
281
324
|
| `agentpack start "task"` | Write task and run the guard/refresh workflow |
|
|
282
325
|
| `agentpack finish --since main` | Diagnose, capture benchmark case, run checks, mark done |
|
|
283
|
-
| `agentpack learn` | Generate developer learning notes, skill
|
|
326
|
+
| `agentpack learn` | Generate developer learning notes, skill memory, feedback-aware drills, and future-agent lessons |
|
|
284
327
|
| `agentpack task show|set|clear` | Manage global or thread-scoped task files |
|
|
285
328
|
| `agentpack pack` | Generate a ranked context pack for `.agentpack/task.md` |
|
|
286
329
|
| `agentpack next --fix-all-safe` | Ask AgentPack what command or safe repair should happen next |
|
|
@@ -369,6 +412,8 @@ AgentPack writes local artifacts under `.agentpack/`:
|
|
|
369
412
|
| `.agentpack/agent-lessons.md` | compact repo-specific lessons injected into future packs |
|
|
370
413
|
| `.agentpack/learning.prompt.md` | optional source-backed prompt for external LLM refinement |
|
|
371
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` |
|
|
372
417
|
| `.agentpack/learning-feedback.jsonl` | optional local helpful/not-helpful feedback records |
|
|
373
418
|
| `.agentpack/pack_metadata.json` | freshness and pack metadata |
|
|
374
419
|
| `.agentpack/cache/` | offline file summaries keyed by hash |
|
|
@@ -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
|
|
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
|
|
|
@@ -660,6 +670,8 @@ class AdapterRegistry:
|
|
|
660
670
|
cfg.learning.agent_lessons_output,
|
|
661
671
|
cfg.learning.llm_prompt_output,
|
|
662
672
|
cfg.learning.pr_comment_output,
|
|
673
|
+
cfg.learning.dashboard_output,
|
|
674
|
+
cfg.learning.team_lessons_output,
|
|
663
675
|
cfg.learning.feedback_output,
|
|
664
676
|
}
|
|
665
677
|
)
|
|
@@ -972,10 +984,18 @@ def _rank_omitted_relevant_files(files: list[OmittedRelevantFile]) -> list[Omitt
|
|
|
972
984
|
|
|
973
985
|
|
|
974
986
|
def _repo_map_budget_for_mode(mode: str, effective_budget: int) -> int:
|
|
975
|
-
caps = {"minimal": 300, "balanced": 600, "deep": 900}
|
|
987
|
+
caps = {"lite": 150, "minimal": 300, "balanced": 600, "deep": 900}
|
|
976
988
|
return min(caps.get(mode, 500), max(0, effective_budget // 20))
|
|
977
989
|
|
|
978
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
|
+
|
|
979
999
|
_FRONTEND_TASK_TERMS = {
|
|
980
1000
|
"component", "components", "frontend", "landing", "layout", "page", "pages",
|
|
981
1001
|
"preview", "previews", "public", "seo", "signup", "tool", "tools", "ui", "web",
|
|
@@ -1269,7 +1289,10 @@ def _summary_score_floor(cfg: Any, generic_ratio: float) -> float:
|
|
|
1269
1289
|
|
|
1270
1290
|
|
|
1271
1291
|
def _summary_cap_for_mode(cfg: Any, mode: str, generic_ratio: float = 0.0) -> int:
|
|
1272
|
-
if mode == "
|
|
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":
|
|
1273
1296
|
cap = cfg.context.max_summary_files_minimal
|
|
1274
1297
|
elif mode == "balanced":
|
|
1275
1298
|
cap = cfg.context.max_summary_files_balanced
|
|
@@ -1321,17 +1344,17 @@ def _guarded_summary_cap(
|
|
|
1321
1344
|
if rows < 3:
|
|
1322
1345
|
if no_live_changes and cap > 0:
|
|
1323
1346
|
if effective_budget and effective_budget <= 2500:
|
|
1324
|
-
return min(cap, 4 if mode
|
|
1347
|
+
return min(cap, 4 if mode in ("lite", "minimal") else 6)
|
|
1325
1348
|
if effective_budget and effective_budget <= 6000:
|
|
1326
|
-
return min(cap, 12 if mode
|
|
1349
|
+
return min(cap, 12 if mode in ("lite", "minimal") else 16)
|
|
1327
1350
|
return min(cap, 16)
|
|
1328
1351
|
return cap
|
|
1329
1352
|
if avg_summary_precision <= 0.05:
|
|
1330
1353
|
if no_live_changes:
|
|
1331
1354
|
return -1
|
|
1332
|
-
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
|
|
1333
1356
|
elif avg_summary_precision <= 0.15:
|
|
1334
|
-
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
|
|
1335
1358
|
else:
|
|
1336
1359
|
if no_live_changes and cap > 0:
|
|
1337
1360
|
return min(cap, 8)
|
|
@@ -1389,15 +1412,15 @@ def _guarded_weak_signal_cap(
|
|
|
1389
1412
|
if not no_live_changes:
|
|
1390
1413
|
return 0
|
|
1391
1414
|
if generic_ratio >= 0.5:
|
|
1392
|
-
base = {"minimal": 0, "balanced": 1, "deep": 2}.get(mode, 1)
|
|
1415
|
+
base = {"lite": 0, "minimal": 0, "balanced": 1, "deep": 2}.get(mode, 1)
|
|
1393
1416
|
elif generic_ratio >= 0.35:
|
|
1394
|
-
base = {"minimal": 1, "balanced": 2, "deep": 3}.get(mode, 2)
|
|
1417
|
+
base = {"lite": 0, "minimal": 1, "balanced": 2, "deep": 3}.get(mode, 2)
|
|
1395
1418
|
else:
|
|
1396
|
-
base = {"minimal": 2, "balanced": 4, "deep": 6}.get(mode, 3)
|
|
1419
|
+
base = {"lite": 1, "minimal": 2, "balanced": 4, "deep": 6}.get(mode, 3)
|
|
1397
1420
|
avg_precision, rows = _recent_token_precision(root)
|
|
1398
1421
|
if rows >= 3:
|
|
1399
1422
|
if avg_precision <= 0.1:
|
|
1400
|
-
base = min(base, 0 if mode
|
|
1423
|
+
base = min(base, 0 if mode in ("lite", "minimal") else 1)
|
|
1401
1424
|
elif avg_precision <= 0.2:
|
|
1402
1425
|
base = min(base, 1 if mode != "deep" else 2)
|
|
1403
1426
|
if effective_budget and effective_budget <= 2500:
|