Build your first agent.
A Houston agent is a JSON file and a prompt. You can build one in 10 minutes.
What you need
Two files. That's it.
houston.json— defines what your agent looks like, which tabs it has, and what category it belongs to.CLAUDE.md— the instructions your agent follows. This is the brain.
Optional: an icon.png (256x256) for the store card.
Without one, Houston uses the Lucide icon from your manifest.
The manifest
Here's a minimal houston.json for a bookkeeping agent:
{
"id": "bookkeeper",
"name": "Bookkeeper",
"description": "Categorize expenses, reconcile accounts, prepare reports.",
"icon": "Calculator",
"category": "business",
"author": "Your Name",
"tags": ["accounting", "bookkeeping", "finance"],
"tabs": [
{ "id": "chat", "label": "Chat", "builtIn": "board", "badge": "activity" },
{ "id": "files", "label": "Files", "builtIn": "files" },
{ "id": "job-description", "label": "Instructions", "builtIn": "job-description" }
],
"defaultTab": "chat"
}
The id must be unique. Use kebab-case. This is how
Houston identifies your agent across installs and updates.
Fields reference
| Field | Required | What it does |
|---|---|---|
id | Yes | Unique identifier (kebab-case) |
name | Yes | Display name in the store and sidebar |
description | Yes | One-line description for the store card |
icon | No | Lucide icon name (fallback if no icon.png) |
category | No | productivity, development, research, creative, or business |
tabs | Yes | Which tabs the agent shows (see below) |
defaultTab | No | Tab ID to show first. Defaults to the first tab. |
claudeMd | No | Inline CLAUDE.md content (alternative to a separate file) |
agentSeeds | No | Files to create in every new agent instance |
agents | No | Multiple prompt profiles for multi-agent setups |
The prompt
Create a CLAUDE.md file next to your manifest. This
is where your domain expertise lives.
# Bookkeeper
You are a bookkeeping agent. You help users manage their
finances by categorizing expenses, reconciling accounts,
and preparing reports.
## What you do
- Categorize transactions from bank statements
- Flag unusual expenses for review
- Generate monthly summaries
- Answer questions about spending patterns
## Rules
- Always ask which time period the user wants before starting
- Round currency to two decimal places
- When in doubt about a category, ask the user
- Never fabricate transaction data
The quality of your agent is the quality of this prompt. This is where founders spend their time. The domain knowledge, the edge case handling, the workflow design. This is your product.
Built-in tabs
Houston ships with tabs you can use out of the box. Add them
to your tabs array with a builtIn key.
| builtIn value | What it does |
|---|---|
board | Kanban board for tasks and conversations. The main chat interface. |
files | File browser for the agent's working directory. |
job-description | CLAUDE.md editor with skills and learnings. |
integrations | Service integrations (Composio). 1000+ tools. |
routines | Scheduled routines and automations. |
configure | Custom configuration panel. |
events | Event feed and activity stream. |
You can also disable a tab or add a chip label. Useful for features you're still building:
{ "id": "routines", "label": "Routines", "builtIn": "routines", "disabled": true, "chip": "Soon" }
Import and test
Two ways to get your agent into Houston:
From GitHub (recommended)
- Push your
houston.json,CLAUDE.md, and optionalicon.pngto a GitHub repo. - In Houston, click New Agent.
- Switch to the GitHub tab.
- Paste your repo URL or
owner/repo. - Houston downloads the files and installs the agent.
Manually
- Create a folder at
~/.houston/agents/your-agent-id/ - Put your
houston.jsonandCLAUDE.mdthere. - Restart Houston. Your agent appears in the New Agent picker.
Once installed, create a new agent from your definition. Houston
seeds the working directory with your CLAUDE.md and any files
from agentSeeds. Start chatting. Iterate on the
prompt until it feels right.
Publish to GitHub
Your GitHub repo is your distribution channel. The minimum repo structure:
your-agent/
├── houston.json
├── CLAUDE.md
└── icon.png (optional, 256x256)
Anyone can import your agent by pasting the repo URL into Houston. When you push updates, Houston detects them and updates installed agents automatically.
Going further
Seeding files
Use agentSeeds to pre-populate every new agent
instance with default files:
"agentSeeds": {
".houston/prompts/execution.md": "You are a coding agent...",
".houston/config.json": "{\"mode\": \"default\"}"
}
Multi-agent setups
One agent definition can have multiple prompt profiles. Each profile gets its own prompt file and create button:
"agents": [
{
"id": "execution",
"name": "Coder",
"promptFile": "execution.md",
"createLabel": "New Mission"
},
{
"id": "planning",
"name": "Planner",
"promptFile": "planning.md",
"createLabel": "New Planning Session"
}
]
Custom React components
Built-in tabs not enough? You can build custom React components and bundle them with your agent. That's the next chapter.