agentpack-cli 0.3.18__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.
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/PKG-INFO +9 -35
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/README.md +8 -34
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/pyproject.toml +1 -1
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/__init__.py +1 -1
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/dashboard/collectors.py +68 -4
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/dashboard/renderers.py +180 -56
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/renderers/compact.py +11 -7
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/renderers/markdown.py +39 -28
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/router/parser.py +197 -17
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/router/skills_index.py +4 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/.gitignore +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/LICENSE +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/adapters/__init__.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/adapters/antigravity.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/adapters/base.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/adapters/claude.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/adapters/codex.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/adapters/cursor.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/adapters/detect.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/adapters/generic.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/adapters/windsurf.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/__init__.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/dependency_graph.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/go_imports.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/java_imports.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/js_ts_imports.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/monorepo.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/naming_signals.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/python_ast.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/python_imports.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/ranking.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/repo_map.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/role_inference.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/rust_imports.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/symbols.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/task_classifier.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/analysis/tests.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/application/__init__.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/application/pack_service.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/cli.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/__init__.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/_shared.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/benchmark.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/ci_cmd.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/claude_cmd.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/compress_output.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/dashboard.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/dev_check.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/diagnose_selection.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/diff.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/doctor.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/eval_cmd.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/explain.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/guard.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/hook_cmd.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/ignore_cmd.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/init.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/install.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/learn.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/mcp_cmd.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/memory.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/migrate.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/monitor.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/next_cmd.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/pack.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/perf.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/quickstart.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/release_check.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/release_cmd.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/repair.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/retrieve.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/route.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/scan.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/skills.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/start_cmd.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/state_cmd.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/stats.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/status.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/summarize.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/task_cmd.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/threads.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/tune.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/verify_wheel.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/watch.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/workflow_cmd.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/commands/wrap.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/__init__.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/bootstrap.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/cache.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/changed_paths.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/config.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/context_pack.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/diff.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/evals.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/execution_state.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/git.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/git_hooks.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/global_install.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/ignore.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/loop_protocol.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/merkle.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/models.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/pack_registry.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/redactor.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/scanner.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/snapshot.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/task_freshness.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/thread_context.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/token_estimator.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/core/vscode_tasks.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/dashboard/__init__.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/dashboard/models.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/data/agentpack.md +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/installers/__init__.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/installers/antigravity.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/installers/claude.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/installers/codex.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/installers/cursor.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/installers/windsurf.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/integrations/__init__.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/integrations/agents.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/integrations/git_hooks.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/integrations/global_install.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/integrations/platform.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/integrations/vscode_tasks.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/learning/__init__.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/learning/collector.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/learning/extractor.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/learning/feedback.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/learning/lesson_ranker.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/learning/models.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/learning/provider.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/learning/quality.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/learning/renderers.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/learning/skill_map.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/mcp_server.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/output_compression/__init__.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/output_compression/core.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/renderers/__init__.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/renderers/receipts.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/router/__init__.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/router/discovery.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/router/models.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/router/prompt_builder.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/router/scoring.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/router/service.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/session/__init__.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/session/events.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/session/state.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/summaries/__init__.py +0 -0
- {agentpack_cli-0.3.18 → agentpack_cli-0.3.20}/src/agentpack/summaries/base.py +0 -0
- {agentpack_cli-0.3.18 → 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.
|
|
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
|
-
|
|
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
|

|
|
67
66
|
|
|
68
|
-
> **Status: alpha (v0.3.
|
|
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.
|
|
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
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
|

|
|
26
25
|
|
|
27
|
-
> **Status: alpha (v0.3.
|
|
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.
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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)
|
|
@@ -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: " +
|
|
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
|
-
|
|
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
|
|
431
|
-
]
|
|
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)
|