Repository navigation
Releases: Protemir/stackhint
Release list
v0.2.1
A security and quality pass on 0.2.0. Three new reviews this time: one looked at what a hostile repository can do through stackhint, one ran every registry entry through every command (about 16 000 runs and 630 install/rollback round trips), and one ran stackhint on 15 public projects it had never seen. After the fixes, two more reviews checked the fixes themselves and found more, which are fixed too. Every fix has a test; there are now 340 tests.
Security
git logon a scanned repository could run a program: in a partial clone, git fetched a missing commit lazily and ran the repository'score.sshCommand. All fetches are now off, and a bare repository planted in a subfolder is ignored. A repository whose git files point at a network share gets no history, so git never connects to someone else's server.- Names and paths from a scanned project (server names, skill names, file names, package names) are filtered before they reach the hook context, the MCP server or the terminal: no fake tags, no terminal escape sequences, no live Markdown links. A "name" that reads like an instruction is hidden, and the hook context says that quoted names are data, not instructions.
- Configured servers are recognised by the program they actually launch: the package after npx/uvx/dnx, the image after
docker run, the script afternode. Sonpx evil-pkg @playwright/mcp, look-alike hosts such asmcp.sentry.dev.evil.exampleand a URL passed to some unknown program no longer count as the real tool. - The Markdown install plan now quotes the
claude mcp addcommand. Copied without quotes,${TOKEN}would have expanded and the real secret would have been written into~/.claude.json. - If a folder name contains characters that bash, PowerShell or cmd.exe would interpret, the suggested command leaves the path out instead of printing it.
Recommendations
- One stray file (a Homebrew formula, an editor config in Lua) or a manifest without code (
docs/requirements.txtfor mkdocs, a CocoaPods Gemfile) no longer makes something the project's language. - Repeating the same kind of hint no longer adds up to certainty, and "Why now" quotes the strongest evidence instead of the first one found.
- A server that is configured but not active (an untrusted Codex project, a disabled server) is not recommended again. The plan says how to enable it.
recommend --allreally lists everything.- Rolling back installs in the wrong order now tells you which install to undo first.
Smaller fixes
- Opening a session in a drive root or the home folder no longer starts a scan (it used to take 2–3 s).
.env.production.sampleis read, andDB_CONNECTION=mysqlis understood.- Cloudflare Turnstile keys,
# nosemgrepcomments, Angular templates andexample-apps/folders no longer mislead the scan.
Full list: CHANGELOG.md.
v0.2.0
After the first release I had the code reviewed three more times, fixed everything that held up (34 findings), then had the fixes reviewed again and fixed what that turned up too. Every fix has a regression test; there are now 300+ tests.
The registry also grew from 68 to 143 entries, each checked against the vendor's docs or repo on 2026-10-20 and then spot-checked by a second pass.
Installs
- Config files keep their exact bytes. A file that isn't valid UTF-8 is refused instead of being corrupted, a BOM and CRLF stay, and
rollbackrestores the original byte for byte. - If
~/.codex/config.tomlis a symlink or hard link (dotfile managers), stackhint writes through it instead of replacing it. .mcp.jsongets the new server inserted into the text, so big numbers, key order and everything else stay untouched.- On Windows, project-scope installs warn that
cmd /c npxwon't start for macOS and Linux teammates.try --host codexprints commands for both PowerShell and Git Bash.
Recommendations
- A replacement for a retired server you still use is always shown, even when another tool of the same kind ranks higher.
- A hosted Neon or Supabase server no longer counts as "you already have a Postgres tool".
- Servers behind
mcp-remoteare recognised, anddocs.mcp.cloudflare.comno longer counts as the Cloudflare API server. - Task text needs real product context: "angular velocity", "a honeycomb grid", "sanity check" or "a zebra stripe" no longer suggest Angular, Honeycomb, Sanity or Stripe.
Detection
- Secrets in a team's
.vscode/mcp.jsonarguments can't end up inscan --format jsonoutput any more. - The scan is faster (about 0.6 s instead of 1.5–3.5 s on my projects): it goes breadth first, media files don't count against the file limit, and PATH lookups are about 15 times faster.
- New detectors: browser extensions, browser games (three.js, Phaser, Pixi), plain pages with scripts,
node --test, .NET Aspire, Gradle version catalogs, uv and PDM, UTF-16requirements.txt, plus about 50 signals for the new entries. Go// indirectrequirements and Dependabot bump commits no longer count.
New in the registry
- MCP servers for Next.js, Angular, Svelte, Nuxt, Astro, Nx, Storybook, shadcn/ui, Shopify, Expo, Prisma, Hugging Face, Dart and Flutter, Xcode, Unity, Unreal, Develocity and Laravel Boost.
- Hosting and services: Netlify, Heroku, Render, Railway, Fly.io, Pulumi, DigitalOcean, PlanetScale, Turso, Upstash, Algolia, Contentful, Sanity, Slack, Auth0, Clerk, Twilio docs, Resend, Asana, monday.com, ClickUp, Datadog, New Relic, Honeycomb, PagerDuty, Dynatrace, PostHog and Elastic Agent Builder.
- All 13 official LSP plugins, plus the official security review, frontend design, PR review, commit, CLAUDE.md, Agent SDK, MCP server and plugin development plugins, Expo, Unity, Redis and ClickHouse skills, and Codex Security.
CLI and MCP server
- The MCP server answers
null, empty batches and bad ids with an error instead of exiting. dismiss --projectworks from any subfolder and through symlinked folders (macOS/var→/private/var).- Parallel sessions no longer overwrite each other's state.
- Every command takes
--format json.
Full list: CHANGELOG.md.
npx -y github:Protemir/stackhint recommend
stackhint 0.1.0
First release.
stackhint looks at your repo and at what you already have set up in Claude Code and Codex, and suggests the MCP servers, plugins, skills and CLIs that fit, with the file each suggestion is based on. It can add a server to your config after showing you the exact change, and stackhint rollback puts the file back.
Try it without installing:
npx -y github:Protemir/stackhint recommend
npx -y github:Protemir/stackhint check
What's in 0.1.0:
- Detection for .NET, Node, Python, Go, Rust, JVM, PHP and Ruby projects, compose files, Kubernetes/Helm/Argo CD/Flux, Terraform and clouds, CI providers, API files, test configs, README links and git history.
- A hand-checked registry of 68 entries (51 tools, 17 deprecated or archived ones it can spot in your config and replace).
- Reads Claude Code (user, local and project scopes, plugins, skills) and Codex (config.toml, plugins, skills), so it doesn't suggest what you already have.
checkflags archived servers, secrets written into config, SSE endpoints and write access where a read-only mode exists.- Installs default to read-only variants and never write tokens, only env var names.
- Plugin for both Claude Code and Codex: a skill plus quiet session-start hints (
stackhint config set mode manualturns them off). - A read-only MCP server (
stackhint mcp).
CI runs the tests on Windows, macOS and Linux, and checks the configs it writes against the real claude and codex CLIs.