ashlr-plugin 1.36.4
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.
- package/.agents/plugins/marketplace.json +20 -0
- package/.claude-plugin/marketplace.json +39 -0
- package/.claude-plugin/plugin.json +36 -0
- package/.codex/agents/README.md +9 -0
- package/.codex/agents/ashlr-explorer.md +36 -0
- package/.codex/agents/ashlr-worker.md +38 -0
- package/.codex-plugin/plugin.json +45 -0
- package/.mcp.json +14 -0
- package/LICENSE +21 -0
- package/README.md +311 -0
- package/agents/ashlr-code.md +69 -0
- package/agents/ashlr-explore.md +44 -0
- package/agents/ashlr-plan.md +54 -0
- package/bench/fixtures/notebook-large.ipynb +660 -0
- package/bench/fixtures/notebook-small.ipynb +39 -0
- package/bench/fixtures/tasklist-closed.json +62 -0
- package/bench/fixtures/tasklist-large-mixed.json +27 -0
- package/bench/fixtures/tasklist-sprint-open.json +79 -0
- package/bench/fixtures/websearch-bun-runtime.json +32 -0
- package/bench/fixtures/websearch-react-hooks-patterns.json +32 -0
- package/bench/fixtures/websearch-typescript-generics.json +38 -0
- package/bench/refs/node-sdk/.refrev +1 -0
- package/bench/refs/node-sdk/README.md +17 -0
- package/bench/refs/node-sdk/src/agent/agent.ts +163 -0
- package/bench/refs/node-sdk/src/agent/create-agent-ui-stream.ts +83 -0
- package/bench/refs/node-sdk/src/agent/tool-loop-agent.ts +238 -0
- package/bench/refs/node-sdk/src/embed/embed-many.ts +409 -0
- package/bench/refs/node-sdk/src/embed/embed-result.ts +50 -0
- package/bench/refs/node-sdk/src/embed/embed.ts +257 -0
- package/bench/refs/node-sdk/src/error/invalid-argument-error.ts +34 -0
- package/bench/refs/node-sdk/src/error/invalid-tool-input-error.ts +33 -0
- package/bench/refs/node-sdk/src/error/no-object-generated-error.ts +70 -0
- package/bench/refs/node-sdk/src/generate-image/generate-image-result.ts +42 -0
- package/bench/refs/node-sdk/src/generate-image/generate-image.ts +362 -0
- package/bench/refs/node-sdk/src/generate-object/generate-object-result.ts +67 -0
- package/bench/refs/node-sdk/src/generate-object/generate-object.ts +501 -0
- package/bench/refs/node-sdk/src/generate-object/inject-json-instruction.ts +30 -0
- package/bench/refs/node-sdk/src/generate-object/output-strategy.ts +415 -0
- package/bench/refs/node-sdk/src/generate-object/repair-text.ts +12 -0
- package/bench/refs/node-sdk/src/generate-object/stream-object.ts +960 -0
- package/bench/refs/node-sdk/src/generate-speech/generate-speech.ts +191 -0
- package/bench/refs/node-sdk/src/generate-text/generate-text.ts +1484 -0
- package/bench/refs/node-sdk/src/generate-text/stream-text.ts +2708 -0
- package/bench/refs/node-sdk/src/generate-text/tool-call.ts +59 -0
- package/bench/refs/node-sdk/src/generate-text/tool-result.ts +36 -0
- package/bench/refs/node-sdk/src/telemetry/create-telemetry-dispatcher.ts +146 -0
- package/bench/refs/node-sdk/src/telemetry/telemetry-registry.ts +15 -0
- package/bench/refs/node-sdk/src/telemetry/telemetry.ts +223 -0
- package/bench/refs/node-sdk/src/util/async-iterable-stream.ts +94 -0
- package/bench/refs/node-sdk/src/util/consume-stream.ts +31 -0
- package/bench/refs/node-sdk/src/util/create-stitchable-stream.ts +112 -0
- package/bench/refs/node-sdk/src/util/download/download.ts +74 -0
- package/bench/refs/node-sdk/src/util/error-handler.ts +1 -0
- package/bench/refs/node-sdk/src/util/fix-json.ts +401 -0
- package/bench/refs/node-sdk/src/util/merge-objects.ts +79 -0
- package/bench/refs/python-lib/.refrev +1 -0
- package/bench/refs/python-lib/README.md +18 -0
- package/bench/refs/python-lib/pandas/core/_numba/executor.py +249 -0
- package/bench/refs/python-lib/pandas/core/_numba/extensions.py +586 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/mean_.py +198 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/min_max_.py +178 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/sum_.py +255 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/var_.py +251 -0
- package/bench/refs/python-lib/pandas/core/accessor.py +520 -0
- package/bench/refs/python-lib/pandas/core/api.py +138 -0
- package/bench/refs/python-lib/pandas/core/array_algos/masked_accumulations.py +97 -0
- package/bench/refs/python-lib/pandas/core/array_algos/masked_reductions.py +252 -0
- package/bench/refs/python-lib/pandas/core/array_algos/putmask.py +150 -0
- package/bench/refs/python-lib/pandas/core/array_algos/quantile.py +232 -0
- package/bench/refs/python-lib/pandas/core/array_algos/replace.py +159 -0
- package/bench/refs/python-lib/pandas/core/array_algos/take.py +609 -0
- package/bench/refs/python-lib/pandas/core/arraylike.py +534 -0
- package/bench/refs/python-lib/pandas/core/arrays/_arrow_string_mixins.py +434 -0
- package/bench/refs/python-lib/pandas/core/arrays/_mixins.py +630 -0
- package/bench/refs/python-lib/pandas/core/arrays/_ranges.py +276 -0
- package/bench/refs/python-lib/pandas/core/arrays/_utils.py +77 -0
- package/bench/refs/python-lib/pandas/core/arrays/arrow/accessors.py +521 -0
- package/bench/refs/python-lib/pandas/core/arrays/arrow/extension_types.py +174 -0
- package/bench/refs/python-lib/pandas/core/arrays/boolean.py +454 -0
- package/bench/refs/python-lib/pandas/core/arrays/floating.py +192 -0
- package/bench/refs/python-lib/pandas/core/arrays/integer.py +296 -0
- package/bench/refs/python-lib/pandas/core/arrays/masked.py +2140 -0
- package/bench/refs/python-lib/pandas/core/arrays/numeric.py +305 -0
- package/bench/refs/python-lib/pandas/core/arrays/numpy_.py +701 -0
- package/bench/refs/python-lib/pandas/core/arrays/period.py +1586 -0
- package/bench/refs/python-lib/pandas/core/arrays/sparse/accessor.py +505 -0
- package/bench/refs/python-lib/pandas/core/arrays/sparse/scipy_sparse.py +208 -0
- package/bench/refs/rust-project/.refrev +1 -0
- package/bench/refs/rust-project/README.md +17 -0
- package/bench/refs/rust-project/tokio/src/doc/os.rs +68 -0
- package/bench/refs/rust-project/tokio/src/fs/dir_builder.rs +129 -0
- package/bench/refs/rust-project/tokio/src/fs/file.rs +1113 -0
- package/bench/refs/rust-project/tokio/src/fs/mocks.rs +176 -0
- package/bench/refs/rust-project/tokio/src/fs/mod.rs +324 -0
- package/bench/refs/rust-project/tokio/src/fs/open_options.rs +856 -0
- package/bench/refs/rust-project/tokio/src/fs/read.rs +80 -0
- package/bench/refs/rust-project/tokio/src/fs/read_dir.rs +357 -0
- package/bench/refs/rust-project/tokio/src/fs/write.rs +99 -0
- package/bench/refs/rust-project/tokio/src/future/maybe_done.rs +123 -0
- package/bench/refs/rust-project/tokio/src/future/try_join.rs +82 -0
- package/bench/refs/rust-project/tokio/src/io/async_buf_read.rs +117 -0
- package/bench/refs/rust-project/tokio/src/io/async_read.rs +133 -0
- package/bench/refs/rust-project/tokio/src/io/async_seek.rs +96 -0
- package/bench/refs/rust-project/tokio/src/io/async_write.rs +402 -0
- package/bench/refs/rust-project/tokio/src/io/blocking.rs +339 -0
- package/bench/refs/rust-project/tokio/src/io/interest.rs +345 -0
- package/bench/refs/rust-project/tokio/src/io/join.rs +130 -0
- package/bench/refs/rust-project/tokio/src/io/mod.rs +308 -0
- package/bench/refs/rust-project/tokio/src/io/poll_evented.rs +319 -0
- package/bench/refs/rust-project/tokio/src/io/read_buf.rs +344 -0
- package/bench/refs/rust-project/tokio/src/io/ready.rs +322 -0
- package/bench/refs/rust-project/tokio/src/io/split.rs +166 -0
- package/bench/refs/rust-project/tokio/src/io/stderr.rs +148 -0
- package/bench/refs/rust-project/tokio/src/io/stdin.rs +98 -0
- package/bench/refs/rust-project/tokio/src/io/stdio_common.rs +222 -0
- package/bench/refs/rust-project/tokio/src/io/stdout.rs +197 -0
- package/bench/refs/rust-project/tokio/src/io/util/buf_reader.rs +311 -0
- package/bench/refs/rust-project/tokio/src/io/util/buf_stream.rs +207 -0
- package/bench/refs/rust-project/tokio/src/io/util/buf_writer.rs +310 -0
- package/bench/refs/rust-project/tokio/src/io/util/chain.rs +144 -0
- package/commands/_spawn-patterns.json +32 -0
- package/commands/ashlr-allow.md +21 -0
- package/commands/ashlr-benchmark.md +53 -0
- package/commands/ashlr-brief.md +97 -0
- package/commands/ashlr-budget.md +76 -0
- package/commands/ashlr-compact.md +54 -0
- package/commands/ashlr-dashboard.md +37 -0
- package/commands/ashlr-doctor.md +56 -0
- package/commands/ashlr-eco-mode.md +92 -0
- package/commands/ashlr-genome-init.md +24 -0
- package/commands/ashlr-genome-keygen.md +36 -0
- package/commands/ashlr-genome-loop.md +118 -0
- package/commands/ashlr-genome-push.md +36 -0
- package/commands/ashlr-genome-rewrap.md +48 -0
- package/commands/ashlr-genome-team-init.md +67 -0
- package/commands/ashlr-handoff.md +23 -0
- package/commands/ashlr-help.md +86 -0
- package/commands/ashlr-hook-timings.md +30 -0
- package/commands/ashlr-leaderboard.md +50 -0
- package/commands/ashlr-ollama-setup.md +39 -0
- package/commands/ashlr-orchestrate-status.md +72 -0
- package/commands/ashlr-orchestrate.md +83 -0
- package/commands/ashlr-parallelize.md +63 -0
- package/commands/ashlr-report-crash.md +33 -0
- package/commands/ashlr-resume.md +72 -0
- package/commands/ashlr-savings.md +24 -0
- package/commands/ashlr-settings.md +50 -0
- package/commands/ashlr-spawn.md +61 -0
- package/commands/ashlr-start.md +60 -0
- package/commands/ashlr-status.md +64 -0
- package/commands/ashlr-team-invite.md +47 -0
- package/commands/ashlr-tier.md +122 -0
- package/commands/ashlr-tour.md +60 -0
- package/commands/ashlr-update.md +155 -0
- package/commands/ashlr-upgrade.md +96 -0
- package/commands/goal.md +58 -0
- package/commands/loop.md +40 -0
- package/docs/CNAME +1 -0
- package/docs/PRO_TIER.md +104 -0
- package/docs/README.md +21 -0
- package/docs/architecture.md +415 -0
- package/docs/ashlr-pipe.md +161 -0
- package/docs/assets/logo.svg +19 -0
- package/docs/assets/og.png +0 -0
- package/docs/assets/og.svg +41 -0
- package/docs/benchmarks-v2.json +355 -0
- package/docs/benchmarks.json +102 -0
- package/docs/benchmarks.md +211 -0
- package/docs/billing.md +185 -0
- package/docs/cloud-genome.md +155 -0
- package/docs/competitive-wozcode.md +92 -0
- package/docs/deploy.md +325 -0
- package/docs/email-templates.md +113 -0
- package/docs/embed-tuning.md +103 -0
- package/docs/genome.md +120 -0
- package/docs/github-oauth-onboarding.md +127 -0
- package/docs/hero-video-script.md +129 -0
- package/docs/index.html +2262 -0
- package/docs/install-prompt.md +78 -0
- package/docs/install-windows.md +132 -0
- package/docs/install.ps1 +171 -0
- package/docs/install.sh +146 -0
- package/docs/launch/README.md +114 -0
- package/docs/launch/hn.md +49 -0
- package/docs/launch/reddit.md +45 -0
- package/docs/launch/x.md +65 -0
- package/docs/launch-post.md +112 -0
- package/docs/legal.md +78 -0
- package/docs/llm-providers.md +99 -0
- package/docs/multi-host-mcp.md +217 -0
- package/docs/multi-turn-architecture.md +108 -0
- package/docs/operations/deployment.md +108 -0
- package/docs/operations/error-monitoring.md +70 -0
- package/docs/operations/weekly-digest.md +70 -0
- package/docs/operations.md +494 -0
- package/docs/platform-support.md +133 -0
- package/docs/policy-packs.md +188 -0
- package/docs/press-kit/fact-sheet.md +78 -0
- package/docs/press-kit/founder-bio.md +3 -0
- package/docs/press-kit/logo.svg +33 -0
- package/docs/press-kit/screenshots.md +146 -0
- package/docs/pricing.md +251 -0
- package/docs/pro-backend-architecture.md +523 -0
- package/docs/producthunt.md +52 -0
- package/docs/router-migration.md +110 -0
- package/docs/session-log-schema.md +68 -0
- package/docs/social.md +95 -0
- package/docs/team-genome.md +528 -0
- package/docs/telemetry.md +194 -0
- package/docs/test-isolation.md +100 -0
- package/docs/upgrade.md +159 -0
- package/hooks/_hook-errors.ts +87 -0
- package/hooks/_hook-perf-emit.ts +113 -0
- package/hooks/_hook-timing-ledger.ts +1133 -0
- package/hooks/_nudge-throttle.ts +127 -0
- package/hooks/_recent-blocks.ts +127 -0
- package/hooks/audit-upload.ts +86 -0
- package/hooks/codex-hooks.json +171 -0
- package/hooks/commit-attribution.ts +179 -0
- package/hooks/edit-batching-nudge.ts +154 -0
- package/hooks/genome-scribe-hook.ts +219 -0
- package/hooks/hooks.json +294 -0
- package/hooks/orient-nudge-hook.ts +242 -0
- package/hooks/policy-enforce.ts +214 -0
- package/hooks/post-tool-use-embedding.ts +93 -0
- package/hooks/post-tool-use-genome.sh +37 -0
- package/hooks/post-tool-use-genome.ts +69 -0
- package/hooks/posttooluse-correlate.ts +122 -0
- package/hooks/posttooluse-dedupe-output.ts +241 -0
- package/hooks/posttooluse-genome-refresh.ts +223 -0
- package/hooks/posttooluse-native-nudge.ts +205 -0
- package/hooks/posttooluse-stale-result.ts +277 -0
- package/hooks/pretooluse-bash.ts +63 -0
- package/hooks/pretooluse-budget-guard.ts +318 -0
- package/hooks/pretooluse-common.ts +985 -0
- package/hooks/pretooluse-eco-router.ts +196 -0
- package/hooks/pretooluse-edit.sh +93 -0
- package/hooks/pretooluse-edit.ts +197 -0
- package/hooks/pretooluse-glob.ts +70 -0
- package/hooks/pretooluse-grep.sh +85 -0
- package/hooks/pretooluse-grep.ts +96 -0
- package/hooks/pretooluse-notebookedit.ts +121 -0
- package/hooks/pretooluse-read.sh +118 -0
- package/hooks/pretooluse-read.ts +118 -0
- package/hooks/pretooluse-task.ts +130 -0
- package/hooks/pretooluse-webfetch.ts +66 -0
- package/hooks/pretooluse-websearch.ts +85 -0
- package/hooks/pretooluse-write.ts +128 -0
- package/hooks/pulse-emit.ts +197 -0
- package/hooks/session-end-consolidate.sh +35 -0
- package/hooks/session-end-consolidate.ts +188 -0
- package/hooks/session-end-stats-gc.ts +80 -0
- package/hooks/session-log-append.sh +94 -0
- package/hooks/session-log-append.ts +116 -0
- package/hooks/session-start.ts +993 -0
- package/hooks/sessionend-hook-health-nudge.ts +451 -0
- package/hooks/sessionend-savings-nudge.ts +318 -0
- package/hooks/sessionend-status-line-nudge.ts +296 -0
- package/hooks/sessionstart-brief.ts +140 -0
- package/hooks/sessionstart-cost-refactor.ts +95 -0
- package/hooks/sessionstart-efficient.ts +110 -0
- package/hooks/sessionstart-genome-author.ts +93 -0
- package/hooks/sessionstart-lean-tools.ts +98 -0
- package/hooks/sessionstart-search.ts +97 -0
- package/hooks/stop-accounting.ts +152 -0
- package/hooks/subagent-stop-rollup.ts +162 -0
- package/hooks/userpromptsubmit-brief-trigger.ts +156 -0
- package/package.json +56 -0
- package/ports/README.md +108 -0
- package/ports/cursor/mcp.json +11 -0
- package/ports/goose/recipe.yaml +26 -0
- package/scripts/ashlr-mcp.ts +40 -0
- package/scripts/auto-update.ts +177 -0
- package/scripts/baseline-scan.ts +831 -0
- package/scripts/bench-orchestrate.ts +377 -0
- package/scripts/benchmark-refs.ts +292 -0
- package/scripts/bootstrap.mjs +100 -0
- package/scripts/brief-eval.ts +234 -0
- package/scripts/bump-version.ts +82 -0
- package/scripts/bun-resolve.d.mts +11 -0
- package/scripts/bun-resolve.mjs +59 -0
- package/scripts/calibrate-grep.ts +467 -0
- package/scripts/capture-grep-workload.ts +260 -0
- package/scripts/check-tier.ts +61 -0
- package/scripts/check-version-sync.ts +97 -0
- package/scripts/cli-orchestrate-status.ts +386 -0
- package/scripts/cli-orchestrate.ts +303 -0
- package/scripts/cli.ts +478 -0
- package/scripts/cloud-smoke-test.ts +313 -0
- package/scripts/coach-report.ts +373 -0
- package/scripts/context-db-migrate.ts +137 -0
- package/scripts/context-status.ts +43 -0
- package/scripts/demo-run.ts +255 -0
- package/scripts/deploy-smoke.sh +140 -0
- package/scripts/doctor.ts +992 -0
- package/scripts/embed-file-worker.ts +104 -0
- package/scripts/embed-tune.ts +308 -0
- package/scripts/errors-report.ts +428 -0
- package/scripts/find-test-leak.ts +69 -0
- package/scripts/generate-badge.ts +357 -0
- package/scripts/genome-auto-consolidate.ts +533 -0
- package/scripts/genome-auto-propose.ts +578 -0
- package/scripts/genome-cloud-pull.ts +363 -0
- package/scripts/genome-cloud-push.ts +382 -0
- package/scripts/genome-cloud-sync.ts +587 -0
- package/scripts/genome-commit-watcher.ts +295 -0
- package/scripts/genome-init.ts +986 -0
- package/scripts/genome-key.ts +233 -0
- package/scripts/genome-keygen.ts +168 -0
- package/scripts/genome-link.ts +59 -0
- package/scripts/genome-refresh-worker.ts +364 -0
- package/scripts/genome-rewrap.ts +90 -0
- package/scripts/genome-synthesizer.ts +679 -0
- package/scripts/genome-team-init.ts +312 -0
- package/scripts/handoff-pack.ts +438 -0
- package/scripts/hook-bootstrap.mjs +75 -0
- package/scripts/hook-timing-reader.ts +371 -0
- package/scripts/hook-timings-report.ts +554 -0
- package/scripts/install-genome-hooks.ts +196 -0
- package/scripts/install-onnx-model.ts +154 -0
- package/scripts/install-permissions.ts +276 -0
- package/scripts/install-status-line.ts +150 -0
- package/scripts/mcp-entrypoint.sh +78 -0
- package/scripts/mcp-entrypoint.ts +130 -0
- package/scripts/mdx-angle-bracket-lint.ts +152 -0
- package/scripts/measure-cold-start.ts +126 -0
- package/scripts/migrate-stats-to-sqlite.ts +86 -0
- package/scripts/ollama-setup.ts +498 -0
- package/scripts/onboarding-wizard.ts +1691 -0
- package/scripts/orchestrate-emit-telemetry.ts +177 -0
- package/scripts/orchestrate-expand.ts +517 -0
- package/scripts/orchestrate-run.ts +744 -0
- package/scripts/print-legend.ts +50 -0
- package/scripts/product-metadata.ts +38 -0
- package/scripts/prune-old-memories.ts +208 -0
- package/scripts/publish.sh +88 -0
- package/scripts/read-calibration.ts +122 -0
- package/scripts/report-crash.ts +226 -0
- package/scripts/run-benchmark.ts +750 -0
- package/scripts/run-root-tests.ts +28 -0
- package/scripts/savings-dashboard.ts +1258 -0
- package/scripts/savings-report-extras.ts +447 -0
- package/scripts/savings-status-line.ts +873 -0
- package/scripts/session-event-emit.ts +266 -0
- package/scripts/session-greet.ts +686 -0
- package/scripts/session-log-report.ts +551 -0
- package/scripts/session-resume.ts +614 -0
- package/scripts/set-hook-mode.ts +83 -0
- package/scripts/smoke-cross-platform.ts +117 -0
- package/scripts/smoke-realtime.ts +257 -0
- package/scripts/smoke-tools.ts +21 -0
- package/scripts/stats-cloud-pull.ts +213 -0
- package/scripts/stats-cloud-sync.ts +261 -0
- package/scripts/telemetry-flush.ts +160 -0
- package/scripts/telemetry-status.ts +266 -0
- package/scripts/timing-budget.ts +35 -0
- package/scripts/ui-animation.ts +120 -0
- package/scripts/ui.ts +431 -0
- package/scripts/upgrade-flow.ts +775 -0
- package/scripts/weekly-digest.ts +394 -0
- package/servers/_accounting.ts +78 -0
- package/servers/_ask-router.ts +84 -0
- package/servers/_ast-chunker.ts +434 -0
- package/servers/_ast-helpers.ts +183 -0
- package/servers/_ast-languages.ts +153 -0
- package/servers/_ast-refactor/_shared.ts +221 -0
- package/servers/_ast-refactor/cross-file-rename.ts +560 -0
- package/servers/_ast-refactor/extract-function.ts +357 -0
- package/servers/_ast-refactor/file-local-rename.ts +172 -0
- package/servers/_ast-refactor.ts +41 -0
- package/servers/_ast-skeleton.ts +107 -0
- package/servers/_bash-summarizers-registry.ts +1096 -0
- package/servers/_crash-dump.ts +210 -0
- package/servers/_cwd-clamp.ts +342 -0
- package/servers/_edit-log.ts +28 -0
- package/servers/_edit-match.ts +236 -0
- package/servers/_edit-validate.ts +196 -0
- package/servers/_embed-calibration.ts +123 -0
- package/servers/_embedding-cache.ts +401 -0
- package/servers/_embedding-model.ts +329 -0
- package/servers/_events.ts +113 -0
- package/servers/_genome-cache.ts +154 -0
- package/servers/_genome-commits.ts +172 -0
- package/servers/_genome-crypto-v2.ts +242 -0
- package/servers/_genome-crypto.ts +259 -0
- package/servers/_genome-discoveries.ts +140 -0
- package/servers/_genome-embed-populator.ts +216 -0
- package/servers/_genome-freshness.ts +134 -0
- package/servers/_genome-issues.ts +171 -0
- package/servers/_genome-live.ts +263 -0
- package/servers/_genome-prs.ts +188 -0
- package/servers/_genome-search.ts +479 -0
- package/servers/_genome-sync.ts +297 -0
- package/servers/_history-tracker.ts +279 -0
- package/servers/_http-helpers.ts +151 -0
- package/servers/_identity-hash.ts +151 -0
- package/servers/_llm-providers/anthropic.ts +132 -0
- package/servers/_llm-providers/cloud.ts +195 -0
- package/servers/_llm-providers/index.ts +350 -0
- package/servers/_llm-providers/local.ts +127 -0
- package/servers/_llm-providers/onnx.ts +393 -0
- package/servers/_llm-providers/types.ts +27 -0
- package/servers/_manifest-v2.ts +447 -0
- package/servers/_mcp-host.ts +93 -0
- package/servers/_nudge-events.ts +451 -0
- package/servers/_orchestrate-executor.ts +316 -0
- package/servers/_prefetch.ts +435 -0
- package/servers/_pricing.ts +256 -0
- package/servers/_pro.ts +381 -0
- package/servers/_read-cache.ts +44 -0
- package/servers/_router-handlers.ts +46 -0
- package/servers/_router.ts +55 -0
- package/servers/_run-with-timeout.ts +173 -0
- package/servers/_savings-render.ts +214 -0
- package/servers/_stats-sqlite.ts +640 -0
- package/servers/_stats.ts +1183 -0
- package/servers/_status-line-cells.ts +469 -0
- package/servers/_streaks.ts +162 -0
- package/servers/_summarize.ts +208 -0
- package/servers/_task-graph-render.ts +217 -0
- package/servers/_task-graph.ts +545 -0
- package/servers/_telemetry.ts +719 -0
- package/servers/_test-parsers.ts +530 -0
- package/servers/_test-watch.ts +626 -0
- package/servers/_text-helpers.ts +37 -0
- package/servers/_token-measure.ts +160 -0
- package/servers/_tool-base.ts +248 -0
- package/servers/_weekly-digest.ts +391 -0
- package/servers/ask-server-handlers.ts +49 -0
- package/servers/ask-server.ts +174 -0
- package/servers/bash-server-handlers.ts +138 -0
- package/servers/bash-server.ts +1136 -0
- package/servers/bench.ts +186 -0
- package/servers/diff-semantic-server-handlers.ts +39 -0
- package/servers/diff-semantic-server.ts +566 -0
- package/servers/diff-server-handlers.ts +317 -0
- package/servers/diff-server.ts +20 -0
- package/servers/edit-server-handlers.ts +31 -0
- package/servers/edit-server.ts +209 -0
- package/servers/edit-structural-server-handlers.ts +322 -0
- package/servers/efficiency-server-handlers.ts +161 -0
- package/servers/efficiency-server.ts +1135 -0
- package/servers/flush-server-handlers.ts +21 -0
- package/servers/flush-server.ts +19 -0
- package/servers/genome-server-handlers.ts +118 -0
- package/servers/genome-server.ts +397 -0
- package/servers/github-server-handlers.ts +187 -0
- package/servers/github-server.ts +856 -0
- package/servers/glob-server-handlers.ts +233 -0
- package/servers/glob-server.ts +20 -0
- package/servers/grep-server-handlers.ts +61 -0
- package/servers/grep-server.ts +564 -0
- package/servers/http-server-handlers.ts +36 -0
- package/servers/http-server.ts +149 -0
- package/servers/logs-server-handlers.ts +42 -0
- package/servers/logs-server.ts +359 -0
- package/servers/ls-server-handlers.ts +166 -0
- package/servers/ls-server.ts +20 -0
- package/servers/multi-edit-server-handlers.ts +51 -0
- package/servers/multi-edit-server.ts +422 -0
- package/servers/notebook-edit-server-handlers.ts +34 -0
- package/servers/notebook-edit-server.ts +181 -0
- package/servers/orient-server-handlers.ts +52 -0
- package/servers/orient-server.ts +436 -0
- package/servers/pipe-server-handlers.ts +68 -0
- package/servers/pipe-server.ts +300 -0
- package/servers/read-server-handlers.ts +42 -0
- package/servers/read-server.ts +206 -0
- package/servers/rename-file-server-handlers.ts +67 -0
- package/servers/rename-file-server.ts +699 -0
- package/servers/savings-server-handlers.ts +27 -0
- package/servers/savings-server.ts +54 -0
- package/servers/search-replace-regex-server-handlers.ts +96 -0
- package/servers/search-replace-regex-server.ts +751 -0
- package/servers/sql-server-handlers.ts +58 -0
- package/servers/sql-server.ts +505 -0
- package/servers/task-server-handlers.ts +358 -0
- package/servers/task-server.ts +24 -0
- package/servers/test-server-handlers.ts +351 -0
- package/servers/test-server.ts +20 -0
- package/servers/tree-server-handlers.ts +503 -0
- package/servers/tree-server.ts +20 -0
- package/servers/webfetch-server-handlers.ts +166 -0
- package/servers/webfetch-server.ts +20 -0
- package/servers/websearch-server-handlers.ts +215 -0
- package/servers/websearch-server.ts +19 -0
- package/servers/write-server-handlers.ts +27 -0
- package/servers/write-server.ts +97 -0
- package/skills/ashlr-brief/SKILL.md +80 -0
- package/skills/ashlr-codex-doctor/SKILL.md +21 -0
- package/skills/ashlr-codex-efficient-tools/SKILL.md +17 -0
- package/skills/ashlr-codex-genome-refresh/SKILL.md +20 -0
- package/skills/ashlr-codex-parallel-explore/SKILL.md +20 -0
- package/skills/ashlr-codex-savings/SKILL.md +17 -0
- package/skills/ashlr-cost-refactor/SKILL.md +50 -0
- package/skills/ashlr-efficient/SKILL.md +64 -0
- package/skills/ashlr-genome-author/SKILL.md +43 -0
- package/skills/ashlr-lean-tools/SKILL.md +43 -0
- package/skills/ashlr-search/SKILL.md +46 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Hacker News launch post — v1.36 Codex-native release
|
|
2
|
+
|
|
3
|
+
## Title options
|
|
4
|
+
|
|
5
|
+
- Show HN: Ashlr — open-source Codex and Claude Code plugin, −57% tokens
|
|
6
|
+
- Show HN: Ashlr — token-efficient MCP tools for Codex and Claude Code
|
|
7
|
+
- Show HN: 40 MCP tools that compress AI coding context
|
|
8
|
+
|
|
9
|
+
## URL
|
|
10
|
+
|
|
11
|
+
https://plugin.ashlr.ai/
|
|
12
|
+
|
|
13
|
+
## First comment
|
|
14
|
+
|
|
15
|
+
Hi HN. I built Ashlr after watching AI coding sessions spend a lot of context on file I/O the model did not actually need: full file reads, full grep output, verbose shell logs, and edit payloads that echo too much surrounding state.
|
|
16
|
+
|
|
17
|
+
Ashlr is an open-source MCP/plugin layer for Codex, Claude Code, Cursor, Goose, and generic MCP hosts. It ships 40 MCP tools. The high-volume ones are lower-token alternatives for read, grep, edit, bash, tree, logs, diff, SQL, HTTP, GitHub PR/issue reads, and project genome retrieval.
|
|
18
|
+
|
|
19
|
+
The current release is Codex-native:
|
|
20
|
+
|
|
21
|
+
- `.codex-plugin/plugin.json`
|
|
22
|
+
- `.mcp.json`
|
|
23
|
+
- Codex workflow skills
|
|
24
|
+
- Codex explorer/worker guidance
|
|
25
|
+
- nudge-first Codex hooks
|
|
26
|
+
|
|
27
|
+
Claude Code remains supported with slash commands, status line, and redirect-mode hooks. Cursor and Goose use the MCP server directly.
|
|
28
|
+
|
|
29
|
+
The benchmark headline is −57% cross-repo token savings:
|
|
30
|
+
|
|
31
|
+
- TypeScript (`vercel/ai`): −62%
|
|
32
|
+
- Python (`pandas`): −65%
|
|
33
|
+
- Rust (`tokio`): −44%
|
|
34
|
+
|
|
35
|
+
The methodology is public in `docs/benchmarks.md`; the benchmark runner is in `scripts/run-benchmark.ts`.
|
|
36
|
+
|
|
37
|
+
Ethics/ops: MIT license, no account required, telemetry off by default, no code/path/prompt telemetry in the default setup. Pro features are hosted genome sync and hosted summarization; the local MCP tool surface remains free.
|
|
38
|
+
|
|
39
|
+
Install:
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
git clone https://github.com/ashlrai/ashlr-plugin
|
|
43
|
+
cd ashlr-plugin && bun install
|
|
44
|
+
codex plugin marketplace add ashlrai/ashlr-plugin
|
|
45
|
+
codex plugin add ashlr@ashlr-marketplace
|
|
46
|
+
bun run scripts/cli.ts codex-doctor --json
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Repo: https://github.com/ashlrai/ashlr-plugin
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Reddit launch posts — v1.36 Codex-native release
|
|
2
|
+
|
|
3
|
+
## r/codex or r/ClaudeCode title
|
|
4
|
+
|
|
5
|
+
**ashlr v1.36 — open-source Codex + Claude Code efficiency layer, 40 MCP tools, −57% measured token savings**
|
|
6
|
+
|
|
7
|
+
## Body
|
|
8
|
+
|
|
9
|
+
I shipped the Codex-native Ashlr release.
|
|
10
|
+
|
|
11
|
+
Ashlr is an open-source MCP/plugin layer that reduces token waste from high-volume AI coding workflows: file reads, grep output, shell logs, edit summaries, directory trees, diffs, SQL output, HTTP fetches, GitHub PR/issue reads, and project memory retrieval.
|
|
12
|
+
|
|
13
|
+
What ships now:
|
|
14
|
+
|
|
15
|
+
- 40 MCP tools
|
|
16
|
+
- Codex plugin manifest in `.codex-plugin/`
|
|
17
|
+
- Codex MCP config in `.mcp.json`
|
|
18
|
+
- Codex workflow skills and explorer/worker guidance
|
|
19
|
+
- Codex nudge-first hooks
|
|
20
|
+
- Claude Code slash commands, status line, and redirect hooks
|
|
21
|
+
- Cursor and Goose MCP ports
|
|
22
|
+
|
|
23
|
+
The benchmark is reproducible and uses TypeScript, Python, and Rust reference repos:
|
|
24
|
+
|
|
25
|
+
- TypeScript (`vercel/ai`): −62%
|
|
26
|
+
- Python (`pandas`): −65%
|
|
27
|
+
- Rust (`tokio`): −44%
|
|
28
|
+
- Cross-language mean: −57%
|
|
29
|
+
|
|
30
|
+
Install:
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
git clone https://github.com/ashlrai/ashlr-plugin
|
|
34
|
+
cd ashlr-plugin && bun install
|
|
35
|
+
codex plugin marketplace add ashlrai/ashlr-plugin
|
|
36
|
+
codex plugin add ashlr@ashlr-marketplace
|
|
37
|
+
bun run scripts/cli.ts codex-doctor --json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Claude Code users can run the installer, then the marketplace slash commands.
|
|
41
|
+
|
|
42
|
+
MIT, no account required, telemetry off by default. Pro adds hosted infrastructure; the local MCP tool surface remains free.
|
|
43
|
+
|
|
44
|
+
Landing: https://plugin.ashlr.ai/
|
|
45
|
+
Repo: https://github.com/ashlrai/ashlr-plugin
|
package/docs/launch/x.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# X / Twitter launch post — v1.36 Codex-native release
|
|
2
|
+
|
|
3
|
+
## Main thread
|
|
4
|
+
|
|
5
|
+
**1/**
|
|
6
|
+
Codex and Claude Code sessions burn tokens on file I/O: full reads, full grep output, verbose shell logs, and before/after edit payloads.
|
|
7
|
+
|
|
8
|
+
ashlr is an open-source efficiency layer that compresses those workflows instead of shipping the whole payload every time.
|
|
9
|
+
|
|
10
|
+
**Measured cross-repo savings: −57%.**
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
**2/**
|
|
15
|
+
v1.36 ships:
|
|
16
|
+
|
|
17
|
+
- 40 MCP tools
|
|
18
|
+
- Codex plugin manifest in `.codex-plugin/`
|
|
19
|
+
- Codex MCP config in `.mcp.json`
|
|
20
|
+
- Codex workflow skills
|
|
21
|
+
- Codex nudge-first hooks
|
|
22
|
+
- Claude Code slash commands, redirects, and status line
|
|
23
|
+
- Cursor and Goose MCP ports
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
**3/**
|
|
28
|
+
The benchmark is reproducible:
|
|
29
|
+
|
|
30
|
+
- TypeScript (`vercel/ai`): −62%
|
|
31
|
+
- Python (`pandas`): −65%
|
|
32
|
+
- Rust (`tokio`): −44%
|
|
33
|
+
- Cross-language mean: −57%
|
|
34
|
+
|
|
35
|
+
Methodology is public in `docs/benchmarks.md`.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
**4/**
|
|
40
|
+
The free tier is not crippled.
|
|
41
|
+
|
|
42
|
+
MIT license. No account required. Telemetry off by default. Stats stay local unless you explicitly enable hosted features.
|
|
43
|
+
|
|
44
|
+
Pro adds cloud genome sync and hosted summarization; the 40 MCP tools remain free.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
**5/**
|
|
49
|
+
Install:
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
git clone https://github.com/ashlrai/ashlr-plugin
|
|
53
|
+
cd ashlr-plugin && bun install
|
|
54
|
+
codex plugin marketplace add ashlrai/ashlr-plugin
|
|
55
|
+
codex plugin add ashlr@ashlr-marketplace
|
|
56
|
+
bun run scripts/cli.ts codex-doctor --json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Claude Code users can run the installer, then the marketplace slash commands.
|
|
60
|
+
|
|
61
|
+
plugin.ashlr.ai
|
|
62
|
+
|
|
63
|
+
## Standalone single post
|
|
64
|
+
|
|
65
|
+
Open-source Codex + Claude Code efficiency layer: 40 MCP tools, Codex skills, nudge-first Codex hooks, Claude Code slash commands/status line, and measured −57% cross-repo token savings. MIT, no account required, telemetry off by default. plugin.ashlr.ai
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Why I built a token-efficiency layer for Codex and Claude Code
|
|
2
|
+
|
|
3
|
+
Token counts are a real operating cost. I started noticing it the same way you notice a slow memory leak: not all at once, but through accumulating evidence. The context window fills up faster than it should. Sessions hit the limit mid-refactor. The Anthropic invoice climbs past what feels proportionate to the actual work done.
|
|
4
|
+
|
|
5
|
+
The culprit is usually reads. When an AI coding agent opens a 15,000-token file to change three lines, it can ship all 15,000 tokens to the model as context. Grep a large codebase for an import pattern and you might get 85,000 tokens of match output that the model skims and discards. Every native `Read`, `Grep`, and `Edit` call transmits the full payload whether the model needs it or not.
|
|
6
|
+
|
|
7
|
+
That is the problem ashlr solves.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## What it is
|
|
12
|
+
|
|
13
|
+
ashlr is an open-source Codex and Claude Code efficiency layer: 40 MCP tools, Codex skills, 34 Claude Code slash commands, an optional Claude status line, and an optional hosted backend. One-line Claude Code install:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
curl -fsSL https://plugin.ashlr.ai/install.sh | bash
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The tools replace high-volume `Read`, `Grep`, `Edit`, and `Bash` workflows with compressed alternatives. `ashlr__read` returns a head+tail snip instead of the full file. `ashlr__grep` routes through a genome-aware retrieval index when one exists, and falls back to truncated ripgrep otherwise. `ashlr__edit` returns a diff summary instead of echoing the full before+after. The model gets enough context to do the work. The bill shrinks.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Why now
|
|
24
|
+
|
|
25
|
+
Two things converged. Claude Code and Codex both expose plugin/MCP surfaces, which means tools like this can run as standard MCP servers under compatible hosts — Codex packaging, Cursor, and Goose ports ship with the plugin today. And AI coding costs have matured from "toy" to "line item." Teams running AI coding agents across five engineers with heavy usage are spending real money. The efficiency question is no longer academic.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## The moment it clicked
|
|
30
|
+
|
|
31
|
+
I was working in this repo — the ashlr-plugin codebase itself, 750 files, 149,462 lines — and ran a benchmark to see what the numbers actually looked like. Not rough estimates. Measured, reproducible numbers against real files.
|
|
32
|
+
|
|
33
|
+
Here is what the benchmark found on `ashlr__read` for a 15KB test file (`server/tests/auth.test.ts`, 10,846 bytes):
|
|
34
|
+
|
|
35
|
+
| | Raw | ashlr |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| Bytes | 10,846 | 1,623 |
|
|
38
|
+
| Tokens | 2,709 | 406 |
|
|
39
|
+
| Ratio | 1.00 | 0.15 |
|
|
40
|
+
|
|
41
|
+
That is an 85% reduction on one file. For the `CHANGELOG.md` (41,100 bytes, 10,200 raw tokens), the ratio drops to 0.040 — the compressed view uses 406 tokens where the full file would have used 10,200. The model gets the structural information it needs; the padding disappears.
|
|
42
|
+
|
|
43
|
+
Across all file sizes in the benchmark:
|
|
44
|
+
|
|
45
|
+
| Tool | Mean savings | p50 savings |
|
|
46
|
+
|---|---|---|
|
|
47
|
+
| `ashlr__read` | −82.2% | −88.8% |
|
|
48
|
+
| `ashlr__grep` | −81.7% | −97.2% |
|
|
49
|
+
| **Overall** | **−57%** | — |
|
|
50
|
+
|
|
51
|
+
The overall −57% is the cross-language headline across TypeScript, Python, and Rust reference repos. The benchmark methodology is published in `docs/benchmarks.md` and `docs/benchmarks-v2.json`.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## What's free, what's paid
|
|
56
|
+
|
|
57
|
+
Everything in the free tier is the product. 40 MCP tools, 34 Claude Code slash commands, Codex workflow skills, the genome scribe loop, per-session token accounting, a calibration harness, a reproducible benchmark. MIT license. No account. Telemetry off by default.
|
|
58
|
+
|
|
59
|
+
Pro ($12/month or $120/year) adds hosted infrastructure for developers who need it: a cloud LLM summarizer so you do not need Ollama running locally, cross-machine stats sync, a live auto-updating badge. It does not remove or degrade anything in the free tier.
|
|
60
|
+
|
|
61
|
+
Team ($24/user/month) adds the shared encrypted team genome — one authoritative retrieval index per repo, end-to-end encrypted with AES-256-GCM and synced via vclock-based last-write-wins (concurrent edits surface in `/ashlr-genome-conflicts` for a one-click manual resolve) — plus org dashboards, policy packs, genome diffs on PRs, SSO, and audit log.
|
|
62
|
+
|
|
63
|
+
Enterprise covers on-prem deployment with private inference. Nothing about the free tier is crippled to push upgrades.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Who it's for
|
|
68
|
+
|
|
69
|
+
Individual developers today. If you use Codex or Claude Code heavily on real codebases, the free tier will measurably reduce your token consumption within the first session. Run `bun run scripts/run-benchmark.ts --compare` to measure your repo. In Codex sessions, inspect live savings after Ashlr tool calls with `ashlr stats --json` or `ashlr__savings`; in Claude Code, use `/ashlr-benchmark` or `/ashlr-savings`.
|
|
70
|
+
|
|
71
|
+
Teams via pro. The shared genome becomes worth the overhead at three or more engineers working the same codebase — the retrieval index reflects everyone's edits, not just yours.
|
|
72
|
+
|
|
73
|
+
Enterprise via on-prem. If your company is sensitive about code leaving the VPC, the plugin's architecture supports private inference endpoints. The genome format is a public spec; nothing is locked to the hosted service.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Three things that surprised me building this
|
|
78
|
+
|
|
79
|
+
**The session counter bug (v0.9.3).** The status line was showing `session +0` for many users even as lifetime totals kept climbing. The cause was subtle: Claude Code forwards `CLAUDE_SESSION_ID` to hooks but not to MCP server subprocesses. So the MCP server was writing savings to a PPID-hash bucket, and the status line was reading a `CLAUDE_SESSION_ID` bucket, and the two never intersected. The fix — `candidateSessionIds()` returning both and aggregating across them — sounds obvious in retrospect but required actually inspecting a live `stats.json` to see the orphaned bucket sitting there with 2,863 tokens that nobody was reading.
|
|
80
|
+
|
|
81
|
+
**The `$` interpolation bug (v0.9.2).** `ashlr__multi_edit` uses `String.prototype.replace()` for strict-mode edits. JavaScript's `replace(string, string)` interprets `$&`, `$1`, `` $` ``, and `$'` in the replacement string. This silently corrupted any edit whose replacement contained a `$` followed by certain characters — template literals, TypeScript generic constraints, currency strings. The fix was switching to `slice + concat`, which treats the replacement as a literal. The bug had been there since the tool launched; the security audit in v0.9.2 caught it.
|
|
82
|
+
|
|
83
|
+
**Zombie processes (v1.0.1).** Running `/reload-plugins` in Claude Code re-reads plugin manifests but does not kill MCP server subprocesses spawned by earlier reloads. If a terminal was opened before an upgrade, the old MCP server process keeps writing the old stats.json schema alongside the new writers. The v1 and v2 shapes are incompatible enough that the v1 writer was periodically wiping the `sessions` map that the v2 reader depended on. The fix was a fallback in `pickSession()` that surfaces the v1 singular counter when the v2 sessions map is empty. Full correctness requires restarting Claude Code, not just reloading plugins.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Open source
|
|
88
|
+
|
|
89
|
+
The full plugin — every tool, every skill, the genome format, the compression logic — is on GitHub at [github.com/ashlrai/ashlr-plugin](https://github.com/ashlrai/ashlr-plugin). The benchmark script is `scripts/run-benchmark.ts` and the seeded results are in `docs/benchmarks-v2.json`. The CI job at `.github/workflows/ci.yml` runs it on every push and opens a PR on Monday to refresh the data.
|
|
90
|
+
|
|
91
|
+
860 tests pass. 2 are skipped: a `no-genome grep` flake that only surfaces in the full-suite parallel environment (passes reliably in isolation) and a benchmark ratio assertion with the same root cause. Both are documented in-line.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Install
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
curl -fsSL https://plugin.ashlr.ai/install.sh | bash
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Then inside Claude Code:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
/plugin marketplace add ashlrai/ashlr-plugin
|
|
105
|
+
/plugin install ashlr@ashlr-marketplace
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Restart Claude Code. Run `/ashlr-allow` once to silence permission prompts. Run `/ashlr-tour` for a 60-second walkthrough on your actual codebase.
|
|
109
|
+
|
|
110
|
+
Full docs at [plugin.ashlr.ai/docs](https://plugin.ashlr.ai/docs). Pricing at [plugin.ashlr.ai/pricing](https://plugin.ashlr.ai/pricing).
|
|
111
|
+
|
|
112
|
+
If the numbers look wrong on your codebase, run `/ashlr-benchmark` and open an issue. The methodology is public and the script is auditable.
|
package/docs/legal.md
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Pre-launch Legal Checklist
|
|
2
|
+
|
|
3
|
+
Internal tracking doc. Do not publish.
|
|
4
|
+
|
|
5
|
+
Last reviewed: 2026-04-18
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Before launch — required actions
|
|
10
|
+
|
|
11
|
+
### Entity and policy text
|
|
12
|
+
|
|
13
|
+
- [x] **Entity name confirmed.** Privacy, Terms, and DPA now say "AshlrAI Inc" (Delaware corporation). Contact email is `support@ashlr.ai` across all pages.
|
|
14
|
+
- [x] **Governing law clause.** Delaware, in `site/app/terms/page.tsx` section 10. Placeholder removed.
|
|
15
|
+
- [ ] **Data residency claims.** Privacy Policy section 8 states "US-East (iad)" for Fly.io and Neon. Verify this matches the actual region in `fly.toml` and the Neon project settings before go-live.
|
|
16
|
+
- [ ] **Age verification.** Both Privacy Policy (section 9) and Terms (section 3) set a 13+ minimum. If you ever target education or government markets you may need FERPA/COPPA review.
|
|
17
|
+
|
|
18
|
+
### Stripe
|
|
19
|
+
|
|
20
|
+
- [ ] Register and verify the Stripe webhook endpoint (`/api/stripe/webhook`) with the correct signing secret in your production environment.
|
|
21
|
+
- [ ] Enable the billing portal in the Stripe dashboard (Settings → Billing → Customer portal) so the "cancel anytime via portal" promise in Terms section 5 actually works.
|
|
22
|
+
- [ ] Confirm the 14-day refund window is noted in the Stripe portal configuration.
|
|
23
|
+
- [ ] Confirm tax collection settings (automatic tax or manual) match the "exclusive of taxes" language in Terms section 5.
|
|
24
|
+
|
|
25
|
+
### SendGrid
|
|
26
|
+
|
|
27
|
+
- [ ] Verify the sending domain (`ashlr.ai`) in the SendGrid dashboard. Add SPF, DKIM, and DMARC records to DNS.
|
|
28
|
+
- [x] `support@ashlr.ai` is the canonical contact email — referenced across privacy, terms, DPA, pricing, footer, docs, and docs/pro/*.
|
|
29
|
+
- [ ] Set up transactional email templates: welcome / magic link, subscription receipt, renewal reminder, policy change notice (30-day lead).
|
|
30
|
+
|
|
31
|
+
### Sub-processor DPAs
|
|
32
|
+
|
|
33
|
+
If you sign enterprise customers, you will need countersigned DPAs with each sub-processor:
|
|
34
|
+
|
|
35
|
+
- [ ] Railway — check their DPA availability at https://railway.com/legal/dpa
|
|
36
|
+
- [ ] Neon — check their DPA availability at https://neon.tech/legal
|
|
37
|
+
- [ ] Vercel — DPA available at https://vercel.com/legal/dpa
|
|
38
|
+
- [ ] Stripe — DPA available at https://stripe.com/legal/dpa
|
|
39
|
+
- [ ] SendGrid — DPA at https://www.twilio.com/en-us/legal/data-protection-addendum (Twilio SendGrid)
|
|
40
|
+
|
|
41
|
+
### International
|
|
42
|
+
|
|
43
|
+
- [ ] If you have EU enterprise customers, ensure Fly.io and Neon projects can be migrated to EU regions as promised in Privacy Policy section 8 and DPA section 3.
|
|
44
|
+
- [ ] Confirm SCC module selection (Module 2: controller-to-processor) with each sub-processor DPA.
|
|
45
|
+
- [ ] UK adequacy — if you have UK customers post-Brexit, SCCs with UK addendum (IDTA) may be required.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## What's low-risk (can launch as-is)
|
|
50
|
+
|
|
51
|
+
- Cookie notice — minimal cookies (Stripe on checkout only), banner is accessible and stores consent in localStorage for 180 days.
|
|
52
|
+
- CCPA compliance — we collect no data on the free tier; Pro collects only email and aggregate numbers. No sale of data. The DPA stub correctly states this.
|
|
53
|
+
- MIT license / IP section — straightforward, no legal risk.
|
|
54
|
+
- Limitation of liability cap (12 months fees or $100 minimum) — standard SaaS clause, low risk for a developer tool.
|
|
55
|
+
- Arbitration clause — AAA rules, Delaware seat, standard for US-based SaaS.
|
|
56
|
+
- Children's policy (13+) — conservative threshold, no COPPA complexity.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## What needs legal review before enterprise sales
|
|
61
|
+
|
|
62
|
+
- Governing law and arbitration (sections 10–11 of Terms) — confirm state of formation.
|
|
63
|
+
- DPA countersignature process — the `/dpa` page is a stub; a proper exhibit needs to be drafted and signed for each enterprise customer.
|
|
64
|
+
- 99.5% SLA for enterprise — only commit to this if you have monitoring and runbook in place.
|
|
65
|
+
- GDPR Article 37 DPO assessment — currently stated as not required. Revisit if EU revenue exceeds thresholds or if you process special categories of data.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## File locations
|
|
70
|
+
|
|
71
|
+
| Document | Route | File |
|
|
72
|
+
|---|---|---|
|
|
73
|
+
| Privacy Policy | /privacy | site/app/privacy/page.tsx |
|
|
74
|
+
| Terms of Service | /terms | site/app/terms/page.tsx |
|
|
75
|
+
| Data Processing Addendum | /dpa | site/app/dpa/page.tsx |
|
|
76
|
+
| Cookie banner component | (component) | site/components/cookie-banner.tsx |
|
|
77
|
+
| Footer (updated) | (component) | site/components/footer.tsx |
|
|
78
|
+
| Sitemap | /sitemap.xml | site/app/sitemap.ts |
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# LLM Provider Hierarchy
|
|
2
|
+
|
|
3
|
+
ashlr's summarization layer picks the best available LLM automatically. This doc explains the hierarchy, env vars, and costs.
|
|
4
|
+
|
|
5
|
+
## Provider order (`ASHLR_LLM_PROVIDER=auto`)
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
anthropic → onnx → local → none (truncation fallback)
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Each provider is tried in order. The first one whose `isAvailable()` returns true is used for the session. If a provider's `summarize()` throws at runtime, the output falls back to `snipCompact` truncation (never crashes, never blocks).
|
|
12
|
+
|
|
13
|
+
## Providers
|
|
14
|
+
|
|
15
|
+
### anthropic (default winner)
|
|
16
|
+
|
|
17
|
+
**Model:** `claude-haiku-4-5-20251001`
|
|
18
|
+
|
|
19
|
+
**Availability:** `ANTHROPIC_API_KEY` env var, OR Claude Code's credential store at `~/.claude/.credentials.json` (written automatically when you log in to Claude Code — no extra setup needed).
|
|
20
|
+
|
|
21
|
+
**Cost:** $0.80/MTok input + $4.00/MTok output. A typical 16KB→500-byte summarization uses ~4K in + ~500 out ≈ $0.005.
|
|
22
|
+
|
|
23
|
+
**Timeout:** 15 seconds per call.
|
|
24
|
+
|
|
25
|
+
### onnx (stubbed in v1.22)
|
|
26
|
+
|
|
27
|
+
**Model:** Xenova/distilbart-cnn-6-6 (text summarization, ~300MB)
|
|
28
|
+
|
|
29
|
+
**Status:** Stubbed. `isAvailable()` always returns false in this release. Model files can be pre-downloaded with:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
bun run scripts/install-onnx-model.ts
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The inference pipeline will be wired in a future sprint. Once available, ONNX runs fully offline at $0 cost.
|
|
36
|
+
|
|
37
|
+
**Availability when implemented:** `onnxruntime-node` installed (optional dep) AND model at `~/.ashlr/models/distilbart/`.
|
|
38
|
+
|
|
39
|
+
### local
|
|
40
|
+
|
|
41
|
+
Connects to an OpenAI-compatible server (LM Studio, Ollama, etc.).
|
|
42
|
+
|
|
43
|
+
**Availability:** Pings `GET {ASHLR_LLM_URL}/models` — responds 200 within 2s. Result cached for 60s.
|
|
44
|
+
|
|
45
|
+
**Env vars:**
|
|
46
|
+
|
|
47
|
+
| Var | Default | Purpose |
|
|
48
|
+
|-----|---------|---------|
|
|
49
|
+
| `ASHLR_LLM_URL` | `http://localhost:1234/v1` | Base URL of the local server |
|
|
50
|
+
| `ASHLR_LLM_KEY` | `local-llm` | Bearer token (most local servers don't validate) |
|
|
51
|
+
| `ASHLR_LLM_MODEL` | `qwen/qwen3-coder-30b@8bit` | Model name to request |
|
|
52
|
+
|
|
53
|
+
**Cost:** $0 (local inference).
|
|
54
|
+
|
|
55
|
+
### none
|
|
56
|
+
|
|
57
|
+
Selected when no other provider is available. `summarize()` throws immediately, and the caller falls back to `snipCompact` truncation with an `[ashlr · LLM unreachable, fell back to truncation]` note.
|
|
58
|
+
|
|
59
|
+
## Controlling provider selection
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Env var (set in shell profile or .env)
|
|
63
|
+
export ASHLR_LLM_PROVIDER=auto # default: try each in order
|
|
64
|
+
export ASHLR_LLM_PROVIDER=anthropic # force Anthropic; throw if unavailable
|
|
65
|
+
export ASHLR_LLM_PROVIDER=local # force local LM Studio / Ollama
|
|
66
|
+
export ASHLR_LLM_PROVIDER=off # disable summarization entirely
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Telemetry
|
|
70
|
+
|
|
71
|
+
Every summarization call emits a `llm_summarize_provider_used` event to `~/.ashlr/session-log.jsonl`:
|
|
72
|
+
|
|
73
|
+
```jsonl
|
|
74
|
+
{"ts":"...","event":"tool_call","tool":"ashlr__read","provider":"anthropic","latency_ms":342,"in_tokens":4096,"out_tokens":487,"fellBackToSnipCompact":false,"llmCostUsd":0.00523}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Use `/ashlr-savings` or `/ashlr-dashboard` to view aggregated stats.
|
|
78
|
+
|
|
79
|
+
## Diagnosing provider selection
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
/ashlr-doctor
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The "runtime state" section reports which provider would be selected and any availability issues.
|
|
86
|
+
|
|
87
|
+
## Architecture
|
|
88
|
+
|
|
89
|
+
Implementation lives in `servers/_llm-providers/`:
|
|
90
|
+
|
|
91
|
+
| File | Purpose |
|
|
92
|
+
|------|---------|
|
|
93
|
+
| `types.ts` | `LlmProvider` interface |
|
|
94
|
+
| `anthropic.ts` | Anthropic Haiku 4.5 via Messages API |
|
|
95
|
+
| `onnx.ts` | ONNX local inference (stubbed) |
|
|
96
|
+
| `local.ts` | OpenAI-compat local LLM |
|
|
97
|
+
| `index.ts` | `selectProvider()` + `summarizeIfLarge()` facade |
|
|
98
|
+
|
|
99
|
+
`servers/_summarize.ts` re-exports `summarizeIfLarge` from `index.ts` — all existing callers are unchanged.
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# Multi-host MCP setup
|
|
2
|
+
|
|
3
|
+
`ashlr-plugin` ships its 40 efficiency tools as a single MCP stdio server. The
|
|
4
|
+
server is host-agnostic — any client that speaks the [Model Context Protocol](https://modelcontextprotocol.io/)
|
|
5
|
+
can wire it up. Savings and accounting apply when the host calls Ashlr MCP
|
|
6
|
+
tools: Claude Code redirects automatically, Codex nudges toward those tools,
|
|
7
|
+
and other hosts call them directly.
|
|
8
|
+
|
|
9
|
+
| Host | Status | Hook redirects | Status line | Slash commands |
|
|
10
|
+
| --------------------- | ---------- | -------------- | ----------- | -------------- |
|
|
11
|
+
| **Claude Code** | ✅ Default | ✅ yes | ✅ yes | ✅ yes |
|
|
12
|
+
| **Cline (OSS)** | ✅ Working | ❌ no (1) | ❌ no | n/a |
|
|
13
|
+
| **Claude Desktop** | ✅ Working | ❌ no (1) | ❌ no | n/a |
|
|
14
|
+
| **OpenAI Codex CLI** | ✅ First-class plugin | ✅ nudge-first | ❌ no | skills |
|
|
15
|
+
| **Cursor** | ✅ Working MCP port | ❌ no (1) | ❌ no | n/a |
|
|
16
|
+
| **Goose** | ✅ Working recipe | ❌ no (1) | ❌ no | n/a |
|
|
17
|
+
| **Generic MCP host** | ✅ Working | ❌ no (1) | ❌ no | n/a |
|
|
18
|
+
|
|
19
|
+
> (1) Hook redirects (`ASHLR_HOOK_MODE=redirect` that auto-rewrites the host's
|
|
20
|
+
> built-in `Read`/`Grep`/`Edit` to `ashlr__*`) are Claude-Code-specific because
|
|
21
|
+
> they rely on Claude Code's PreToolUse hook system. On other hosts you call
|
|
22
|
+
> `ashlr__read` / `ashlr__grep` / `ashlr__edit` directly. Same tools, same
|
|
23
|
+
> savings, one extra prefix.
|
|
24
|
+
>
|
|
25
|
+
> Codex is the exception: it ships a separate nudge-first hook manifest at
|
|
26
|
+
> `hooks/codex-hooks.json`. Codex hooks inject `additionalContext` by default
|
|
27
|
+
> and keep native tool calls allowed.
|
|
28
|
+
|
|
29
|
+
## Portable retrieval guidance
|
|
30
|
+
|
|
31
|
+
Every MCP initialize response includes the same short efficiency instructions,
|
|
32
|
+
regardless of host. Start with structure and targeted searches, then retrieve the
|
|
33
|
+
source needed for the task. Compacted results guide retrieval: omitted source
|
|
34
|
+
must be read before an edit or verification relies on it. Requirements,
|
|
35
|
+
AGENTS.md, authorization, citations, exact errors and test evidence remain
|
|
36
|
+
required context. The server neither rewrites host prompts nor changes approval
|
|
37
|
+
policy. This improves portable tool use; it does not establish universal token
|
|
38
|
+
savings or model quality.
|
|
39
|
+
|
|
40
|
+
## How host detection works
|
|
41
|
+
|
|
42
|
+
Every host's MCP server config sets the env var `ASHLR_MCP_HOST` so the
|
|
43
|
+
server knows where it's running:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
ASHLR_MCP_HOST=claude-code # default — preserved for back-compat
|
|
47
|
+
ASHLR_MCP_HOST=cline
|
|
48
|
+
ASHLR_MCP_HOST=claude-desktop
|
|
49
|
+
ASHLR_MCP_HOST=codex-cli
|
|
50
|
+
ASHLR_MCP_HOST=generic # safe default for anything else
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
If the env var is missing, the server infers `claude-code` when it sees
|
|
54
|
+
`CLAUDE_SESSION_ID` / `CLAUDE_PLUGIN_ROOT` / `CLAUDE_CODE_MODEL`, and
|
|
55
|
+
`generic` otherwise. The startup banner echoes the resolved host:
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
[ashlr-router] starting · 40 tools registered · version=1.29.0 · host=cline
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Cline (cline_mcp_settings.json)
|
|
62
|
+
|
|
63
|
+
Cline's MCP config lives in your OS-specific Cline settings dir (see
|
|
64
|
+
[Cline MCP docs](https://github.com/cline/cline/blob/main/docs/mcp/README.md)).
|
|
65
|
+
The file is typically at:
|
|
66
|
+
|
|
67
|
+
- macOS: `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`
|
|
68
|
+
- Linux: `~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`
|
|
69
|
+
- Windows: `%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json`
|
|
70
|
+
|
|
71
|
+
Add this `mcpServers` entry (replace `/abs/path/to/ashlr-plugin` with where
|
|
72
|
+
you cloned the repo):
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"mcpServers": {
|
|
77
|
+
"ashlr": {
|
|
78
|
+
"command": "bun",
|
|
79
|
+
"args": ["run", "/abs/path/to/ashlr-plugin/scripts/ashlr-mcp.ts"],
|
|
80
|
+
"env": {
|
|
81
|
+
"ASHLR_MCP_HOST": "cline"
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Restart Cline. The tool palette will surface `ashlr__read`, `ashlr__grep`,
|
|
89
|
+
`ashlr__edit`, `ashlr__bash`, `ashlr__savings`, and 35 others.
|
|
90
|
+
|
|
91
|
+
**Don't have Bun?** Use the node trampoline instead — it auto-installs Bun
|
|
92
|
+
on first run:
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"command": "node",
|
|
97
|
+
"args": ["/abs/path/to/ashlr-plugin/scripts/bootstrap.mjs", "servers/_router.ts"],
|
|
98
|
+
"env": { "ASHLR_MCP_HOST": "cline" }
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Claude Desktop (claude_desktop_config.json)
|
|
103
|
+
|
|
104
|
+
Claude Desktop reads `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
105
|
+
on macOS (and the equivalent `%APPDATA%\Claude\claude_desktop_config.json` on
|
|
106
|
+
Windows). Add:
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"mcpServers": {
|
|
111
|
+
"ashlr": {
|
|
112
|
+
"command": "bun",
|
|
113
|
+
"args": ["run", "/abs/path/to/ashlr-plugin/scripts/ashlr-mcp.ts"],
|
|
114
|
+
"env": {
|
|
115
|
+
"ASHLR_MCP_HOST": "claude-desktop"
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Quit and reopen Claude Desktop. The tool count appears next to the input box.
|
|
123
|
+
|
|
124
|
+
## OpenAI Codex CLI (~/.codex/config.toml)
|
|
125
|
+
|
|
126
|
+
Codex can install Ashlr as a plugin from `.codex-plugin/plugin.json`, or use
|
|
127
|
+
the MCP-only TOML config below. The repo-local plugin also includes `.mcp.json`,
|
|
128
|
+
`hooks/codex-hooks.json`, Codex skills under `skills/`, and explorer/worker
|
|
129
|
+
agent guidance under `.codex/agents/`.
|
|
130
|
+
|
|
131
|
+
Codex CLI's MCP config uses TOML. Add this block to `~/.codex/config.toml`:
|
|
132
|
+
|
|
133
|
+
```toml
|
|
134
|
+
[mcp_servers.ashlr]
|
|
135
|
+
command = "bun"
|
|
136
|
+
args = ["run", "/abs/path/to/ashlr-plugin/scripts/ashlr-mcp.ts"]
|
|
137
|
+
env = { ASHLR_MCP_HOST = "codex-cli" }
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Run `codex` — the tools register on startup. If Codex launches the MCP server
|
|
141
|
+
from outside your workspace, either pass `cwd` arguments to Ashlr tools or set
|
|
142
|
+
`ASHLR_ALLOW_PROJECT_PATHS=/abs/path/to/project` in the MCP env.
|
|
143
|
+
|
|
144
|
+
For a dry-run config plan:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
bun run scripts/cli.ts codex-install --dry-run --json
|
|
148
|
+
bun run scripts/cli.ts codex-doctor --json
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Generic MCP host
|
|
152
|
+
|
|
153
|
+
Any MCP-capable client (in-house tooling, experimental hosts, …) can speak
|
|
154
|
+
to the ashlr server over stdio. Spawn it directly:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
ASHLR_MCP_HOST=generic bun run /abs/path/to/ashlr-plugin/scripts/ashlr-mcp.ts
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
The server speaks JSON-RPC 2.0 on stdin/stdout. Send `initialize` →
|
|
161
|
+
`tools/list` → `tools/call` per the MCP spec. The server emits its
|
|
162
|
+
startup banner on stderr (won't interfere with stdio protocol).
|
|
163
|
+
|
|
164
|
+
## What works in every host
|
|
165
|
+
|
|
166
|
+
These features are host-agnostic and Just Work everywhere:
|
|
167
|
+
|
|
168
|
+
- **All 40 MCP tools** — `ashlr__read`, `ashlr__grep`, `ashlr__edit`, plus
|
|
169
|
+
the bash, http, sql, github, genome, and orchestration families.
|
|
170
|
+
- **Stats accounting** — writes to `~/.ashlr/stats.json` regardless of
|
|
171
|
+
host. `ashlr-plugin stats --json` CLI works everywhere Bun runs.
|
|
172
|
+
- **Genome retrieval** — `.ashlrcode/genome/` lookups work identically.
|
|
173
|
+
Cloud-genome sync requires Pro/Team auth (see limitations below).
|
|
174
|
+
- **Telemetry consent** — `ASHLR_TELEMETRY_OPT_IN=1` honored identically.
|
|
175
|
+
No host ever auto-enables it.
|
|
176
|
+
- **Per-handler crash isolation** — one tool throwing won't kill the
|
|
177
|
+
process. Stack traces redirect to `~/.ashlr/crash-dumps/`.
|
|
178
|
+
|
|
179
|
+
## What doesn't work outside Claude Code (and why)
|
|
180
|
+
|
|
181
|
+
These are Claude-Code-specific surfaces. Other hosts have their own
|
|
182
|
+
conventions; we don't try to fight them.
|
|
183
|
+
|
|
184
|
+
- **Claude hook redirects** — declared in `hooks/hooks.json` and default to
|
|
185
|
+
redirect mode for Claude Code. Codex uses `hooks/codex-hooks.json` instead,
|
|
186
|
+
defaults to `additionalContext` nudges, and keeps tool calls allowed.
|
|
187
|
+
- **Slash commands** (`/ashlr-doctor`, `/ashlr-savings`, …) — these are
|
|
188
|
+
Claude Code prompt-templates in `commands/*.md`. Other hosts don't have
|
|
189
|
+
an equivalent surface. The same diagnostics live in the `ashlr-plugin` CLI
|
|
190
|
+
(`ashlr-plugin stats --json`, `ashlr-plugin tools`, `ashlr-plugin version`).
|
|
191
|
+
- **Status line** (the `−$X` savings ticker) — Claude Code's `statusLine`
|
|
192
|
+
manifest extension. Other hosts render their own footer.
|
|
193
|
+
- **Pro/Team auth** — currently bootstrapped from
|
|
194
|
+
`~/.claude/.credentials.json` (the OAuth token Claude Code stores after
|
|
195
|
+
`/login`). Non-CC users can set `ANTHROPIC_API_KEY` for LLM summarization;
|
|
196
|
+
Pro/Team sign-in via `/ashlr-upgrade` is Claude-Code-only until a
|
|
197
|
+
host-agnostic auth flow lands. Use `ASHLR_PRO_ASSUME=1` for trial-style
|
|
198
|
+
unlock if you've already activated Pro on this machine via Claude Code.
|
|
199
|
+
|
|
200
|
+
## Troubleshooting
|
|
201
|
+
|
|
202
|
+
**"command not found: bun" when launching the MCP server**
|
|
203
|
+
Install Bun once: `curl -fsSL https://bun.sh/install | bash` (or use the
|
|
204
|
+
node trampoline shown above — it auto-installs Bun on first invocation).
|
|
205
|
+
|
|
206
|
+
**Tools register but every call returns "no stats yet"**
|
|
207
|
+
Stats are written on tool _call_, not on registration. Run any `ashlr__*`
|
|
208
|
+
tool from your host once, then `ashlr-plugin stats --json` will return data.
|
|
209
|
+
|
|
210
|
+
**Session counter stuck at 0 across hosts**
|
|
211
|
+
The PPID-derived fallback session id is per-process. Different hosts spawn
|
|
212
|
+
the MCP server with different PIDs → different session buckets. That's
|
|
213
|
+
expected. The lifetime totals are still globally accurate.
|
|
214
|
+
|
|
215
|
+
**Want the hook-based auto-redirect feel in Cline?**
|
|
216
|
+
File an issue — we're tracking interest in a Cline-native equivalent
|
|
217
|
+
that uses Cline's pre-tool-execution hooks (when those land upstream).
|