Skip to content

Tools

A desk acts through tools. Each tool is a class with a JSON schema, and the same tools are offered to every model. The table below lists all 49, grouped by what they are for.

Group Tools
Market data get_time, get_quote, get_candles, search_instruments
The account get_portfolio, get_orders
Orders place_order, place_bracket_order, modify_order, cancel_order, flatten_desk
Terminal bash_run, bash_background, bash_check, bash_restart
Browser browser_open, browser_snapshot, browser_click, browser_type, browser_screenshot, browser_back, browser_tabs
The web web_search, web_fetch
Files and memory read_file, write_file, edit_file, add_note, search_sessions, propose_file_change
Pictures view_image, send_image
Skills load_skill, skill_create, skill_patch, skill_archive
Scheduling and messages cron_create, cron_list, cron_delete, schedule_wakeup, set_price_alert, cancel_price_alert, send_message
Asking you ask_user, present_plan
Extensions tool_search, call_mcp_tool, delegate_task, search_knowledge

The full description each model reads is in the API reference, one page per tool, such as place_order. A tool call that runs longer than 60 seconds is stopped, and the loop guard stops a tool called three times with the same arguments in one turn. A tool listed in [approvals], which is only flatten_desk on this machine, is held until you allow it, as Questions, plans and permissions explains.

The terminal

Each desk has one bash session that keeps running between commands, so the current folder and variables carry over. It runs inside bwrap, a sandbox: the desk's scratch/ folder and /tmp are the only places it may write, the project and your files are read-only, and the folders that hold secrets appear empty.

The bash sandbox Each desk has one long-running bash session inside bwrap, with its own scratch folder writable, the project read-only and secrets hidden. bwrap sandbox, one per desk Desk Claude, Qwen or Gemma bash_run · read_file bash, kept running folder and variables carry over stuck command → fresh terminal Writable the desk's scratch folder and /tmp Read-only code, TradingRules.md, everything else Hidden (appear empty) every .env and the UBI folder Docker socket and session bus ~/.claude, ~/.ssh, ~/.hermes, logins the gateway's environment variables the gateway's processes Internet allowed: pip, curl, APIs example.com → 200 UBI, MongoDB, Redis reachable, but every one needs credentials the sandbox cannot see /api/orders/place → 401 web_search · web_fetch SearXNG in Docker on 127.0.0.1:4001 pages on this machine or the home network are refused, redirects too web tools run in the gateway, outside the sandbox allowed out refused: 401 a command and its internet traffic refusals and output coming back The shell can do almost anything except read secrets, change your files or reach the broker, so it cannot get around the risk engine.
What the desk's bash session can reach. It may write only in its scratch folder; the project is read-only; credential folders and every .env appear empty; the network is open so it can fetch data.

The sandbox starts with an empty environment, so no secret reaches it unless [sandbox] passed_environment names it.

The browser

Each desk has its own headless Chrome with a clean profile, never your own, because your profile holds your broker logins. A page comes back as a snapshot: its title, its clickable elements numbered so the model can click by number, and its visible text. The models can also take a screenshot and look at it, and Chat shows it under the tool's card. Pictures and documents explains view_image and send_image.

The browser tools Each desk has its own headless Chrome; a request guard blocks local addresses, and pages come back as numbered elements and text. Desk browser_open browser_click 3 browser_screenshot Chrome 153, headless driven by Playwright its own profile per desk: none of your logins or cookies ordinary Chrome identity, automation flag hidden downloads refused Request guard every request: pages, scripts, images, and the page's own fetches News sites Moneycontrol 200 Zee Business 200 MSN 200 plain download: 403 Blocked UBI on 127.0.0.1 the home network file:// pages "Failed to fetch" What comes back [5] a "Latest News" → https://… [7] textbox "Search symbol" numbered elements and text for every model, a screenshot for Claude and Gemma, which can see allowed refused a request leaving the browser refusals and pages coming back The browser reads the sites plain downloads could not, and cannot be turned against this machine.
The browser tools. A request guard blocks local addresses, so a page cannot reach UBI or the gateway through the desk's browser; what comes back is numbered elements and text, or a screenshot.

Web search and fetch

web_search asks the local SearXNG server, and web_fetch turns one page into its main text with its title and date. Both are far cheaper than the browser for reading news. web_fetch and the browser share the address guard: every address a host name resolves to must be a public internet address, checked again at each redirect, so a page cannot steer a desk to UBI, the databases or a router on the home network. Text from the web is labelled as untrusted data before the model reads it, as Extensions explains.

The journal

Every tool call, result, order, risk decision and fill is written to the desk's journal, one file per day, after secrets are masked. The Activity page reads it, and so does search_sessions.

Reading the account, and the journal The broker reader reads UBI; every event is masked by the secret redactor before the journal writes it and the live stream sends it. Reading the account (read-only: no tool can place an order yet) Recording every step Desk get_quote get_candles get_portfolio get_orders Broker reader one UBI call at a time, all desks in a worker thread plain Instruments, which have no order methods at all UBI 127.0.0.1:8080 settings from tradingmachine/.env 10 brokers Zerodha, Dhan, Flattrade and more ₹1,53,583.08 available, for example Event bus tool_call · tool_result and every other step Secret redactor known passwords and keys, and anything shaped like a token → [redacted] Trade journal one file per desk per India date, lines only added 2026-10-17.jsonl Live event stream for the web interface read request the answer requests and records going out answers coming back In the live test the journal held 25 events and 0 of 5 real secret values.
The broker reader reads UBI for the desk; every event passes through the secret redactor before the journal writes it and the live stream sends it.