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

CI License: MIT npm version

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 (coremcpcli), 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.