Skip to main content

Saggar links

A Saggar link proposes one action to the Mac app. The app shows its source and the complete request, then waits for the user to confirm. Opening a link never changes settings, creates a session, runs a prompt, or writes a skill by itself.

The canonical shape is:

https://saggar.marginalutility.dev/open/v1/{action}?{parameters}

v1 supports five actions:

ActionParametersResult after confirmation
navigateOptional paneOpens Saggar or a Settings pane.
settingsOne or more supported setting keysShows and applies an exact before-and-after diff.
sessionname, commandAdds an enabled session preset.
promptprompt, provider, model, optional titleOpens an agent session and runs the visible prompt.
skillid, providerInstalls a skill shipped inside this Saggar build for one provider.

Supported setting keys are appFontScale, optionAsMetaKey, terminalFontSize, and terminalScrollback. Links can't change remote access, accounts, credentials, grants, or secrets.

Add a button to a docs page

Import the shared component, then pass typed parameters:

import SaggarLink from '@site/src/components/SaggarLink';

<SaggarLink
action="session"
parameters={{name: 'Review', command: 'codex'}}
>
Add the Review session
</SaggarLink>

Open Provider settings

Use a button label that names the action. Don't use a generic “Confirm” or “Continue” label.

Trust and limits

Universal links delivered from the public Saggar site appear as official. The browser fallback uses saggar:// and always appears as unverified, even when it claims to come from the public site. Both paths require the same native confirmation.

The parser rejects unknown actions, duplicate parameters, unsupported versions, and oversized URLs. Prompts are limited to 4,000 bytes, commands to 1,000 bytes, and the whole URL to 8,192 bytes. Links can't contain arbitrary skill files or direct shell-execution actions.