A few months ago we shipped the epilot CLI, and it quietly became one of my favorite tools. One command, npx epilot
, gives you every single epilot API operation in your terminal: entities, journeys, workflows, pricing, files, permissions, 50+ APIs.
Interactive pickers if you're exploring, --json
and --no-interactive
if you're scripting.
It also turned out to be a perfect match for AI agents like Claude. Agents are great at driving CLIs: they discover operations, read the help, make calls, parse the JSON. No custom integration or MCP server needed, the CLI is the integration. And because handing an agent live CRM access is a scary idea, the CLI ships with two safety nets, both enforced server-side:
epilot auth login --readonly
epilot access-token createAccessToken -d '{
"name": "AI agent token",
"read_only": true,
"anonymize": true
}'
Read-only plus anonymized means an agent can explore, analyze and report on your real org all day, and the worst it can do is read data it can't even de-anonymize.
Now we've made the CLI even better. On top of the raw API commands, we added app facades: a set of high-level epilot app
commands that take you from an empty folder to a working app installed in your org. And that's what this post is really about, because apps are where the fun is.
epilot is very configurable out of the box: journeys, workflows, automations, pricing. But at some point every team hits a wall, something the UI simply doesn't offer.
That's what Apps are for. They extend the platform with your own UI and logic, running right inside the product. Everything an app is (its components, configuration and assets) is described in a single manifest.json
.
Until now, getting from "I have an idea" to "it's running in my org" meant a fair amount of manual manifest-wrangling. The App CLI turns it into four steps.
epilot app init my-app
cd my-app
You get a ready-to-go monorepo: the manifest.json
, a components/
folder, build tooling already wired up, and a SKILL.md
with instructions written specifically for AI agents (more on that in a minute).
epilot app add-component
An interactive picker lets you choose what to build:
CUSTOM_CAPABILITY
)CUSTOM_PAGE
)CUSTOM_JOURNEY_BLOCK
)CUSTOM_PORTAL_BLOCK
)Each choice lands as a working component from the epilot-dev/app-templates repo, registered in your manifest, ready to build.
epilot app dev --component my-tab
This is my favorite command: it serves your component from localhost inside the actual epilot UI. You edit code locally, hit refresh, and see your tab or widget rendered in the real product, with real data, next to real features. No deploy loop while iterating. When you're done, epilot app dev --off
removes the override.
epilot app validate
epilot app deploy --dry-run # see what would change
epilot app deploy # ship it
deploy
reads the manifest, creates or updates the app, uploads your built assets, and handles versioning for you. If the latest version is already public (and therefore locked), it automatically creates a new one. epilot app versions
shows the history.
Here's where the two halves of this story click together.
Remember the SKILL.md
that epilot app init
scaffolds? It teaches AI agents the project structure, the manifest format, and the full workflow. Claude Code picks it up automatically. So building an epilot App in 2026 actually looks like this:
epilot app init my-app && cd my-app
claude
Then you describe what you want in plain language:
"Add a custom tab to the contact page that shows all meters linked to the contact, with their last readings in a table."
And the agent takes it from there:
SKILL.md
to understand the projectepilot app add-component
to scaffold a custom entity tabepilot app dev
so you can watch it live inside epilotepilot app validate
and epilot app deploy
You review, the agent types. And this isn't just a developer workflow: colleagues who wouldn't call themselves engineers have shipped working apps this way. The CLI does the heavy lifting, the agent does the plumbing, and the human decides what to build.
npx epilot --help # explore the CLI
epilot auth login --readonly # safe mode for agent sessions
epilot app init my-first-app # start building
If you build something with it, or let Claude build something with it, I'd love to hear how it goes. 🚀