Skip to content

Releases: Protemir/stackhint

v0.2.1

Choose a tag to compare

@Protemir Protemir released this 20 Oct 12:01

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 log on a scanned repository could run a program: in a partial clone, git fetched a missing commit lazily and ran the repository's core.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 after node. So npx evil-pkg @playwright/mcp, look-alike hosts such as mcp.sentry.dev.evil.example and a URL passed to some unknown program no longer count as the real tool.
  • The Markdown install plan now quotes the claude mcp add command. 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.txt for 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 --all really 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.sample is read, and DB_CONNECTION=mysql is understood.
  • Cloudflare Turnstile keys, # nosemgrep comments, Angular templates and example-apps/ folders no longer mislead the scan.

Full list: CHANGELOG.md.

v0.2.0

Choose a tag to compare

@Protemir Protemir released this 20 Oct 10:04

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 rollback restores the original byte for byte.
  • If ~/.codex/config.toml is a symlink or hard link (dotfile managers), stackhint writes through it instead of replacing it.
  • .mcp.json gets 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 npx won't start for macOS and Linux teammates. try --host codex prints 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-remote are recognised, and docs.mcp.cloudflare.com no 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.json arguments can't end up in scan --format json output 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-16 requirements.txt, plus about 50 signals for the new entries. Go // indirect requirements 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 --project works 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

Choose a tag to compare

@Protemir Protemir released this 20 Oct 00:34

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.
  • check flags 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 manual turns 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.