[ TUTORIALS ]
Write your own agent
The crew that ships with Oddysey watches prices. The agents you write watch whatever you tell them to — on a schedule, unattended, reading the slice of your deck you allow and reporting back in a form you can scan in ten seconds.
What an agent is here
A brief, a model, a schedule, and a list of what it may read. That is the whole of it — there is no tool loop and no way to act.
Each run assembles the deck context you allowed, hands it to the model along with your brief, and stores what comes back: a headline, a summary, a list of findings, and the agent's own claim about whether a human should look today. Runs that ask for attention also land in your ledger; quiet ones do not, because an agent posting “nothing to report” every fifteen minutes would bury everything that matters.
Commission one
- 1
Open Agents in the deck
/app/agents. Start from a skill if you have never written a brief: it fills every field with something that already works, and you can edit all of it. - 2
Write the brief
This is everything the agent will ever be told. Say what it reads, what counts as worth flagging, and what it must never do. Under 300 words is a good target — a brief nobody re-reads is a brief nobody maintains.
A brief that worksTEXT You are a monitoring agent for one Oddysey operator. Each run you are handed the current portfolio and the armed watches. Report in this order, every time: 1. One line: did anything change that matters? 2. What moved, with the numbers you were given. 3. What is near a threshold but has not tripped. Set attention true only when I could act on it today. A quiet day is the normal case — say "nothing needs your attention" and stop. Never explain why a price moved. If the prices are marked as placeholders, say so in the first line and do not reason from them. - 3
Pick the context it may read
Fewer sources is a smaller prompt, a smaller bill, and less room to wander. An agent asked to watch prices does not need the ledger.
- 4
Run it by hand first
Press
Run nowand read the report before you leave it on a schedule. A manual run works even while the agent is paused — that is what pausing is for.
Context sources
| SOURCE | WHAT THE AGENT SEES |
|---|---|
portfolio | Holdings, latest quotes, and whether those quotes are real or placeholders. |
watches | Every standing watch, its threshold, action and status. |
proposals | What has been drafted, what was decided, what is still waiting for you. |
ledger | The most recent audit-trail entries, newest first. |
Everything in that block is handed to the model as data, never as instructions — and the agent is told so. If something in your ledger looks like a direction addressed to an agent, a well-behaved one reports it as a finding rather than following it.
Schedules
| SCHEDULE | RUNS |
|---|---|
manual | Manual only |
quarter-hourly | Every 15 minutes |
hourly | Hourly |
daily | Daily |
- Scheduled agents are swept by the same cron that evaluates watches. A run is stamped before the work starts, so an agent that fails is not retried on every tick.
- A sweep runs a bounded number of agents. Anything left over is still due on the next tick, and the most overdue go first — nothing starves.
- Each deck may commission up to 12 agents.
What a run costs
A run is one model call, priced from the inference catalogue and charged to your credit balance. Output is capped, so the bill scales with the context you attached rather than with how talkative the model felt.
Start from a skill
Skills are Oddysey's own briefs. Each one can be tried with no account at /playground, downloaded as a SKILL.md, or used as the starting text for an agent on your deck.
| SKILL | WHAT IT IS FOR | SUGGESTED SCHEDULE |
|---|---|---|
agent-brief-writer | Interviews you, then writes the brief for an agent you can run today. | Manual only |
watchtower | Turns a list of holdings into a watch plan with defensible thresholds. | Daily |
drawdown-analyst | Reads the day's portfolio and says plainly whether anything changed. | Daily |
proposal-critic | Argues the other side of a drafted proposal before you approve it. | Hourly |
ledger-auditor | Reads the audit trail for the things that are missing from it. | Daily |
The raw file is at /api/skills/{slug} — the same text the playground and the agent loop send to the model, so what you read is what runs.
Over the API
Everything the Agents screen does is the deck REST API, authenticated by your session cookie.
POST /api/agents
content-type: application/json
{
"name": "NIGHT-WATCH",
"purpose": "Reads the portfolio each morning and reports what moved",
"model": "oddysey-balanced",
"schedule": "daily",
"context": ["portfolio", "watches"],
"instructions": "You are a monitoring agent for one Oddysey operator…"
}POST /api/agents/{id}/run # run it now, from the deck
PATCH /api/agents/{id} # { "status": "paused" } and other edits
DELETE /api/agents/{id} # retire it, and its run history with itGET /api/agents returns your roster plus the deck's most recent runs; GET /api/agents/{id} returns one agent with its own history.