Features and Profiles

What an agent can do, each feature by name, switched by its own keys of the agent spec, and Link's personal and coding profiles, each a line that makes an agent one kind.

Every feature

A feature is on where its keys turn it on, and off where a key is left out, "none", "never" or false. Link's spec enables its general features but leaves scheduler, run, file and code tools off. A key of [connections] is on too where a connection's own table turns it on ([connection.slack] images).

Read at each message

Link Harness reads its features from the spec at each message: the prompt's sections, its commands, the images and documents it's sent, and its fallback. Link starts the tools as the spec says, at each start.

Its prompt and commands

What the agent is told, and what it does with a command of yours.

repo-instructions

The repository's AGENTS.md, else CLAUDE.md, in its prompt: [instructions] repository.

persona and skills

Who it is and who you are, apart from any task, [instructions] persona or owner, and each skill's name and what it's for, [instructions] skills.

commands

A message of yours that runs /help, the chat's (/chat:status, /chat:create, /chat:stop, /chat:resume, /chat:fork, /chat:rename, /chat:export, /chat:queue, /chat:steer, /chat:compact, /chat:ask, /chat:verbose), the model's (/model:show, /model:list, /model:set), the skills' (/skill:list, /skill:<name>) or /skill:write: [commands] help, status, create, stop, resume, fork, rename, export, queue, steer, compact, ask, verbose, model, skills and write.

goals

/chat:goal: a goal it pursues after each answer until it holds, as many turns as [goals] turns lets it, while [commands] goal is on.

model-fallback

lnk agent start --fallback's model, for a turn its own can't answer: [model] fallback.

Its messages

What of a message it takes, and how its answer is shown.

images and attachments

A message's images, [connections] images, and its documents, [connections] documents.

voice and groups

A message's voice notes, heard as their words by [model.<provider>] transcribe, [connections] voice; and group chats, answering when mentioned, [connections] groups.

streaming and activity

An answer shown as it's written, [connections] stream, and with activity too, each tool it calls shown above the answer being written, as it calls it.

Its tools

Link's tools are each a feature or more. Scheduler, run, file and code start off in Link's defaults and both profiles. Add each explicitly with lnk agent tool add <name> or set its [tool.<name>] enabled = true opinion.

subagents, schedules and proactive

The scheduler: subagents, schedules and messages it sends first, [tool.scheduler] enabled.

shell, file-read and file-edit

The run tool, [tool.run] enabled, and the file tool, reading and editing, [tool.file] enabled.

code-search, diffs and lsp

The file tool's find, [tool.file] enabled and find; a write or replace answered with its diff, [tool.file] enabled and diffs; and the code tool's language servers, [tool.code] enabled.

The profiles

A profile is a spec Link ships between its own and yours. One line picks it:

extends = "link:coding"       # an agent working in a repository

link:personal

Turns off repo-instructions; activity; shell, the run tool; and the file and code tools: file-read, file-edit, code-search, diffs and lsp.

link:coding

Turns off persona, your profile with it, and groups, for an agent working in a repository.

A new agent

A new agent is a personal agent: lnk agent create and the first lnk agent start save concrete personal defaults under [behavior] in Config/agent.toml, with all built-in tools off. There is no generated extends pointer. Reusable standalone specs may still select a profile with --spec.

Turn one back on

A profile only turns off what its kind of agent has no use for, so your spec can turn any of it back on, a key at a time:

extends = "link:coding"

[instructions]
persona = "instructions/persona.md"   # a coding agent with a persona

Which profile set a key

lnk agent show --opinions marks each key a profile set as Link's coding profile's. extends = "link", or none, is Link's spec alone, and "none" is nothing beneath yours.

What a harness honors

Each harness's contract lists the features it honors, each as the spec says or its own way (the harness protocol). lnk agent start refuses a spec whose own keys, or its profile's, turn on a feature its harness doesn't honor, naming the feature and its key, before anything starts. A feature Link's spec alone turns on is never refused: the harness does what it can of it.