Qoc
The Journal
03Essays

A coding agent for your trading desk

The agent you already use to write code can research markets, propose trades, and execute them — with a human-approval gate at every step.

Qoc TeamApril 17, 20267 min read

Claude Code can already refactor a codebase, write tests, and ship a feature — so why not let it research a thesis, draft a trade, and wait for you to approve?

The same loop, a different domain

The core loop of an AI coding agent is: read context, reason, produce a change, wait for approval. Qoc applies the same loop to trading. The agent reads your desk — positions, watchlists, research files, open issues — reasons about what to do, and produces a proposal: a structured diff that describes exactly what order it wants to place and why.

You review the proposal the same way you'd review a pull request. If it looks right, you approve it. If not, you reject it or ask the agent to revise. The order is never placed without your explicit go-ahead.

What the agent actually reads

When you open a Qoc workspace in Claude Code, the agent sees a directory of plain files. It reads desk.toml to understand the desk configuration, entities/ to see your watchlist and holdings, research/ for prior analysis, and the latest UTA snapshot for current buying power.

Everything is text. The agent doesn't need a special API or a custom plugin — it reads files, reasons about them, and writes new files (proposals, research notes, issue updates) back into the workspace. Qoc's runtime picks those up and acts on them.

The propose–approve loop

  1. 1

    Agent reads desk context

    On each cycle, the agent reads the current snapshot, open positions, and any issues or schedules that are due. This grounds its reasoning in your actual situation.

  2. 2

    Agent produces a research note

    If a trade idea merits investigation, the agent writes a structured note into research/. You can read these at any time — they're plain Markdown files, not opaque logs.

  3. 3

    Agent writes a proposal

    A proposal is a file in orders/pending/ describing the instrument, direction, size, rationale, and the guard rules it has already validated against. Think of it as a pull request for a trade.

  4. 4

    You review and decide

    Qoc surfaces the proposal in your inbox. You read the rationale, check the risk numbers, and either approve or reject. A rejection can include feedback the agent will read on the next cycle.

  5. 5

    Approved proposals execute

    On approval, Qoc's runtime routes the order to the correct venue via the configured adapter. The executed trade is committed to history with the full proposal as its record.

The agent never executes without approval

This is the non-negotiable rule in Qoc's design. Proposals can be produced autonomously on a schedule, but they sit in a pending state until a human approves them. There is no mode in which the agent places an order on its own.

If you want to move faster, you can configure auto-approve rules in desk.toml that apply to specific instruments or order sizes below a threshold — but you are always the one who wrote those rules.

Guardrails that travel with the desk

Guards are pre-trade risk rules defined in desk.toml. They run against every proposal before it reaches your inbox, so you never see a proposal that would violate your own rules. Common guards include position size limits (as a fraction of desk equity), sector concentration caps, and instrument-level blocklists.

Because guards are plain configuration, they're version-controlled alongside the rest of your desk. You can review their history, roll them back, and audit exactly which rules were in effect when any given proposal was generated.

A minimal guard configuration

desk.toml — guard rules applied to every proposal
toml
[guards]
max_position_pct   = 0.10   # no single position > 10% of desk equity
max_open_proposals = 5      # never more than 5 pending proposals at once
blocked_instruments = []    # add ticker symbols to hard-block them

Why this feels different from trading bots

A traditional trading bot is a black box that executes rules you hard-coded. Qoc's agent is different in two ways: it reasons in natural language over unstructured context (news, your own research notes, price data), and it always stops short of execution to ask for your sign-off.

The result is something closer to a research analyst who drafts order tickets for you to sign than to an automated system running in the background. You stay in control; the agent handles the legwork of surfacing opportunities and structuring the trade correctly.