{"id":49027049,"url":"https://github.com/ashlrai/ashlr-stack","last_synced_at":"2026-04-24T05:02:24.874Z","repository":{"id":352137225,"uuid":"1213282925","full_name":"ashlrai/ashlr-stack","owner":"ashlrai","description":"The control plane for your entire dev stack. CLI + MCP server + Claude Code plugin that provisions, wires, and operates every third-party service in your project with one command. 23 providers, MCP-native, Phantom-gated secrets.","archived":false,"fork":false,"pushed_at":"2026-04-19T07:04:59.000Z","size":839,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-19T07:35:25.484Z","etag":null,"topics":["anthropic","ashlr","astro","bun","claude-code","cli","cursor","devops","mcp","model-context-protocol","openai","phantom-secrets","stack","supabase","typescript","vercel","windsurf"],"latest_commit_sha":null,"homepage":"https://stack.ashlr.ai","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ashlrai.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-17T08:14:13.000Z","updated_at":"2026-04-19T07:05:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ashlrai/ashlr-stack","commit_stats":null,"previous_names":["ashlrai/ashlr-stack"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ashlrai/ashlr-stack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ashlrai%2Fashlr-stack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ashlrai%2Fashlr-stack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ashlrai%2Fashlr-stack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ashlrai%2Fashlr-stack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ashlrai","download_url":"https://codeload.github.com/ashlrai/ashlr-stack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ashlrai%2Fashlr-stack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32209897,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T03:15:14.334Z","status":"ssl_error","status_checked_at":"2026-04-24T03:15:11.608Z","response_time":64,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["anthropic","ashlr","astro","bun","claude-code","cli","cursor","devops","mcp","model-context-protocol","openai","phantom-secrets","stack","supabase","typescript","vercel","windsurf"],"created_at":"2026-04-19T07:11:53.279Z","updated_at":"2026-04-24T05:02:24.862Z","avatar_url":"https://github.com/ashlrai.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ashlr Stack\n\n[![CI](https://github.com/ashlrai/ashlr-stack/actions/workflows/ci.yml/badge.svg)](https://github.com/ashlrai/ashlr-stack/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](./LICENSE)\n[![npm version](https://img.shields.io/npm/v/@ashlr/stack.svg)](https://www.npmjs.com/package/@ashlr/stack)\n\n\u003e The control plane for your entire dev stack. One command to provision, wire, and operate every third‑party service in your project.\n\n**Status:** pre‑alpha, active development.\n\n## Install\n\nFour ways, pick one:\n\n```bash\n# Homebrew (macOS / Linux — installs Phantom Secrets as a dependency)\nbrew install ashlrai/ashlr/stack\n```\n\n```bash\n# One-liner, macOS / Linux (also installs Phantom Secrets if missing)\ncurl -fsSL stack.ashlr.ai/install.sh | bash\n```\n\n```powershell\n# One-liner, Windows (PowerShell)\nirm stack.ashlr.ai/install.ps1 | iex\n```\n\n```bash\n# npm / bun registry\nbun add -g @ashlr/stack ashlr-stack-mcp     # or: npm i -g\n```\n\n**Dev install** (from a local clone of this repo):\n\n```bash\ngit clone https://github.com/ashlrai/ashlr-stack \u0026\u0026 cd ashlr-stack\nbun install\nbun run packages/cli/src/index.ts --help\n# Optional: alias stack=`bun run $(pwd)/packages/cli/src/index.ts` so it's on your PATH\n```\n\n\u003e Using Stack with an AI coding agent? See [STACK.md](./STACK.md) — a self-contained project brief for agents pulling context from the repo.\n\n## What Stack does\n\nIn a Claude‑Code‑native world, the friction in starting a project isn't writing code — it's tab‑hopping to create and wire ten services. Every `npx create-next-app` is followed by an hour of:\n\n- creating a Supabase project, copying URL + anon key + service role key into `.env`\n- generating a Vercel token\n- picking a Neon region and copying the connection string\n- setting up a Sentry project and pasting the DSN\n- registering an OAuth app, generating a PAT, pasting keys, adding MCP servers to `.mcp.json`…\n\nStack collapses that hour into one command:\n\n```bash\nstack init --template nextjs-supabase-posthog-sentry\n# Stack does the OAuth dance per provider,\n# creates the upstream resource,\n# stores every secret in Phantom,\n# writes .env + .mcp.json,\n# and hands you a project ready for `bun dev`.\n```\n\n## How it relates to the rest of Ashlr\n\n- **[Phantom Secrets](https://phm.dev)** — the vault. Real secret values never leave your machine. Stack writes every credential through Phantom.\n- **ashlr-plugin** — token-efficiency layer for Claude Code. Orthogonal to Stack.\n- **ashlrcode** — multi-provider AI coding CLI. Orthogonal.\n\nStack is the *control plane*. [Phantom](https://phm.dev) is the *vault*. ashlr-plugin is the *context compressor*. They compose.\n\n## Curated v1 provider catalog\n\n**Database** — Supabase · Neon · Turso · Convex · Upstash · Firebase\n**Deploy** — Vercel · Railway · Fly.io · Cloudflare · Render\n**Cloud** — AWS\n**AI** — OpenAI · Anthropic · xAI · DeepSeek\n**Analytics** — PostHog\n**Errors** — Sentry\n**Payments** — Stripe\n**Code** — GitHub\n**Tickets** — Linear\n**Email** — Resend\n**Auth** — Clerk\n\n29 providers total. Run `stack providers` to see the live catalog.\n\n## Usage\n\n```bash\nstack init                    # interactive template picker\nstack add supabase            # OAuth → new project → secrets → .mcp.json\nstack providers               # full catalog (29 services across 11 categories)\nstack doctor --fix            # verify every service; re-run setup for anything broken\nstack exec -- bun dev         # run with Phantom's secret proxy active\n```\n\n### AI recommendation layer\n\nDescribe what you're building — Stack picks the providers.\n\n```bash\nstack recommend \"B2B SaaS with auth, AI, and payments\"\n# → ranked list of matching providers with rationales\n\nstack recommend \"serverless postgres\" --save\n# → freezes a Recipe to .stack/recipes/\u003cid\u003e.toml\n\nstack apply \u003crecipe-id\u003e\n# → runs `stack add` for each provider + pre-wires Phantom rotating envelopes\n#   + drops webhook stubs for Stripe / Clerk / Supabase / GitHub\n#   (add --noWire to opt out of the Phantom auto-wiring)\n```\n\nInside Claude Code, the same flow is one tool call:\n\n```\nstack_recommend { query: \"B2B SaaS with auth + payments\", save: true }\nstack_apply     { recipe_id: \"\u003cid\u003e\" }\n```\n\nReasoning happens in Claude — Stack owns the catalog + execution. Outside Claude, `stack recommend --synth` uses a local SLM (LM Studio on `:1234`, Ollama on `:11434`) for rationales. No remote LLM SDKs live in Stack.\n\n## Bring Stack to an existing project\n\nAlready have a repo with services wired up? You don't start from scratch.\n\n```bash\n# In an existing repo:\nstack scan                    # detects Supabase / Sentry / OpenAI / etc. from package.json, config files, .env.example\nstack scan --auto             # scans, then interactively runs `stack add` for each detection\nstack import                  # or: inhale an existing .env straight into Phantom + .stack.toml\n\n# Clone someone else's project:\nstack clone github.com/org/repo\n# → git clone + scans the checkout + prints next steps\n\n# Across every project on this machine:\nstack projects list           # everywhere you've used Stack\nstack doctor --all            # run health check across all registered projects\n```\n\n### How git-sharing works\n\nStack splits its config into two files so you can commit the shape of a stack without leaking per-developer resource IDs:\n\n- `.stack.toml` — committed. Names of services, their secret slots, MCP wirings.\n- `.stack.local.toml` — gitignored automatically. `project_id`, `resource_id`, timestamps. Unique to each clone.\n\nAnother developer cloning the repo runs `stack doctor --fix` and Stack re-authenticates / re-provisions each service for them, writing a fresh `.stack.local.toml`.\n\n## Monorepo layout\n\n```\npackages/\n  core/     — @ashlr/stack-core — shared logic, provider adapters\n  cli/      — @ashlr/stack — the `stack` binary\n  mcp/      — ashlr-stack-mcp — MCP wrapper\n  plugin/   — Claude Code plugin wrapper\n  site/     — Astro landing page (deploys to stack.ashlr.ai)\ntemplates/  — starter stacks\ndocs/       — auth matrix, schema reference\n```\n\n### Publishing\n\nThree packages ship to npm: `@ashlr/stack-core`, `ashlr-stack-mcp`, `@ashlr/stack`. For monorepo dev, `@ashlr/stack` depends on `@ashlr/stack-core` via `workspace:*` — that's what lets `bun install` link the local checkout. A plain `npm install @ashlr/stack` from outside the workspace **cannot resolve `workspace:*`**, so the publish flow has to rewrite those ranges to an actual version (e.g. `^0.1.0`) right before `npm publish`.\n\nDon't hand-edit the `workspace:*` entries in `packages/*/package.json` — dev needs them. Use the publish script instead:\n\n```bash\nscripts/publish.sh --version 0.1.0\n```\n\nIt bumps each package's `version`, swaps `workspace:*` → `^\u003cversion\u003e`, runs `npm publish --dry-run` for verification, asks for explicit confirmation, publishes in dep order (`core` → `mcp` → `cli`), restores `workspace:*` so local dev keeps working, and tags the release. See the script header for details.\n\n## Landing page\n\n```bash\ncd packages/site\nbun install\nbun run dev       # http://localhost:4321\nbun run build     # static output in dist/\n```\n\nDark-first, magenta accent, Astro + Tailwind v4 + Framer Motion. Three interactive React islands (animated terminal, \"with vs without Stack\" tab comparison, Claude Code chat mock). `prefers-reduced-motion` honored.\n\n## License\n\nMIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fashlrai%2Fashlr-stack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fashlrai%2Fashlr-stack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fashlrai%2Fashlr-stack/lists"}