Skip to content
PricingBlog
✨ Markdown

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):

sh
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-horton

Tools

Horton is configured with ctx.electricTools plus the base Horton tool set:

ToolPurpose
bashRun shell commands in the working directory.
readRead a file.
writeCreate or overwrite a file.
editTargeted string replacement.
web_searchWeb search via the configured search provider.
fetch_urlFetch a URL and return it as markdown.
spawn_workerDispatch a subagent for an isolated subtask.
forkBranch a session at its latest completed response.
observe_pg_syncObserve an Electric Postgres shape and wake on changes.
unobserve_pg_syncRemove an existing pg-sync observation.
sendSend a message to another entity.
set_titleRename 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

PropertyValue
Type namehorton
ModelHORTON_MODEL (claude-sonnet-4-6 by default)
Title modelConfigured low-cost model
Toolsctx.electricTools + base Horton tool set, plus docs/skill tools when configured
Working directoryPassed at bootstrap (defaults to process.cwd())
Title generationYes, 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:

ts
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()
  },
})
  • Worker — the subagent type Horton dispatches via spawn_worker.