@calo-design/cli
v0.4.6
Published
One-line setup for Calo design tooling: logs in with your Calo email and installs the calo-design skill + design-system packages. No GitHub account needed.
Readme
@calo-design/cli
One-line setup for Calo design tooling. It's a small installer, not a runtime: it
logs you in with your Calo email, installs the calo-design Claude Code skill, and sets
up the design-system stack (@calo/design-system + @calo/flows + the React Native
peers) on your machine. After that it gets out of the way — Claude Code is the runtime,
the skill is the guidance.
Access is gated by your @calo.app email through the Calo broker, which mints a
short-lived GitHub token at install time. No GitHub account, PAT, or SSH key needed.
Package: https://www.npmjs.com/package/@calo-design/cli
Setup
npx @calo-design/cli login # one-time: your Calo email + the emailed code
npx @calo-design/cli init # skill + the shared ds/flows runtime, and a prototype here
@calo-design/cliis a public npm package. If npx reports it can't be found — "not in this registry", "404", or "not a public package" — your npm is pointed at a private or corporate registry that doesn't carry it (common on managed laptops). Check withnpm config get registry(it should behttps://registry.npmjs.org/). To run regardless of your.npmrc, pin just this scope to public npm:npx --@calo-design:registry=https://registry.npmjs.org/ @calo-design/cli login
init does two machine-level things every time: it installs the skill into
~/.claude/skills/, and it ensures the shared runtime at ~/.designchef/runtime/ — one
copy of @calo/design-system, @calo/flows, Expo and the peers, shared by every
prototype. Then, if the current folder is empty or an existing Expo project, it links a
prototype here that points at that runtime.
To start a prototype from inside a workspace folder (where the current directory isn't
empty), give it a name and init creates the subfolder for you:
npx @calo-design/cli init my-prototype # creates ./my-prototype/ and links it
cd my-prototype
npx expo start # press w for web, or scan the QR in Expo GoOther commands:
npx @calo-design/cli init --skip-packages # skill only, no runtime
npx @calo-design/cli init --isolated # install the stack into THIS folder (no shared runtime)
npx @calo-design/cli update # refresh the skill + re-pin the shared runtime
npx @calo-design/cli logout # forget the saved sessionThe login session lives at ~/.designchef/session.json (chmod 600) and refreshes
automatically. Set CALO_BROKER_URL to point at a local broker for development.
Building a screen
Start a Claude Code session in a prototype folder, load the skill with /calo-design,
and describe the screen — for example, "build a Calo-native meal-swap screen." The skill
composes it from the design-system primitives.
Fonts ship with @calo/design-system; load them in your root layout:
import { useFonts } from "expo-font";
import { caloFonts } from "@calo/design-system";
const [fontsLoaded] = useFonts(caloFonts);Publishing to the Mirror
Run from inside a standalone prototype folder (a plain Expo app with a src/app/ route
directory):
calo-design push --slug <slug> --title "<Title>" --owner "<name>" --message "<msg>"No EAS or Tigris credentials needed — just calo-design login. The broker vends the Expo
token and writes the registry server-side. Under the hood it:
- runs
eas update --branch <slug>to publish the prototype's JS bundle to its own EAS Update channel in the shared project (created on first push; latest wins on re-push). Bundling runs locally; auth uses the broker-vended Expo token. - hands the registry entry (and
screenshot.pngif present) to the broker, which upserts the Tigrisindex.jsonfeed so the prototype appears in the Mirror's browsable list.
--dry-run stages a managed copy and prints what would happen without publishing.
--direct is the legacy path that publishes from your own local EAS + Tigris credentials
(maintainer/debug).
How access works
login → broker verifies @calo.app + emails a code → session JWT in ~/.designchef
init → broker mints a 1-hour read-only GitHub token → private installs
push → broker vends the Expo token + writes the Mirror registry server-sideThe broker is the only place the GitHub / Expo / Tigris secrets live.
Local development
Point the CLI at a local broker and run the client-spine test:
cd ../calo-broker && npm run dev # one shell
CALO_BROKER_URL=http://localhost:8080 npx @calo-design/cli login # another shell
BASE=http://localhost:8080 bash test/client-spine.sh