ashlr-stack
Stack de codificação de IA de código aberto — servidores MCP agrupados, runtime de agente e ferramentas de desenvolvimento para criar ferramentas de desenvolvimento nativas de IA.
Documentação
Ashlr Stack
O plano de controle para toda a sua stack de desenvolvimento. Um comando para provisionar, conectar e operar cada serviço de terceiros no seu projeto.
Status: pré-alfa, desenvolvimento ativo.
Instalação
Quatro maneiras, escolha uma:
# Homebrew (macOS / Linux — installs Phantom Secrets as a dependency)
brew install ashlrai/ashlr/stack
# One-liner, macOS / Linux (also installs Phantom Secrets if missing)
curl -fsSL stack.ashlr.ai/install.sh | bash
# One-liner, Windows (PowerShell)
irm https://stack.ashlr.ai/install.ps1 | iex
# npm / bun registry
bun add -g @ashlr/stack ashlr-stack-mcp # or: npm i -g
Instalação para desenvolvimento (a partir de um clone local deste repositório):
git clone https://github.com/ashlrai/ashlr-stack && cd ashlr-stack
bun install
bun run packages/cli/src/index.ts --help
# Optional: alias stack=`bun run $(pwd)/packages/cli/src/index.ts` so it's on your PATH
Usando Stack com um agente de codificação com IA? Veja STACK.md — um resumo de projeto autônomo para agentes que buscam contexto no repositório.
O que Stack faz
Em um mundo nativo de Claude‑Code, o atrito para iniciar um projeto não é escrever código — é alternar entre abas para criar e conectar dez serviços. Cada npx create-next-app é seguido por uma hora de:
- criar um projeto Supabase, copiar a URL + chave anônima + chave de role de serviço para
.env - gerar um token do Vercel
- escolher uma região da Neon e copiar a string de conexão
- configurar um projeto Sentry e colar o DSN
- registrar um app OAuth, gerar um PAT, colar chaves, adicionar servidores MCP ao
.mcp.json…
Stack reduz essa hora a um único comando:
stack init --template nextjs-supabase-posthog-sentry
# Stack does the OAuth dance per provider,
# creates the upstream resource,
# stores every secret in Phantom,
# writes .env + .mcp.json,
# and hands you a project ready for `bun dev`.
Como se relaciona com o resto de Ashlr
- Phantom Secrets — o cofre. Valores reais de segredos nunca saem da sua máquina. Stack escreve toda credencial através de Phantom.
- ashlr-plugin — camada de eficiência de tokens para Claude Code. Ortogonal ao Stack.
- ashlrcode — CLI de codificação com IA multprovedor. Ortogonal.
Stack é o plano de controle. Phantom é o cofre. ashlr-plugin é o compressor de contexto. Eles se compõem.
Catálogo de provedores v1 curado
Banco de dados — Supabase · Neon · Turso · Convex · Upstash · Firebase Deploy — Vercel · Railway · Fly.io · Cloudflare · Render Nuvem — AWS IA — OpenAI · Anthropic · xAI · DeepSeek Analítica — PostHog Erros — Sentry Pagamentos — Stripe Código — GitHub Tickets — Linear Email — Resend Autenticação — Clerk
29 provedores no total. Execute stack providers para ver o catálogo ao vivo.
Uso
stack init # interactive template picker
stack add supabase # OAuth → new project → secrets → .mcp.json
stack providers # full catalog (29 services across 11 categories)
stack doctor --fix # verify every service; re-run setup for anything broken
stack exec -- bun dev # run with Phantom's secret proxy active
Camada de recomendação com IA
Descreva o que você está construindo — Stack escolhe os provedores.
stack recommend "B2B SaaS with auth, AI, and payments"
# → ranked list of matching providers with rationales
stack recommend "serverless postgres" --save
# → freezes a Recipe to .stack/recipes/<id>.toml
stack apply <recipe-id>
# → runs `stack add` for each provider + pre-wires Phantom rotating envelopes
# + drops webhook stubs for Stripe / Clerk / Supabase / GitHub
# (add --noWire to opt out of the Phantom auto-wiring)
Dentro do Claude Code, o mesmo fluxo é uma chamada de ferramenta:
stack_recommend { query: "B2B SaaS with auth + payments", save: true }
stack_apply { recipe_id: "<id>" }
O raciocínio acontece no Claude — Stack detém o catálogo + a execução. Fora do Claude, stack recommend --synth usa um SLM local (LM Studio em :1234, Ollama em :11434) para justificativas. Nenhum SDK remoto de LLM vive no Stack.
Traga Stack para um projeto existente
Já tem um repositório com serviços configurados? Você não precisa começar do zero.
# In an existing repo:
stack scan # detects Supabase / Sentry / OpenAI / etc. from package.json, config files, .env.example
stack scan --auto # scans, then interactively runs `stack add` for each detection
stack import # or: inhale an existing .env straight into Phantom + .stack.toml
# Clone someone else's project:
stack clone github.com/org/repo
# → git clone + scans the checkout + prints next steps
# Across every project on this machine:
stack projects list # everywhere you've used Stack
stack doctor --all # run health check across all registered projects
Como funciona o compartilhamento via git
Stack divide sua configuração em dois arquivos para que você possa commitar a forma de uma stack sem vazar IDs de recursos por desenvolvedor:
.stack.toml— commitado. Nomes dos serviços, seus slots de segredos, conexões MCP..stack.local.toml— ignorado via git automaticamente.project_id,resource_id, timestamps. Único para cada clone.
Outro desenvolvedor clonando o repositório executa stack doctor --fix e Stack reautentica/reprovisiona cada serviço para ele, gravando um novo .stack.local.toml.
Layout do monorepo
packages/
core/ — @ashlr/stack-core — shared logic, provider adapters
cli/ — @ashlr/stack — the `stack` binary
mcp/ — ashlr-stack-mcp — MCP wrapper
plugin/ — Claude Code plugin wrapper
site/ — Astro landing page (deploys to stack.ashlr.ai)
templates/ — starter stacks
docs/ — auth matrix, schema reference
Publicação
Três pacotes vão para o npm: @ashlr/stack-core, ashlr-stack-mcp, @ashlr/stack. Para desenvolvimento no monorepo, @ashlr/stack depende de @ashlr/stack-core via workspace:* — é isso que permite bun install vincular o checkout local. Um npm install @ashlr/stack simples de fora do workspace não consegue resolver workspace:*, então o fluxo de publicação precisa reescrever esses intervalos para uma versão real (ex.: ^0.1.0) imediatamente antes de npm publish.
Não edite manualmente as entradas workspace:* em packages/*/package.json — o desenvolvimento precisa delas. Use o script de publicação:
scripts/publish.sh --version 0.1.0
Ele incrementa o version de cada pacote, troca workspace:* → ^<version>, executa npm publish --dry-run para verificação, pede confirmação explícita, publica em ordem de dependência (core → mcp → cli), restaura workspace:* para o desenvolvimento local continuar funcionando e taggeia o release. Veja o cabeçalho do script para detalhes.
Página inicial
cd packages/site
bun install
bun run dev # http://localhost:4321
bun run build # static output in dist/
Escura primeiro, acento magenta, Astro + Tailwind v4 + Framer Motion. Três ilhas React interativas (terminal animado, comparação de abas "com vs sem Stack", mock de chat do Claude Code). prefers-reduced-motion honrado.
Licença
MIT.