Horton agent
The built-in assistant registered by the Electric Agents dev server. Horton can chat conversationally, search the web, read and edit files, run shell commands, and dispatch workers for isolated subtasks.
Source: packages/agents/src/agents/horton.ts
Try it
With the dev server running (npx electric-ax agents quickstart):
npx electric-ax agents spawn /horton/my-horton
npx electric-ax agents send /horton/my-horton 'What's in this directory?'
npx electric-ax agents observe /horton/my-hortonTools
Horton is configured with ctx.electricTools plus the base Horton tool set:
| Tool | Purpose |
|---|---|
bash | Run shell commands in the working directory. |
read | Read a file. |
write | Create or overwrite a file. |
edit | Targeted string replacement. |
web_search | Web search via the configured search provider. |
fetch_url | Fetch a URL and return it as markdown. |
spawn_worker | Dispatch a subagent for an isolated subtask. |
fork | Branch a session at its latest completed response. |
observe_pg_sync | Observe an Electric Postgres shape and wake on changes. |
unobserve_pg_sync | Remove an existing pg-sync observation. |
send | Send a message to another entity. |
set_title | Rename the current chat session title. |
web_search uses the search provider configured by the built-in runtime; Brave search requires BRAVE_SEARCH_API_KEY.
When docs support or skills are available, Horton also adds the docs search tool and skill tools during bootstrap. Built-in runtimes also provide ctx.electricTools, including schedule tools and webhook-source tools when configured.
Title generation
After the first agent run completes, Horton calls generateTitle() using the configured low-cost model to summarise the user's first message into a 3-5 word session title and stores it via ctx.setTag('title', title). Failures are logged and ignored — the entity continues without a title.
Details
| Property | Value |
|---|---|
| Type name | horton |
| Model | HORTON_MODEL (claude-sonnet-4-6 by default) |
| Title model | Configured low-cost model |
| Tools | ctx.electricTools + base Horton tool set, plus docs/skill tools when configured |
| Working directory | Passed at bootstrap (defaults to process.cwd()) |
| Title generation | Yes, after the first run if no title tag exists |
Extending Horton
The system prompt and tool factory are exported so you can build your own variants:
import {
HORTON_MODEL,
buildHortonSystemPrompt,
createHortonTools,
} from "@electric-ax/agents"
registry.define("my-assistant", {
description: "Horton with an extra custom tool",
async handler(ctx) {
ctx.useAgent({
systemPrompt: buildHortonSystemPrompt(process.cwd()),
model: HORTON_MODEL,
tools: [
...ctx.electricTools,
...createHortonTools(ctx.sandbox, ctx),
myCustomTool,
],
})
await ctx.agent.run()
},
})Related
- Worker — the subagent type Horton dispatches via
spawn_worker.