Skip to main content

Configuration reference (loomcoding.toml)

What it is

Every key that Loomcoding reads from the project file loomcoding.toml, and from two profile files, providers.toml and runtime.toml. Each key has its type, its default value and whether a change needs a restart. The page follows the code, not the other way round.

What it is for

  • Finding the key that changes a behaviour, with its allowed range.
  • Checking the default value of a key that you have not set.
  • Knowing which changes take effect at once and which need a restart.

How

  1. Open loomcoding.toml in the project root. Loom creates it on the first open if it is missing.
  2. Add only the keys you want to change. A key you leave out takes its default.
  3. Restart Loom to apply the change, unless the table says otherwise in the notes.

Example​

model = "gpt-4o-mini"
max_steps = 12
effort = "high"

[provider]
kind = "openai_compat"
base_url = "https://api.example.invalid/v1"
api_key_env = "EXAMPLE_API_KEY"

[limits]
temperature = 0.2

[agents]
confirm_delegation = "always"

How values are read​

  • A new project file takes its provider and model from the default entry of providers.toml, or from the first entry if the default is not set. Its max_steps is 8.
  • Loom reads loomcoding.toml when it starts and when it opens the agent. A change made by hand while Loom runs does not affect the running session. Every key below therefore requires a restart.
  • /settings saves its changes and applies them at once. When you save, Loom also reads again [provider] prompt_cache, request_timeout_secs and [limits].
  • /flow odd on and /flow odd off save [flows.odd] enabled. The change applies on restart.
  • /verbose changes the session only. It does not write the file.
  • MCP servers are configured in mcp.toml in the profile, not in this file.

Top level​

KeyTypeDefaultRequires restartWhat it does
modelstringnot set (required)YesModel id sent to the provider.
max_stepsinteger30 when the key is absentYesMaximum number of agent steps in one turn.
effortstringnot set (the model default)YesReasoning effort. Use one of the levels that the model offers; /effort lists them.

[provider]​

KeyTypeDefaultRequires restartWhat it does
kindenumnot set (required)YesAPI type: openai_compat, openai_responses, anthropic or gemini.
base_urlstringnot set (required)YesBase URL of the API. /settings accepts HTTPS, or HTTP for localhost, and rejects credentials inside the URL.
api_key_envstringemptyYesName of the environment variable that holds the key. Empty for a local server that needs no key.
prompt_cachebooleannot set (on)YesPrompt cache points for the Anthropic adapter. LOOMCODING_PROMPT_CACHE overrides it.
context_windowinteger, above 0not set (the model catalog decides)YesTokens per request that the server handles within the time limit.
request_timeout_secsinteger, 1 to 3600120YesTotal time of each request in the OpenAI-compatible adapter.
effortslist of strings, at most 16empty (the model catalog decides)YesEffort levels that a local model accepts, in the order the interface shows them. Example: ["none", "low", "xhigh"].

Key lookup for api_key_env: the process environment, then the project .env file, then the operating system credential store under the same name. Loom never writes the key into the file.

[limits]​

KeyTypeDefaultRequires restartWhat it does
max_read_stepsintegernot set (4 times max_steps, at least 1)YesMaximum number of read steps in one model response.
max_parallel_toolsinteger8 (0 means 8)YesMaximum number of parallel tool calls in one model response.
max_concurrent_requestsinteger4 (0 means 4)YesMaximum number of requests to the provider at the same time.
max_output_tokensinteger4096 (0 means 4096)YesOutput token limit of each request, reasoning included. Capped at 32768.
temperaturenumber, 0.0 to 2.00.0YesSampling temperature. A value outside the range is an error.

[agents]​

KeyTypeDefaultRequires restartWhat it does
global_dirpath~/.agents/agentsYesFolder of global agents. A leading ~/ expands to the home folder.
project_dirpath.agents/agents in the projectYesFolder of project agents. A relative path starts at the project root.
trust_project_agentsbooleanfalseYesApproves every project agent without asking.
confirm_delegationenumdoubtYesWhen to ask before delegating. doubt asks only when several agents fit; always asks every time; never does not ask.
routingenumoffYesAutomatic choice of agent. off does not choose; rule uses the labels of the cards and no model call; classifier uses the rule first and then a cheap model.
routing_modelstringthe parent modelYesModel of the classifier. It is used only with routing = "classifier".
delegationenumnot set (current behaviour)Yesoff removes the subagent tools from the model. on_request delegates only when you ask. proactive delegates independent subtasks. Only off is enforced by code; the other two are rules in the prompt.
max_active_subagentsinteger, 1 to 648YesNumber of subagents that run at the same time.
max_depthinteger, 1 to 31YesDepth of delegation. 1 means no nested delegation. Out-of-range values are clamped.
stall_threshold_secsinteger, 10 to 3600120YesSeconds without a heartbeat before a subagent is marked as stalled.
lost_threshold_secsinteger, 30 to 21600300YesSeconds without a heartbeat before a subagent is marked as lost. A lower value is raised to the stall threshold plus 30 seconds.
lost_actionenumnotifyYesWhat happens to a lost subagent. notify only reports it; fail marks its task as failed and stops its work.
catalog_rootslist of paths, at most 8emptyYesExtra roots with .agents/agents and .agents/skills. Their agents come from third parties, so they need approval.

[a2a]​

KeyTypeDefaultRequires restartWhat it does
roleenumoffYesoff disables A2A. serve exposes local agents to other clients, read-only. consume calls remote agents that you have approved. both does both.
request_timeout_secsinteger, 1 to 60030YesTimeout of each HTTP request to a remote agent.
max_card_bytesinteger, 1 to 838860865536YesMaximum size of a remote agent card.
max_result_bytesinteger, 1 to 8388608262144YesMaximum size of the body of a remote response.
card_refresh_secsinteger3600YesSeconds between downloads of the cards. 0 turns the refresh off. Values below 60 become 60.
ca_filepathnot setYesPEM file with extra certificate authorities for remote agents. It adds to the public roots.
trusted_jwkspathnot setYesJWKS file with the keys that sign cards. When it is set, every remote card needs a valid signature.

[a2a.serve]​

Used only when [a2a] role is serve or both. An unknown key in this section is an error.

KeyTypeDefaultRequires restartWhat it does
listenstring127.0.0.1:7077YesAddress where the local A2A server listens.
agentstringdefaultYesName of the local agent offered to clients. Up to 200 characters.
authtablenot setYesAuthentication of the clients. See [a2a.serve.auth].
public_urlstringnot setYesPublic address advertised in the agent card. Checked with the same rules as base_url.
max_concurrent_tasksinteger, 1 to 644YesNumber of tasks served at the same time.
max_wait_secsinteger, 1 to 30030YesUpper bound, in seconds, for waiting on a task.
max_task_secsinteger, 1 to 14400600YesUpper bound, in seconds, for one task.

[a2a.serve.auth]​

KeyTypeDefaultRequires restartWhat it does
schemeenumnot set (required with auth)YesAuthentication scheme: bearer or apikey.
namestringnot setYesHeader name of the key. Used only with apikey.
envstringnot set (required)YesEnvironment variable that holds the secret. The secret is never written in the file.

[ui]​

KeyTypeDefaultRequires restartWhat it does
verbose_provider_noticesbooleanfalseYesShows the start and end notices of each provider request in the transcript. Without it, a spinner shows while a request runs.

[compaction]​

KeyTypeDefaultRequires restartWhat it does
backgroundbooleanfalseYesBuilds the summary in the background when the context nears its limit. Off uses the synchronous path.

[budget]​

Warnings appear at 80 % and at 100 % of each limit.

KeyTypeDefaultRequires restartWhat it does
session_tokensinteger, above 0not setYesLimit of input plus output tokens for the session.
session_cost_usdnumber, above 0not setYesLimit in US dollars for the session, from known prices.
hard_stopbooleanfalseYesWhen true, the agent stops asking the model once the session reaches 100 % of a limit. Otherwise the budget only warns.

[output_filter]​

KeyTypeDefaultRequires restartWhat it does
enabledbooleanfalseYesCompacts the output of bash and job_output with rules for cargo, git and package managers. The full output stays in tool-output. LOOMCODING_NO_FILTER=1 turns it off.

[flows.<kind>]​

KeyTypeDefaultRequires restartWhat it does
enabledbooleantrue for oddYesTurns a flow mode on or off. Only odd exists today. A kind has 1 to 32 characters: lowercase letters, digits, _ or -.

providers.toml​

This file lives in the profile folder, not in the project. Loom creates it on first use with three entries: llama (a local llama-server), strata and polystrata. Keys are never stored here, only the name of the variable that holds them.

KeyTypeDefaultRequires restartWhat it does
defaultstringllama in the seed fileYesId of the entry that a new project takes its first settings from.
idstringnot set (required)YesShort name that you type in /provider. A repeated id is ignored; the first entry wins.
namestringnot set (required)YesLabel shown in the interface.
kindstringnot set (required)YesAPI type. Only openai_compat is accepted today.
base_urlstringnot set (required)YesBase URL, including /v1.
api_key_envstringnot setYesVariable that holds the key, if the server needs one.
modelstringnot set (required)YesFallback model, used when the server does not answer the probe.
context_windowintegernot setYesDeclared context window.

runtime.toml​

This optional file lives in the profile folder. Loom does not create it. The local server reads it when it starts, so a change needs a restart of that server. It holds an [a2a] section with the same keys as above, and a [supervisor] section.

KeyTypeDefaultRequires restartWhat it does
supervisortablenot setYesStarts the supervisor agent, with the settings of the next section.

[supervisor] in runtime.toml​

The supervisor answers with a timeout of 15 seconds, fixed in the code. If its settings cannot be used, no supervisor starts.

KeyTypeDefaultRequires restartWhat it does
providertablenot set (required)YesProvider of the supervisor, with the keys kind, base_url and api_key_env of [provider].
modelstringnot set (required)YesModel of the supervisor.

Next steps​