ashlr-stack

Pila de codificación de IA de código abierto: servidores MCP incluidos, tiempo de ejecución de agente y herramientas de desarrollador para lanzar herramientas de desarrollo nativas de IA.

Documentación

Ashlr Stack

CI License: MIT npm version

El plano de control para todo tu stack de desarrollo. Un solo comando para aprovisionar, conectar y operar cada servicio de terceros en tu proyecto.

Estado: pre-alfa, desarrollo activo.

Instalación

Cuatro formas, elige una:

# 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

Instalación para desarrollo (desde un clon local de este repositorio):

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

¿Usas Stack con un agente de codificación de IA? Consulta STACK.md — un resumen de proyecto autocontenido para agentes que extraen contexto del repositorio.

Qué hace Stack

En un mundo nativo de Claude‑Code, la fricción al iniciar un proyecto no es escribir código — es saltar entre pestañas para crear y conectar diez servicios. Cada npx create-next-app va seguido de una hora de:

  • crear un proyecto de Supabase, copiar URL + clave anónima + clave de rol de servicio en .env
  • generar un token de Vercel
  • elegir una región de Neon y copiar la cadena de conexión
  • configurar un proyecto de Sentry y pegar el DSN
  • registrar una app de OAuth, generar un PAT, pegar claves, añadir servidores MCP a .mcp.json

Stack reduce esa hora a un solo 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`.

Cómo se relaciona con el resto de Ashlr

  • Phantom Secrets — la bóveda. Los valores reales de los secretos nunca salen de tu máquina. Stack escribe cada credencial a través de Phantom.
  • ashlr-plugin — capa de eficiencia de tokens para Claude Code. Ortogonal a Stack.
  • ashlrcode — CLI de codificación con IA multi-proveedor. Ortogonal.

Stack es el plano de control. Phantom es la bóveda. ashlr-plugin es el compresor de contexto. Se componen.

Catálogo de proveedores curado para v1

Base de datos — Supabase · Neon · Turso · Convex · Upstash · Firebase Despliegue — Vercel · Railway · Fly.io · Cloudflare · Render Nube — AWS IA — OpenAI · Anthropic · xAI · DeepSeek Analítica — PostHog Errores — Sentry Pagos — Stripe Código — GitHub Tickets — Linear Email — Resend Autenticación — Clerk

29 proveedores en total. Ejecuta stack providers para ver el catálogo en 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

Capa de recomendación con IA

Describe lo que estás construyendo — Stack elige los proveedores.

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 de Claude Code, el mismo flujo es una sola llamada de herramienta:

stack_recommend { query: "B2B SaaS with auth + payments", save: true }
stack_apply     { recipe_id: "<id>" }

El razonamiento ocurre en Claude — Stack posee el catálogo + la ejecución. Fuera de Claude, stack recommend --synth usa un SLM local (LM Studio en :1234, Ollama en :11434) para los razonamientos. No hay SDKs de LLM remotos dentro de Stack.

Lleva Stack a un proyecto existente

¿Ya tienes un repositorio con servicios conectados? No empiezas desde cero.

# 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

Cómo funciona el uso compartido vía git

Stack divide su configuración en dos archivos para que puedas confirmar la forma de un stack sin filtrar los IDs de recursos específicos de cada desarrollador:

  • .stack.toml — confirmado. Nombres de los servicios, sus ranuras de secretos, conexiones MCP.
  • .stack.local.toml — ignorado por git automáticamente. project_id, resource_id, marcas de tiempo. Único para cada clon.

Otro desarrollador que clone el repositorio ejecuta stack doctor --fix y Stack re-autentica / re-aprovisiona cada servicio para él, escribiendo un .stack.local.toml nuevo.

Estructura del 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

Publicación

Tres paquetes se publican en npm: @ashlr/stack-core, ashlr-stack-mcp, @ashlr/stack. Para el desarrollo del monorepo, @ashlr/stack depende de @ashlr/stack-core vía workspace:* — eso es lo que permite que bun install enlace el checkout local. Un npm install @ashlr/stack simple desde fuera del espacio de trabajo no puede resolver workspace:*, por lo que el flujo de publicación debe reescribir esos rangos a una versión real (p. ej. ^0.1.0) justo antes de npm publish.

No edites a mano las entradas de workspace:* en packages/*/package.json — el desarrollo las necesita. Usa el script de publicación en su lugar:

scripts/publish.sh --version 0.1.0

Incrementa el version de cada paquete, intercambia workspace:*^<version>, ejecuta npm publish --dry-run para verificación, pide confirmación explícita, publica en orden de dependencias (coremcpcli), restaura workspace:* para que el desarrollo local siga funcionando, y etiqueta el release. Consulta el encabezado del script para más detalles.

Página de aterrizaje

cd packages/site
bun install
bun run dev       # http://localhost:4321
bun run build     # static output in dist/

Oscura por defecto, acento magenta, Astro + Tailwind v4 + Framer Motion. Tres islas React interactivas (terminal animada, comparación de pestañas "con vs sin Stack", mock de chat de Claude Code). prefers-reduced-motion respetado.

Licencia

MIT.