Creating Your Own Agents
This is the page where the platform becomes yours. The shipped presets, marketing, customer service, social media, are examples of what this mechanism can carry, and they were all built with exactly the machinery described here. An agent can be anything: a competitor watcher, a daily report writer, an inbox triager, a backlog groomer, a content drafter, a log auditor. If you can brief a contractor on it, you can run an agent on it.
What an Agent Is Made Of
Every agent is one entry in config/agents.json, and the fields tell the whole story:
{
"id": "reviewwatcher",
"type": "custom",
"enabled": true,
"tick_minutes": 120,
"model": "claude-sonnet",
"instructions_file": "memory/agent_systems/custom/reviewwatcher.md"
}
id is a unique lowercase name, it labels the agent's lane on the dashboard, its logs, and its pause file. type is custom for your own agents, or a preset type to use the built-in roles. enabled is the on switch, every agent ships off until you decide. tick_minutes is the schedule: how often the agent wakes and works. model is its brain, any key from the AI models guide. instructions_file points at the markdown brief that defines the job, the heart of the agent, covered in depth in instruction files.
Three optional fields handle the practical patterns that come up. pre_command runs a command at the start of each tick and feeds its output into the agent's prompt, the standard way to hand an agent fresh data, the new rows, the latest log lines, the current queue, without the agent having to fetch it. gate_command with gate_keys defines a configuration check that skips the AI call entirely when there is nothing to do, an agent gated on an unconfigured area costs nothing until the area is set up. trigger_label names the agent's work in the activity feed.
Write the Instructions File
Describe the job the way you would brief a capable contractor: the role, what to do each tick, and the boundaries, including when to raise a flag instead of deciding alone. Short and concrete beats long and aspirational. The preset role directories under memory/agent_systems are production examples worth copying, and the master agent will draft the file with you in chat.
Add the Agent
Use the Models panel in the Config tab, the visual editor for agents.json, or add the JSON entry by hand. The file is watched, so the agent exists the moment you save, and its lane appears on the dashboard.
Enable It and Watch
Flip enabled on and follow the first few ticks in the activity feed. A new agent's early work tells you quickly whether the brief is right: too cautious means the instructions can grant more, too eager means the boundaries section needs a line. Edits to the instructions file apply on the next tick.
Tune the Dials
Match the tick to the rhythm of the work, a news watcher might tick hourly, a weekly report writer once a day, and match the model to the difficulty. Start cheap and promote the agent if the work improves with a stronger model. Both fields apply live.
The Lifecycle, Live
agents.json reconciles continuously: adding, editing, enabling, disabling, and deleting agents all apply without a restart. The platform is polite about timing, edits and removals of a busy agent wait for its current task to finish, and impatient when you need it to be, the Kill Now button on an agent's lane stops its current task immediately while the agent itself keeps its schedule. Each agent pauses independently, its UI button or a work/.pause_<id> file, and the global pause stops them all, the full model is in pause and safety.
What Every Agent Inherits
The reason a one-file brief produces competent work is everything the platform wraps around it. Every agent automatically receives its recent conversation each turn, queries the memory bank before acting, and saves what it learns after. Every agent can call the full tool layer, send email, post, browse, scrape, run terminal sessions, query analytics. Every agent honors flags, writing to you whenever something needs human judgment. Your agent starts on day one with the accumulated knowledge of the whole install behind it, and everything it learns flows back into that pool.
Using the Presets as Starting Points
Setting an agent's type to marketing, customerservice, or socialmedia gives it that preset's full built-in role, the fastest path when your job matches one of those shapes. The preset guides, marketing, customer service, and social media, document what each one does. For everything else, custom plus your own instructions file is the whole recipe, and you can run several custom agents side by side, each with its own brief, schedule, and model.
An agent is a brief, a schedule, and a model: one JSON entry pointing at one markdown file. The platform supplies the memory, context, tools, and safety rails, changes reconcile live, and there is no limit on how many agents you run or what jobs you give them.