Agent Spec Keys

Each key of the agent spec, by its section: what it takes, and Link's own value where Link's spec sets one.

The agent and its model

The top of the file, [harness] and [model]: which agent it is, what it extends, which harness runs it, which model it uses, and how hard it thinks.

name

Lowercase letters, digits and dashes: the agent's own name, no other. A spec naming another agent is refused.

extends

"link" (as when left out), "link:personal" or "link:coding" (a profile between Link's set and yours), or "none": Link's set is empty.

owner and teams

Printed: whose it is, and the teams that list it. They're Link's to say, so a file never claims them.

[harness] name

Lowercase letters, digits and dashes: the harness that runs the agent. Switching keeps every other opinion, a key the new harness doesn't take included: the spec holds it still (REQUIRED).

[model] default and allow

default is the model when it names none, Link's per provider: claude-haiku-5-5 on Anthropic, gpt-6-luna on OpenAI and anthropic/claude-haiku-5.5 on OpenRouter, the same in every harness. allow is the only models it may run; left out, any.

[model.aliases]

Names for models, each a word for a model as its provider names it, such as high = "claude-opus-5-5". /model:set high, a subagent started on high and a fallback of high each run that model. Only [model] takes the table, never a provider's, and Link's spec has none.

[model] answer

The longest answer, in tokens, as you set it, at least 256. Link's is window.answer's share.

[model] thinking and thinking_budget

thinking is off, low, medium or high, where the model thinks; Link's is low. thinking_budget is tokens, at least 1024, for a model that thinks within a budget; Link's is 2048.

[model.<provider>]

For anthropic, openai, openrouter, ollama or local: the keys above, replacing only the keys it has, and transcribe. A provider's table holds no tables of its own. Link's sets each hosted provider's default.

transcribe

The provider's model that hears a voice note ([connections] voice), its words the message's; left out or "none", a voice note is left out and the agent told so. Link's is OpenAI's, gpt-4o-mini-transcribe.

fallback_model

The hosted model used when the primary model cannot answer, spelled --fallback on the command line, a model or one of [model.aliases]. model.fallback independently controls whether a turn may use it. A provider table cannot set this key.

[window]

How much of the model's window a turn fills.

max

The window it's sent, in tokens, at least 1024. Yours or a team's is used as set, and Link's is held to the model's window. Left out, the model's whole window; Link's is 128000.

unknown

The window of a model Link doesn't know, in tokens, at least 1024. Link's is 32768.

margin

The share kept back, 0 to under 0.5: tokens are counted roughly before a turn, exactly by the provider after. Link's is 0.125.

answer

The share kept for the answer, over 0 and under 1, and with margin under 1, at most the model's longest, where [model] answer doesn't say. Link's is 0.25.

compact_at

The share of the conversation's room it fills before its oldest turns leave for a summary, over 0 and under 1; the rest is the summary's. "never": they leave unsummarized. Link's is 0.75.

save_notes

Before it summarizes, the model saves what matters to its notes, where the agent has a tool to save with (memory__remember), in a conversation you spoke in (never one of others' messages alone). Link's is true.

[turns]

How long a turn may go on, and what a new message does meanwhile.

rounds and calls

rounds is the most rounds of calls in one turn, from 1, Link's 8; calls the most calls one answer makes, from 1, Link's 16.

busy

What a message sent while it answers does: queue (answered after), steer (joins the answer) or interrupt (ends it). Link's is steer.

renew and lapse

renew is how often a running turn renews its lease, at least "1s", Link's "10s". lapse is how long a lease not renewed lasts before its turn is taken for crashed and finished, more than twice renew, Link's "60s".

[instructions]

What the agent is told, in sections: Link's, a file in its files, or none.

base

The prompt's first section, what any agent of yours is: link (Link's, a personal agent who answers briefly), none, or a file in its files (instructions/base.md). Link's is "link".

environment

Its fourth: where its files are, which folders it may change, its connections, as Link resolved them at its start; link, none or a file. Link's is "link".

skills

Its fifth: each skill's name and what it's for, from skills/<name>/SKILL.md in its files, sorted by name; link, none or a file. Link's is "link".

persona

Its sixth: who it is, whatever the task (its name, its voice, its character), a file of yours in its files, read at each message, or none. Link's is "instructions/persona.md".

owner

Its seventh: who you are (your name, your work, the people in your life, how you like things), a file of yours in its files, read at each message, or none. Link's is "instructions/owner.md".

standing

Its eighth: your standing instructions, a file in its files, read at each message, or none. Link's is "instructions/instruction.md".

now

The date, the time here, the connection and who's speaking, at the head of each message, never in the system prompt: link or none. Link's is "link".

notes

Its ninth: what the agent noted for itself, the file its memory's remember writes, read at each message, or none. Link's is "memory/notes.md"; the old default instructions/notes.md reads as memory/notes.md without rewriting the spec.

[instructions.max]

Each section's most, 64 B to 64 KB, by its name: base, model, tools, environment, skills, persona, owner, standing, now and notes. What's past it is cut, the skills and tools whole.

16 KB, 8 KB, 8 KB, 4 KB, 8 KB, 8 KB, 8 KB, 32 KB, 512 B and 4 KB, in that order.

The model's and the tools' sections

The model's (second: instructions/models/<maker>/<model>/instruction.md in its files) and the tools' (third: what each tool says of itself) have no source key, only this.

Which harness takes them

[instructions] holds only for a harness whose contract says it takes them, which Link Harness does; a start refuses it for any other, rather than ignore it. lnk agent show --instructions prints the prompt as the model gets it. The rest of the spec is handed to every harness (Settings.spec), which takes what it can. Its sections come in the order of how often each changes, least first, so the provider's cache holds; sections 2 (model) and 3 (tools) have their places and no keys.

[tools] and [tool.<name>]

What holds for every tool, unless its own table says otherwise, and one tool's own, by its name.

answer

What's kept of a tool's answer, 1 KB to 16 MB, Link's "32 KB"; in [tool.<name>], the same for one tool.

timeout

How long a tool's call may take, at least 1 second; past it the model is told it didn't answer. Link's is "5m"; in [tool.<name>], the same for one tool. Waiting for you to allow it isn't counted: a call of a tool not Link's own has [connections] ask_wait beside it.

strangers

The tools a stranger's message may use, by the names the harness offers them; left out, none (Who May Talk to It).

enabled

In [tool.scheduler], [tool.run], [tool.file] and [tool.code]: whether Link starts the tool for the agent. false or left out, it doesn't: for the scheduler, no subagents or schedules, and nothing runs them. Link's is true.

[tool.memory]

keep, how long its session stays once no turn uses it ("10m"); max_age, how long its session lives at most ("1h"); and tokens, the most a search or a read gives, at least 100 (6000).

[tool.memory] model and notes

model is the embedding model it ranks by, qwen3-embedding; none, by words only, no model started. notes is the most the agent's notes may grow to, 64 B to 64 KB, "4 KB": remember refuses to write past it.

[tool.web] fetch

The most of a page one fetch gives, 1 KB to 1 MB; each part says where the next starts. Link's is "24 KB".

[tool.run] timeout and output

timeout is a command's call, "2m": the command is stopped a tenth before it, with all it started, so what it printed comes back. output is what's kept of each of a command's output and its errors, its start and its end, 1 KB to 16 MB, "16 KB".

[tool.run]'s background commands

How many background commands the run tool keeps, and for how long.

background and background_timeout

background is the most background commands at once, 0 to 64, Link's 4; 0, none. background_timeout is the longest a background command runs before it's stopped, 1s to 7d, Link's "1h".

background_output and background_keep

background_output is what's kept on disk of a background command's output, its end, 1 KB to 1 GB, "16 MB". background_keep is how long a background command's record and output stay once it ended and the agent was told, 1m to 365d, "1d".

background_per_day

The most background commands started in a day, each of whose endings starts a turn, 1 to 65535. Link's is 100.

[tool.scheduler]

The scheduler tool: the agent's schedules and subagents.

per_day

Messages its schedules and subagents send it a day, the day in its zone, from 1. It bounds how many messages agents send each other, and caps what the agent takes from each teammate a day (UTC). Link's is 100.

subagents and hops

subagents is subagents at work at once, from 1, Link's 5. hops is how deep a chain goes, from 1, each message sent by an agent on its own, Link's 8: a depth and not a count, as a recurring job's firings start again.

late

A firing missed asleep: run once on waking, or skip (a recurring one fires at its next time). Link's is run.

ask and zone

ask is whether task, schedule and cancel ask you first, Link's false. zone is its times' time zone: local (this machine's) or a zone's name (Europe/Paris), Link's local.

firing

How long it waits on a firing, a subagent's whole work, before giving up on it, 1s to 1d. Link's is "30m".

driver

What wakes its runner: service, the agent's bridge, which runs it for good (Link's), cron or address. In the foreground (lnk agent start --foreground), it runs beside the agent either way.

cron

The machine's calendar (launchd on a Mac, the user's crontab elsewhere), which starts it once a minute: lnk agent start puts the calendar's entry in place and lnk agent stop takes it away.

address

On a machine that runs the agent only while it answers: the scheduler tells the machine, at the address it gives, when the agent's jobs are next due whenever they change, and the machine wakes the agent then to fire them; nothing of the scheduler runs between.

address on your machine

lnk agent start gives no address, so it serves no scheduler for address, and says so. The bridge still runs, for the connections and the way in a firing reaches.

[goals], [storage] and [run]

How long /goal goes on, where each collection is kept, and how the agent runs on its machine.

[goals] turns and tokens

How long /goal pursues a goal on the agent's own turns, whichever comes first: turns, 1 to 1000, and tokens, at least 1000; Link's 10 and 1000000. Left out, there's no /goal.

[storage]

home, instructions, skills, memory, conversations and schedule: where it would keep each collection, a place's name, lowercase letters, digits and dashes, Link's "file" each (Storage).

A preference

It's a preference: the machine's [storage] has the last word (Specs). An older spec's log or compact reads as file.

[run] idle_after

How long the agent goes with no message, no turn and no background command before it stops, holding no process, memory or port, and starts again at its next message, at least 1s, or never. Link's is "5m".

Where it holds

Only where machine.toml's shared_bridge is on, since the bridge then listens for it, and for an agent whose harness speaks none of its connections itself (Security).

[run] files

The workspace directory, spelled --files on the command line. A supplied spec is loaded before this setting is read. Relative paths are resolved from the start's working directory; left out, it keeps its chosen workspace.

[run] let_sleep

Whether the machine may sleep while the agent runs, spelled --let-sleep on the command line. Left out or false, the agent keeps the machine awake; true allows the machine's own sleep policy to apply.

[connections] and [connection.<name>]

What holds for every connection, and one connection's own, by its plugin's name, with the same keys over [connections].

stream and pace

stream shows the answer as it's written, Link's true; false, once done. pace is how often it's shown again, over 0, Link's "1s".

pace and the platform's limits

Never more often than the platform documents a bot may write: Telegram once a second in a chat and every 3 seconds in a group, Slack every 1.2 seconds, and Discord its global 50 requests a second and its other rate limits as it answers them.

Told to wait

Told by the platform to wait, Telegram and Slack show nothing more until then, and only the finished answer waits and tries again.

activity

While the answer is shown as it's written, each tool it calls on a line above it (› memory search), the latest eight; the finished answer shows the answer alone. Shown where its harness tells its calls, as Link Harness does; link:personal turns it off. Link's is true.

groups

In a group, which of your messages it answers: mention (those that mention it or answer it), Link's, or never.

working and steered

A reaction while it answers, and on a message that joined an answer, where the connection has them; empty ("") is none, as in Link's [connections]. Of Link's connections only Slack marks a message, so they are refused for Telegram, Discord and Signal; Link's [connection.slack] has working = "eyes".

ask_wait

How long a question for you waits for your answer, a call of a tool that asks first or a page to open: Link's "10m", a second at least and a day at most. No answer in time is no, and a tool's call has its own timeout beside it. [connections]'s alone, since a question waits as long on every connection.

Feature switches

Each a feature's switch, off when left out, Link's "link" or true (Features and Profiles).

Which keys

[instructions] repository; [commands] help, status, create, stop, model, write, goal, resume, fork, rename, export, queue, steer, compact, ask, verbose and skills; [model] fallback; [connections] images, documents and voice; and [tool.file] find and diffs.