| name | stack-detect |
| description | Detect the current repo's tech stack from its manifest files and recommend which ZCode skills, MCP servers, and plugins fit. Reads package.json (Node: React/Next.js/Vue/Svelte/Express/Nest), pyproject.toml + requirements.txt (Python: FastAPI/Django/Flask), go.mod (Go: echo/gin/fiber), Cargo.toml (Rust: axum/actix/tokio), pom.xml + build.gradle (Java: Spring/Maven/Gradle), composer.json (PHP: Laravel/Symfony), Gemfile (Ruby: Rails/Sinatra). ROUTE BY INTENT, NOT KEYWORDS โ load when the user starts a new project ("์ด ๋ ํฌ ์คํ ๋ญ์ผ", "what stack is this", "์ด๋ค ๊ธฐ์ ์ฐ์ง", "set up for this repo"), asks for tooling recommendations, or when a fresh session needs to orient on an unfamiliar repo. Also load proactively at session start on an unfamiliar repo โ orienting on the stack is step zero. Returns a stack fingerprint (language + framework + package manager + test runner + notable deps) + a recommendation table (skill/MCP/plugin โ why it fits โ install hint). Does NOT auto-enable anything โ it recommends, the user decides. Industry precedent is user-select (pre-commit, ESLint shareable configs); this detector narrows the choice but never removes it. |
Stack detect โ orient on any repo
The first thing to do on an unfamiliar repo: figure out the stack. This skill reads the manifest files at the repo root (and one level of apps/* / packages/* for monorepos) and produces a fingerprint + recommendations.
Why this exists
Most AI coding tools punt on explicit stack detection โ Aider, Cursor, Supermaven, pre-commit, and ESLint all make the user select their stack. IDEs like VSCode read manifests for extension recommendations, but do not surface that as a ZCode/Claude skill. This skill reads the manifests and recommends which ZCode resources fit, narrowing the user's choice without removing it: the detector recommends, the user decides.
The detection procedure
Step 1 โ Find the manifests
At the repo root, look for (check all that apply; a polyglot repo has several):
| File | Ecosystem |
|---|
package.json | Node / JS / TS |
pyproject.toml, requirements.txt, setup.py, Pipfile | Python |
go.mod | Go |
Cargo.toml | Rust |
pom.xml, build.gradle, build.gradle.kts | Java / JVM |
composer.json | PHP |
Gemfile | Ruby |
mix.exs | Elixir |
Package.swift | Swift |
go.work | Go workspace (monorepo) |
pnpm-workspace.yaml, lerna.json, turbo.json, nx.json | JS monorepo |
apps/*/, packages/*/, services/*/ | monorepo layout โ recurse one level |
Use Glob and Read โ do not infer the stack from file extensions alone (a .ts file could be a Node server, a Deno script, or a frontend component; the manifest tells you which).
Step 2 โ Extract the fingerprint
For each ecosystem present, extract:
Node (package.json):
dependencies + devDependencies โ framework signal:
next โ Next.js (React SSR/SSG)
react, react-dom โ React (SPA)
vue โ Vue
svelte, @sveltejs/kit โ Svelte / SvelteKit
express, fastify, koa, hapi โ Node server
@nestjs/core โ NestJS
electron โ Electron desktop
vite โ Vite bundler (often frontend)
playwright, puppeteer โ browser automation present
packageManager โ npm / pnpm / yarn / bun
scripts.test โ test runner (jest / vitest / mocha / playwright test)
Python (pyproject.toml):
[project] dependencies / [tool.poetry] dependencies / requirements.txt:
fastapi, uvicorn โ FastAPI
django โ Django
flask โ Flask
torch, tensorflow โ ML
pandas, numpy โ data
motor, pymongo โ MongoDB
sqlalchemy โ SQL ORM
pytest โ test runner
[tool.uv] / [tool.poetry] / [tool.pdm] โ package manager
Go (go.mod):
module path โ module name
require block โ framework signal:
github.com/labstack/echo โ Echo
github.com/gin-gonic/gin โ Gin
github.com/gofiber/fiber โ Fiber
google.golang.org/grpc โ gRPC
github.com/spf13/cobra โ CLI
Rust (Cargo.toml):
[dependencies] โ framework signal:
axum, actix-web, rocket โ web
tokio โ async runtime
serde โ serialization
clap โ CLI
tauri โ Tauri desktop
Java (pom.xml / build.gradle):
spring-boot-starter-* โ Spring Boot
groupId / artifactId โ Maven coordinates
- Gradle plugins (
org.springframework.boot, org.jetbrains.kotlin) โ Kotlin?
Step 3 โ Produce the recommendation table
Map detected stack โ ZCode resources. Be concrete about WHY each resource fits.
| Stack detected | Recommend | Why |
|---|
| Any frontend (React/Vue/Svelte/Next) | glm-design-fleet plugin | Design rubric + slop gate for the UI surface |
| Any frontend | Playwright MCP (if not installed) | The "eyes" for GLM-5.2 โ computed-style probes for design-craft judgment |
| Any frontend | context7 plugin (if not installed) | Fetch current framework docs (React/Vue/Svelte) |
| Python + MongoDB | MongoDB MCP server | Direct DB query for verify-before-claim evidence |
| Any backend with an HTTP API | 42crunch-api-security-testing plugin (if present) | API security audit |
| Any git repo | glm-verify-spine plugin | bash-guard + verify-before-claim (universal) |
| Any git repo | session-telemetry plugin | Know how you work (universal) |
| Monorepo (multiple stacks) | All applicable above, scoped per sub-dir | Note which stack lives where (apps/web = React, apps/api = FastAPI) |
Do NOT recommend stack-specific resources that aren't installed โ name them as "consider installing" with the install hint, but keep the recommendation table focused on what helps NOW.
Step 4 โ Output format
Stack fingerprint
- Languages: <list>
- Frameworks: <list with version if available>
- Package manager: <list>
- Test runner: <list>
- Monorepo: <yes/no, layout>
- Notable deps: <top 5-10 by signal>
Recommendations
| Resource | Why it fits this stack | Status |
|---|---|---|
| glm-design-fleet | Frontend surface (Next.js) โ design rubric applies | already installed โ / consider installing |
| Playwright MCP | GLM-5.2 needs computed-style probes for UI judgment | already connected โ / not connected โ /mcp connect playwright |
| ... | ... | ... |
Next steps
- <concrete first action based on the stack, e.g. "dev server: npm run dev (Next.js on :3000)">
- <if verify-spine not installed: "consider installing for bash-guard + verify-before-claim">
Honesty limits
- Detection is heuristic โ
react in devDependencies might be a tooling dep, not the app framework. Cross-check with the entry point (pages/ for Next.js Pages Router, app/ for App Router, src/main.tsx for Vite React).
- A manifest can lie (stale deps, commented-out, monorepo hoist). If the manifest and the code disagree, trust the code (read the entry point).
- This skill does NOT install or enable anything. It recommends. The user decides. Auto-enabling would violate the user-select precedent and risk enabling the wrong thing on a misread.
- For a totally unfamiliar stack (no recognized manifests), say so: "stack = ํ์ธ ๋ถ๊ฐ (no recognized manifests at root)". Do not guess.