Labsco
ashlrai logo

ashlr-stack

β˜… 2

from ashlrai

Open-source AI coding stack β€” bundled MCP servers, agent runtime, and developer tooling for shipping AI-native dev tools.

πŸ”₯πŸ”₯βœ“ VerifiedFreeQuick setup

Ashlr Stack

The control plane for your entire dev stack. One command to provision, wire, and operate every third‑party service in your project.

Status: pre‑alpha, active development.

What Stack does

In 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:

  • creating a Supabase project, copying URL + anon key + service role key into .env
  • generating a Vercel token
  • picking a Neon region and copying the connection string
  • setting up a Sentry project and pasting the DSN
  • registering an OAuth app, generating a PAT, pasting keys, adding MCP servers to .mcp.json…

Stack collapses that hour into one command:

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`.

How it relates to the rest of Ashlr

  • Phantom Secrets β€” the vault. Real secret values never leave your machine. Stack writes every credential through Phantom.
  • ashlr-plugin β€” token-efficiency layer for Claude Code. Orthogonal to Stack.
  • ashlrcode β€” multi-provider AI coding CLI. Orthogonal.

Stack is the control plane. Phantom is the vault. ashlr-plugin is the context compressor. They compose.

Curated v1 provider catalog

Database β€” Supabase Β· Neon Β· Turso Β· Convex Β· Upstash Β· Firebase Deploy β€” Vercel Β· Railway Β· Fly.io Β· Cloudflare Β· Render Cloud β€” AWS AI β€” OpenAI Β· Anthropic Β· xAI Β· DeepSeek Analytics β€” PostHog Errors β€” Sentry Payments β€” Stripe Code β€” GitHub Tickets β€” Linear Email β€” Resend Auth β€” Clerk

29 providers total. Run stack providers to see the live catalog.

Bring Stack to an existing project

Already have a repo with services wired up? You don't start from scratch.

# 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

How git-sharing works

Stack splits its config into two files so you can commit the shape of a stack without leaking per-developer resource IDs:

  • .stack.toml β€” committed. Names of services, their secret slots, MCP wirings.
  • .stack.local.toml β€” gitignored automatically. project_id, resource_id, timestamps. Unique to each clone.

Another developer cloning the repo runs stack doctor --fix and Stack re-authenticates / re-provisions each service for them, writing a fresh .stack.local.toml.

Monorepo layout

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

Publishing

Three 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.

Don't hand-edit the workspace:* entries in packages/*/package.json β€” dev needs them. Use the publish script instead:

scripts/publish.sh --version 0.1.0

It bumps each package's version, swaps workspace:* β†’ ^<version>, 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.

Landing page

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

Dark-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.