{"id":48107096,"url":"https://github.com/garagon/nanostack","last_synced_at":"2026-04-04T15:57:05.754Z","repository":{"id":346901757,"uuid":"1191725169","full_name":"garagon/nanostack","owner":"garagon","description":"Minimal AI coding agent team skills for the full engineering workflow. ","archived":false,"fork":false,"pushed_at":"2026-04-02T18:01:10.000Z","size":315,"stargazers_count":129,"open_issues_count":0,"forks_count":12,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-04-03T03:09:58.968Z","etag":null,"topics":["ai-agents","ai-coding","claude-code","code-review","codex","developer-tools","engineering-workflow","gstack","security-audit","skills"],"latest_commit_sha":null,"homepage":"https://nanostack.sh","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/garagon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"security/SKILL.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-25T14:25:10.000Z","updated_at":"2026-04-02T18:01:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/garagon/nanostack","commit_stats":null,"previous_names":["garagon/nanostack"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/garagon/nanostack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garagon%2Fnanostack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garagon%2Fnanostack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garagon%2Fnanostack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garagon%2Fnanostack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/garagon","download_url":"https://codeload.github.com/garagon/nanostack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garagon%2Fnanostack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31404852,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","ai-coding","claude-code","code-review","codex","developer-tools","engineering-workflow","gstack","security-audit","skills"],"created_at":"2026-04-04T15:57:05.108Z","updated_at":"2026-04-04T15:57:05.730Z","avatar_url":"https://github.com/garagon.png","language":"Shell","readme":"\u003ch1 align=\"center\"\u003eNanostack\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n  Turns your AI agent into an engineering team that challenges scope, plans, reviews, tests, audits and ships.\u003cbr\u003e\n  One sprint. Minutes, not weeks.\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-Apache%202.0-blue.svg\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/garagon/nanostack/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/garagon/nanostack?style=flat\" alt=\"GitHub Stars\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://skills.sh/garagon/nanostack\"\u003e\u003cimg src=\"https://img.shields.io/badge/skills.sh-available-brightgreen\" alt=\"skills.sh\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#install\"\u003eInstall\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#the-sprint\"\u003eThe Sprint\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#autopilot\"\u003eAutopilot\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#guard\"\u003eGuard\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#know-how\"\u003eKnow-how\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#build-on-nanostack\"\u003eExtend\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\nInspired by [gstack](https://github.com/garrytan/gstack) from [Garry Tan](https://x.com/garrytan). 9 skills. Zero dependencies. Zero build step.\n\nWorks with Claude Code, Cursor, OpenAI Codex, OpenCode, Gemini CLI, Antigravity, Amp and Cline.\n\n## Quick start\n\n```bash\nnpx create-nanostack\n```\n\nOne command. Detects your agents, installs everything, runs setup. Works with Claude Code, Cursor, Codex, Gemini CLI, Amp, Cline, OpenCode, and Antigravity.\n\nThen run `/nano-run` in your agent to configure your project through a conversation.\n\nOr jump straight in:\n\n```\nYou:    I need to add notifications to my app. Users keep missing\n        replies on their posts.\nYou:    /think\n\nAgent:  Before we build anything, how are users coping today?\n\nYou:    They open the app 3-4 times a day just to check. Sometimes\n        they miss replies for hours. People are frustrated.\n\nAgent:  I'm going to push back on \"notifications.\" You said users open\n        the app 3-4 times a day. That's high engagement. They already\n        come back. The problem isn't that they can't be reached. The\n        problem is that when they arrive, they can't tell what changed.\n\n        That's a freshness problem, not a messaging problem.\n\n        A notification system (email, push, in-app, preferences,\n        digest, unsubscribe) is a 3-week project. A red dot on the\n        nav icon that says \"something new\" ships this afternoon.\n\n        One solves the symptom (they're not being told). The other\n        solves the cause (they can't see what's new when they look).\n\n        RECOMMENDATION: Reduce. Ship the dot. See if complaints drop.\n        If they do, you just saved 3 weeks. If they don't, then build\n        push notifications, but now you have data, not a guess.\n\nYou:    Makes sense. Let's do the dot.\nYou:    /nano\n        [3 steps, 2 files, product standards: shadcn/ui + Tailwind]\n\nYou:    [builds it]\n\nYou:    /review\n        Review: 2 findings (1 auto-fixed, 1 nit). 2 things done well.\n\nYou:    /ship\n        Ship: PR created. Tests pass. Done.\n```\n\nYou said \"notifications.\" The agent said \"your users have a freshness problem\" and found a solution that ships in an afternoon instead of three weeks. Four commands. That is not a copilot. That is a thinking partner.\n\n## The sprint\n\nNanostack is a process, not a collection of tools. The skills run in the order a sprint runs:\n\n```\n/think → /nano → build → /review → /qa → /security → /ship\n```\n\nEach skill feeds into the next. `/nano` writes an artifact that `/review` reads for scope drift detection. `/review` catches conflicts with `/security` findings. `/ship` verifies everything is clean before creating the PR. Nothing falls through the cracks because every step knows what came before it.\n\n| Skill | Your specialist | What they do |\n|-------|----------------|--------------|\n| `/think` | **CEO / Founder** | Three intensity modes: Founder (full pushback), Startup (challenges scope, respects pain) and Builder (minimal pushback). Six forcing questions including manual delivery test and community validation. `--autopilot` runs the full sprint after approval. |\n| `/nano` | **Eng Manager** | Auto-generates product specs (Medium scope) or product + technical specs (Large scope) before implementation steps. Product standards for web (shadcn/ui), CLI/TUI (Bubble Tea, Rich, Ink, Ratatui). Stack defaults with CLI preference for beginners. |\n| `/review` | **Staff Engineer** | Two-pass code review: structural then adversarial. Auto-fixes mechanical issues, asks about judgment calls. Detects scope drift against the plan. Cross-references `/security` with 10 conflict precedents. |\n| `/qa` | **QA Lead** | Functional testing + Visual QA. Takes screenshots and analyzes UI against product standards. Browser, API, CLI and debug modes. WTF heuristic stops before fixes cause regressions. |\n| `/security` | **Security Engineer** | Auto-detects your stack, scans secrets, injection, auth, CI/CD, AI/LLM vulnerabilities. Graded report (A-F). Cross-references `/review` for conflict detection. Every finding includes the fix. |\n| `/ship` | **Release Engineer** | Pre-flight + repo quality checks. PR creation, CI monitoring, sprint journal. After commit, asks: run locally, deploy to production, or done. Production path guides through hosting, domain, monitoring, costs. |\n\n### Power tools\n\n| Skill | What it does |\n|-------|-------------|\n| `/compound` | **Knowledge** | Documents solved problems after each sprint. Three types: bug (what broke + fix), pattern (reusable approach), decision (architecture choice). `/nano` and `/review` search past solutions automatically in future sprints. |\n| `/guard` | **Safety** | Four-tier safety: allowlist, in-project bypass, phase-aware concurrency enforcement (blocks writes during read-only phases), and pattern matching with 33 block rules. Blocked commands get a safer alternative. `/freeze` locks edits to one directory. Rules in `guard/rules.json`. |\n| `/conductor` | **Orchestrator** | Parallel agent sessions with auto-batching. `sprint.sh batch` reads skill concurrency metadata and groups parallel-safe phases. Session resume on crash. Dependency validation before each phase. No daemon, just atomic file ops. |\n| `/feature` | **Builder** | Add functionality to an existing project. Skips /think, goes straight to plan, build, review, audit, test, ship. |\n| `/nano-run` | **Onboarding** | First-time setup. Configures stack, permissions, and work preferences through a conversation. Auto-detects your project and guides your first sprint. |\n| `/nano-help` | **Reference** | Quick reference for all nanostack commands and how to use them. |\n\n### Intensity modes\n\nNot every change needs a full audit. `/review`, `/qa` and `/security` support three modes:\n\n| Mode | Flag | When to use |\n|------|------|-------------|\n| **Quick** | `--quick` | Typos, config, docs. Only report the obvious. |\n| **Standard** | (default) | Normal features and bug fixes. |\n| **Thorough** | `--thorough` | Auth, payments, infra. Flag everything suspicious. |\n\n### Specs by scope\n\n`/nano` generates specs automatically based on project complexity:\n\n| Scope | What you get |\n|-------|-------------|\n| **Small** (1-3 files) | Implementation steps only |\n| **Medium** (4-10 files) | Product spec + implementation steps |\n| **Large** (10+ files) | Product spec + technical spec + implementation steps |\n\nThe product spec covers: problem, solution, user stories, acceptance criteria, user flow, edge cases, out of scope. The technical spec adds: architecture, data model, API contracts, integrations, technical decisions, security considerations, migration/rollback.\n\nSpecs are presented for approval before implementation. If the spec is wrong, everything downstream is wrong.\n\n## See it work: full sprint\n\n```\nYou:    I want to build a security scanner for cloud misconfigurations.\n        We keep finding S3 buckets left public and IAM roles that are\n        way too broad. Last month a public bucket caused an incident.\nYou:    /think\n\nAgent:  I'm going to push back on \"security scanner.\" A scanner finds\n        problems after they exist. But you said last month a public\n        bucket caused an incident. You don't want to find misconfigs,\n        you want to stop them from reaching production.\n\n        That's a prevention gate, not a scanner. Different product.\n\n        The scanner is 10% better than what you have (manual audits).\n        A pre-deploy gate is 10x. The misconfiguration never ships.\n\n        Who would use a broken v1 tomorrow? Your platform team. They\n        got paged for that incident. They'd use anything that blocks\n        public S3 buckets before deploy, even if it only checks one rule.\n\n        RECOMMENDATION: Reduce scope. One rule. S3 public access check,\n        pre-deploy. Ship tomorrow. The full scanner is a 3-month project.\n\nYou:    That makes sense. Let's start with S3.\nYou:    /nano\n        [5 steps, 4 files, risks listed, out-of-scope explicit]\n\nYou:    [builds the feature]\n\nYou:    /review\n        Review: 3 findings (2 auto-fixed, 1 ask). Scope drift: CLEAN.\n\nYou:    /security\n        Security: CRITICAL (0) HIGH (0) MEDIUM (1) LOW (1). Score: A.\n\nYou:    /ship\n        Ship: PR created. CI passed. Post-deploy: smoke test clean.\n```\n\nYou said \"security scanner.\" The agent said \"you're building a prevention gate\" because it listened to your pain, not your feature request. Six commands, start to shipped.\n\n## Autopilot\n\nDiscuss the idea, approve the brief, walk away. The agent runs the full sprint:\n\n```\n/think --autopilot\n```\n\n`/think` is interactive: the agent asks questions, you answer, you align on the brief. After you approve, everything else runs automatically:\n\n```\n/nano → build → /review → /security → /qa → /ship\n```\n\nAutopilot only stops if:\n- `/review` finds blocking issues that need your decision\n- `/security` finds critical or high vulnerabilities\n- `/qa` tests fail\n- A product question comes up the agent can't answer from context\n\nBetween steps the agent shows status:\n```\nAutopilot: build complete. Running /review...\nAutopilot: review clean (5 findings, 0 blocking). Running /security...\nAutopilot: security grade A. Running /qa...\nAutopilot: qa passed (12 tests, 0 failed). Running /ship...\n```\n\n## Parallel sprints\n\nNanostack works well with one agent. It gets interesting with three running at once.\n\n`/conductor` coordinates multiple sessions. Each agent claims a phase, executes it and the next agent picks up the artifact. Review, QA and security run in parallel because they all depend on build, not on each other.\n\n```\n/think → /nano → build ─┬─ /review   (Agent A) ─┐\n                              ├─ /qa       (Agent B)  ├─ /ship\n                              └─ /security (Agent C) ─┘\n```\n\nNo daemon. No message queue. Just `mkdir` for atomic locking, JSON for state, symlinks for artifact handoff.\n\n`sprint.sh batch` reads each skill's `concurrency` metadata (read, write, exclusive) and outputs execution batches. Review, QA and security are all `read` and share the same dependency, so they batch together automatically.\n\n### Session resume\n\nIf the agent crashes mid-sprint, `session.sh resume` detects the last session state and `restore-context.sh` reads all completed phase checkpoints. The agent skips completed phases and restarts from where it left off. Each checkpoint is a compact summary (~50 tokens) with the key findings, files and decisions from that phase.\n\n### Budget and circuit breaker\n\n`budget.sh set --max-usd 15 --model opus-4` sets a cost limit for the sprint. At each phase transition, `budget.sh check` calculates spent vs budget. Warns at 80%, stops at 95% with partial results preserved.\n\n`circuit.sh` tracks consecutive failures. After 3 failures on the same approach, the circuit opens and the agent must pivot or stop. Changing approach resets the counter.\n\n## Guard\n\nAI agents make mistakes. They run `rm -rf` when they mean `rm -r`, force push to main when they mean to push to a branch, pipe untrusted URLs to shell. `/guard` catches these before they execute.\n\n### Four tiers\n\nInspired by [Claude Code auto mode](https://www.anthropic.com/engineering/claude-code-auto-mode), guard evaluates every command through four tiers:\n\n**Tier 1: Allowlist.** Commands like `git status`, `ls`, `cat`, `jq` skip all checks. They can't cause damage.\n\n**Tier 2: In-project.** Operations that only touch files inside the current git repo pass through. If the agent writes a bad file, you revert it. Version control is the safety net.\n\n**Tier 2.5: Phase-aware concurrency.** During read-only phases (review, qa, security), write operations are blocked. This prevents race conditions when multiple agents run in parallel. The agent reports findings instead of auto-fixing.\n\n**Tier 3: Pattern matching.** Everything else is checked against block and warn rules. 33 block rules cover mass deletion, history destruction, database drops, production deploys, remote code execution, security degradation and safety bypasses. 9 warn rules cover operations that need attention but not blocking.\n\n### Deny-and-continue\n\nWhen guard blocks a command, it doesn't just say \"no.\" It suggests a safer alternative:\n\n```\nBLOCKED [G-007] Force push overwrites remote history\nCategory: history-destruction\nCommand: git push --force origin main\n\nSafer alternative: git push --force-with-lease (safer, fails if remote changed)\n```\n\nThe agent reads this and retries with the safer command. No manual intervention needed.\n\n### Configurable rules\n\nAll rules live in [`guard/rules.json`](guard/rules.json). Each rule has an ID, regex pattern, category, description and (for block rules) a safer alternative. Add your own:\n\n```json\n{\n  \"id\": \"G-100\",\n  \"pattern\": \"terraform destroy\",\n  \"category\": \"infra-destruction\",\n  \"description\": \"Destroy all Terraform-managed infrastructure\",\n  \"alternative\": \"terraform plan -destroy first to review what would be removed\"\n}\n```\n\n## Install\n\n### Recommended\n\n```bash\nnpx create-nanostack\n```\n\nDetects your agents, installs all skills, runs setup. Works with Claude Code, Cursor, Codex, Gemini CLI, Amp, Cline, OpenCode, and Antigravity.\n\nUpdate from your agent:\n\n```\n/nano-update\n```\n\n### Alternative: git clone (advanced)\n\nFull control including skill rename, analytics, sprint journal and project setup.\n\n```bash\ngit clone https://github.com/garagon/nanostack.git \u003cpath\u003e\ncd \u003cpath\u003e \u0026\u0026 ./setup --host auto\n```\n\nTargets: `claude`, `codex`, `cursor`, `opencode`, `gemini`, `auto`.\n\n### Alternative: Gemini CLI\n\n```bash\ngemini extensions install https://github.com/garagon/nanostack --consent\n```\n\n### Rename skills\n\nIf you have other skill sets installed (gstack, superpowers, etc.) and names collide, rename the ones that conflict. Requires git clone install.\n\n```bash\ncd ~/.claude/skills/nanostack\n./setup --rename \"review=my-review,security=my-security\"\n```\n\nRenames persist between updates. Other useful commands:\n\n```bash\n./setup --list           # show current skill names\n./setup --rename reset   # restore original names\n```\n\n### Project setup\n\nRun once in each project to configure permissions and .gitignore. Requires git clone install.\n\n```bash\n~/.claude/skills/nanostack/bin/init-project.sh\n```\n\nThis creates `.claude/settings.json` with permissions so Claude Code doesn't interrupt the workflow asking for approval on every file create or bash command. Also adds `.nanostack/` to `.gitignore`.\n\n### Windows\n\nRequires [Git for Windows](https://git-scm.com/downloads/win) which includes Git Bash. Claude Code uses Git Bash internally, so the setup script and all bin/ scripts work without changes. Alternatively use WSL or `npx skills add`.\n\n### Requirements\n\n- macOS, Linux or Windows (Git Bash or WSL)\n- [jq](https://jqlang.github.io/jq/) for artifact processing (`brew install jq`, `apt install jq`, or `choco install jq`)\n- Git\n- One of: Claude Code, Cursor, OpenAI Codex, OpenCode, Gemini CLI, Antigravity, Amp, Cline\n\n## The Zen of Nanostack\n\n```\nQuestion the requirement before writing the code.\nDelete what shouldn't exist.\nIf nobody would use a broken v1, the scope is wrong.\nNarrow the scope, not the ambition.\nShip the version that ships today.\nFix it or ask. Never ignore it.\nSecurity is not a tradeoff. It is a constraint.\nThe output should look better than what was asked for.\nIf the plan is hard to explain, the plan is wrong.\n```\n\nFull version in [`ZEN.md`](ZEN.md).\n\n## Know-how\n\nMost AI coding tools are stateless. Every session starts from zero. Nanostack builds knowledge as you work without extra commands.\n\n### Every skill saves automatically\n\nEvery skill persists its output to `.nanostack/` after every run. You don't add flags. It just happens.\n\n```\n/think     →  .nanostack/think/20260325-140000.json\n/nano →  .nanostack/plan/20260325-143000.json\n/review    →  .nanostack/review/20260325-150000.json\n/qa        →  .nanostack/qa/20260325-151500.json\n/security  →  .nanostack/security/20260325-152000.json\n/ship      →  .nanostack/ship/20260325-160000.json\n```\n\nA review artifact captures everything: findings, scope drift, conflicts resolved.\n\n```json\n{\n  \"phase\": \"review\",\n  \"mode\": \"standard\",\n  \"summary\": { \"blocking\": 0, \"should_fix\": 2, \"nitpicks\": 1, \"positive\": 3 },\n  \"scope_drift\": { \"status\": \"drift_detected\", \"out_of_scope_files\": [\"src/unplanned.ts\"] },\n  \"conflicts\": [\n    { \"finding_id\": \"REV-005\", \"conflicts_with\": \"SEC-003\",\n      \"tension\": \"complementary\", \"resolution\": \"structured error codes\" }\n  ]\n}\n```\n\nFull schema in [`reference/artifact-schema.md`](reference/artifact-schema.md). To disable, set `auto_save: false` in `.nanostack/config.json`.\n\n### Skills read each other\n\n`/review` automatically finds the most recent `/nano` artifact and checks scope drift: did you touch files outside the plan? Did you skip files that were in it?\n\n```\n/nano     →  saves planned_files list\n/review   →  finds plan, compares against git diff, reports:\n              \"drift_detected: src/unplanned.ts out of scope, tests/auth.test.ts missing\"\n```\n\n`/security` automatically finds the most recent `/review` artifact and detects conflicts. `/review` says \"add detail to error messages.\" `/security` says \"don't expose internals.\" The resolution gets matched against [10 built-in precedents](reference/conflict-precedents.md) and recorded.\n\n```\n/review   →  saves \"REV-003: error messages too vague\"\n/security →  finds review, detects conflict, resolves:\n              \"structured errors: code + generic msg to user, details to logs\"\n```\n\nThis happens in all modes. No flags needed. If an artifact exists, the next skill reads it.\n\n### Sprint journal on /ship\n\nWhen you run `/ship` and the PR lands, it automatically generates a sprint journal:\n\n```\n/ship  →  saves PR data\n       →  runs bin/sprint-journal.sh\n       →  writes .nanostack/know-how/journal/2026-03-25-myproject.md\n```\n\nThe journal reads every phase artifact from the sprint and writes one file with the full decision trail: what `/think` reframed, what `/nano` scoped, what `/review` found, how conflicts were resolved, what `/security` graded.\n\n### Knowledge compounding on /compound\n\nAfter shipping, run `/compound` to document what you learned:\n\n```\n/compound  →  reads sprint artifacts\n           →  identifies problems solved\n           →  writes to .nanostack/know-how/solutions/bug/\n           →  writes to .nanostack/know-how/solutions/pattern/\n           →  writes to .nanostack/know-how/solutions/decision/\n```\n\nNext sprint, `/nano` automatically searches past solutions before planning. `/review` checks if current code follows documented resolutions. Solutions that reference files no longer on disk are ranked lower automatically. The knowledge compounds: every sprint makes the next one faster.\n\nSearch manually:\n\n```bash\nbin/find-solution.sh \"stripe webhook\"        # by keyword\nbin/find-solution.sh --type bug              # by type\nbin/find-solution.sh --tag security          # by tag\nbin/find-solution.sh --file src/api/webhooks # by file\n```\n\n### Analytics and learnings\n\nTwo optional scripts for when you want to see patterns across sprints:\n\n```bash\nbin/analytics.sh --obsidian    # dashboard with phase counts and security trends\nbin/capture-learning.sh \"...\"  # append a learning to the knowledge base\n```\n\n### Discard a bad session\n\nIf a sprint went wrong (agent hallucinated findings, aborted halfway, bad data), discard it:\n\n```bash\nbin/discard-sprint.sh                     # discard all artifacts from today for this project\nbin/discard-sprint.sh --phase review      # discard only review artifacts\nbin/discard-sprint.sh --date 2026-03-24   # discard artifacts from a specific date\nbin/discard-sprint.sh --dry-run           # show what would be deleted without deleting\n```\n\nThis removes artifacts and the journal entry. Analytics recalculate on next run.\n\n### The Obsidian vault\n\nOpen `.nanostack/know-how/` in Obsidian. Sprint journals link to conflict precedents. The dashboard links to journals. Graph view shows how sprints, conflicts and learnings connect over time.\n\n## Build on nanostack\n\nNanostack is a platform. Build your own skill set on top of it for any domain.\n\nRegister custom phases in `.nanostack/config.json`:\n\n```json\n{ \"custom_phases\": [\"audience\", \"campaign\", \"measure\"] }\n```\n\nYour skills use the same infrastructure: `save-artifact.sh` persists artifacts, `find-artifact.sh` reads them, skills cross-reference each other. The sprint journal, analytics and Obsidian vault work with custom phases.\n\nA marketing team builds `/audience` and `/campaign`. A data team builds `/explore` and `/model`. A design team builds `/wireframe` and `/usability`. All compose with nanostack's `/think` for ideation, `/review` for quality and `/ship` for delivery.\n\nFull guide: [`EXTENDING.md`](EXTENDING.md).\n\n## Privacy\n\nAll data stays on your machine in `.nanostack/`. No remote calls. No telemetry.\n\nRun `bin/analytics.sh` to see your own usage: which skills you run, how often, in what mode. Reads local artifacts only.\n\n## Troubleshooting\n\n**Skills don't appear as slash commands.**\nThe setup script creates symlinks. If they broke, re-run `./setup`.\n\n**`jq: command not found` when running scripts.**\nInstall jq: `brew install jq` (macOS) or `apt install jq` (Linux).\n\n**Port in use when running /qa browser tests.**\nFind it: `lsof -ti:3000`. Kill it: `kill $(lsof -ti:3000)`.\n\n**`/conductor` claim fails with BLOCKED.**\nDependencies not finished. Run `conductor/bin/sprint.sh status` to check.\n\n**Skills seem outdated.**\nRun `/nano-update` from Claude Code, or `~/.claude/skills/nanostack/bin/upgrade.sh` from the terminal.\n\n## Uninstall\n\n```bash\n# Claude Code\ncd ~/.claude/skills \u0026\u0026 rm -f think nano review qa security ship guard conductor compound \u0026\u0026 rm -rf nanostack\n\n# Codex\nrm -rf ~/.agents/skills/nanostack*\n\n# Cursor\nrm -f .cursor/rules/nanostack.md\n\n# OpenCode\nrm -rf ~/.agents/skills/nanostack\n\n# Gemini CLI\ngemini extensions remove nanostack\n```\n\n## Contributing\n\nContributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for setup, project structure and PR guidelines.\n\n- [Bug reports](https://github.com/garagon/nanostack/issues/new?template=bug_report.yml)\n- [Feature requests](https://github.com/garagon/nanostack/issues/new?template=feature_request.yml)\n- Security vulnerabilities: [SECURITY.md](SECURITY.md)\n\n## License\n\nApache 2.0\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaragon%2Fnanostack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgaragon%2Fnanostack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaragon%2Fnanostack/lists"}