Settings
Huskarl has two kinds of settings: the bot's, behind the gear in the thread's top bar, and the app's, in a window of its own with ⌘,.
The bot's settings
The gear (Settings) in the top bar opens "Settings for
| Field | What |
|---|---|
| Name | the bot's name |
| Role | one line about what it is for |
| Instructions | what it should do, and what it must never do |
| Agent | Elyra, Claude Code or Grok Build, with the status of each and Connect Claude Code / Connect Grok Build. See Agents |
| Can give tasks to other bots (Chief) | On or Off. See Chief |
| Confidential | Senders, domains or words in the subject that are confidential: a run that has read such mail sends nothing outside your domain unasked. See Approvals and rules |
| Its own address | An address such as you+expenses@company.com: the bot sees and handles only mail sent there. Empty: the whole inbox. See Mail |
| Rehearsal | On or Off. It reads for real and only writes down the rest. See Approvals and rules |
| Model | sent to the agent. Empty: the agent's default model. Below the field is a picker with the models the agent offers |
| Connections | Outlook / Microsoft 365, Gmail, Microsoft Teams, GitHub, Elyra Workspace and Félagi, with Connect and Disconnect. GitHub, Elyra Workspace and Félagi take a token pasted in their field. See Mail, GitHub, Elyra Workspace and Félagi |
| Memory | what the bot remembers, with Accept, Delete and Add. See Memory |
| Phone notifications (all bots) | Turn on and Turn off. See Notifications and menu bar |
| Tokens per run | new bots have 1 000 000 |
| Daily budget in $ | with what has been spent today. New bots have no limit |
| What the bot may do without asking | Allow, Allow and log or Needs approval for Read, Draft, Change internally and Send. Finance and Delete and publish: "Always needs approval" |
| Mail to these domains is sent without approval (logged) | for example firma.no, *.firma.no |
| Sites the bot may open in its own browser (with subdomains) | empty: no browser. See Browser |
The budgets and the policy are explained in Approvals and rules.
What is saved when
- Export as recipe… saves the bot to share, without its memories or logins. See Recipes.
- Delete bot… asks once more ("Click again to delete «Inbox»"), then puts
the bot away: its run stops, its routines are paused, its mail is
disconnected (the login leaves the Keychain when no other bot uses it), and
it is gone from the list. Its thread, proposals and audit trail stay in the
database.
huskarld delete <bot>does the same. - Save saves name, role, instructions, agent, Chief, rehearsal, model, budgets, policy, domains and sites. Cancel leaves everything as it was.
- Connections, memory and phone notifications take effect as soon as you press them, without Save.
If you clear Model, Tokens per run or Daily budget in $, the value is removed: the agent uses its default model, and there is no limit.
If something is wrong, the form says what and does not save: "«abc» is not a
number of tokens", "«2,5x» is not an amount", "«firma» is not a domain",
"«…» is not a website". Tokens can be written with spaces or underscores
(1 000 000), and amounts with a comma or a period and optionally $. An @
in front of a domain is removed.
Policy, budgets and sites apply from the next tool call. Name, role, instructions, agent and model apply the next time the agent starts. See Agents.
The same can be set from the terminal: budget, daily, allow-domain,
require-approval and browser-domains. See Reference: CLI.
The app's settings (⌘,)
Settings… in the Huskarl menu, or ⌘,, opens a window of its own. The sections are on the left. Everything is saved as soon as you change it. ⌘, or Esc closes the window.
Appearance
Language: English (the default) or Norsk. It is for the window and for what Huskarl writes to you, and it applies at once: the window redraws in the new language, and the daemon is told on a connection of its own. From then on, what the daemon writes for people (notices in the thread, proposal titles, notifications, also on your phone) is in that language. Text already written stays as it was; it is not rewritten. What the agents read (prompts, tool descriptions, results) is always English, whatever you choose.
The app keeps the choice in ~/.huskarl/app.json and sends it to the daemon
each time the window connects. The daemon keeps its own copy in the database,
so routines that run while the window is closed write in the same language.
Theme: pick a theme, or let Huskarl follow macOS.
| Theme | |
|---|---|
| Automatic | Light by day, Tokyo Night by night – like macOS |
| Light | Clean and light, as Huskarl has always looked. The default |
| Tokyo Night | Deep navy with neon accents |
| Nord | Arctic, muted and calm |
| Material | Slate grey with teal |
| Darcula | The JetBrains classic in grey |
Typography:
- Font: System, or one of Inter, SF Pro Text, Helvetica Neue, Avenir Next, IBM Plex Sans, Source Sans 3, Geist, Roboto, Open Sans, Lucida Grande and Verdana. The code fonts can also be chosen here. Only installed fonts are shown.
- Code font: Menlo (the default), Monaco, SF Mono, JetBrains Mono, Fira Code, Cascadia Code, Source Code Pro, IBM Plex Mono, Hack, Iosevka, Geist Mono, Berkeley Mono, Roboto Mono, Ubuntu Mono, Inconsolata or Courier New, if installed.
- Size: − and +, from 11 to 22 pt. The default is 16.
A preview shows the text and the code font as they will look.
General
Keep the Mac awake for routines while it is on power, off to begin with.
When it is on, the daemon keeps caffeinate -s running, so the Mac does not
fall asleep by itself while it is plugged in and routines can run at night.
The display may still sleep, on battery the Mac sleeps as usual, and a closed
MacBook sleeps anyway. It is kept in the daemon, so it holds after a restart,
and caffeinate ends with the daemon. See
Routines.
Apple Intelligence: where the Mac has Apple's on-device model turned on,
Huskarl uses it, on by default, to suggest bots and to put long answers in a
line or two in notifications (a routine that finished, an answer to the
phone). The whole answer stays in the thread. Nothing leaves the Mac; the bots
themselves still run on the agent you chose. Without Apple Intelligence it
says so, and Huskarl does as before. The model runs in huskarl-local, a small
program in the app, built with Swift when the app is built.
Siri: see Notifications and menu bar.
Plan
The plan this Mac is on, the licence key field, Activate, Release this Mac and a link to elyracode.com/huskarl. See Plans and prices.
Statistics
The last 30 days per agent and model. See Search and statistics.
About Huskarl
The version, and where things are:
- Data:
~/.huskarl(orHUSKARL_HOME) - Daemon: the socket,
~/.huskarl/run/huskarld.sock - Appearance:
~/.huskarl/app.json
Below that, Updates. Huskarl looks for a newer version when the app starts
(and when you open About Huskarl, or press Check for updates), in
latest.json from the release. When there is one, the sidebar says "Huskarl
0.5.0 is ready", and Install 0.5.0 and restart fetches it and installs it
only after checking that:
- the zip is the one
latest.jsondescribes (its SHA-256), - its signature holds, and it is signed by the same Developer ID team,
- macOS accepts it (it is notarized),
- it is the version it says.
Then the app is swapped in place, the daemon restarted and the window opened
again. If any check fails, nothing is changed and the reason is shown.
HUSKARL_UPDATE_URL points to another latest.json. A build run from cargo
does not look.
~/.huskarl/app.json
The app stores the appearance itself. It is about this Mac's window, not the
bots, so the daemon has no part in it. The one exception is language: the app
passes it on to the daemon, which keeps its own copy (the key language in the
settings table of the database).
{
"theme": "Default Light",
"ui_font": "",
"mono_font": "Menlo",
"font_size": 16.0,
"language": "en"
}
| Field | What |
|---|---|
theme |
the name of a theme, or Automatisk |
ui_font |
empty: the system font |
mono_font |
the font for code and fixed-width text |
font_size |
11–22. A value outside is set to the nearest limit |
language |
en (the default) or nb. An unknown value is English; no, nn, nb-no and norsk also mean Norwegian |
Fields that are missing get their default value.
Keyboard
| Key | What |
|---|---|
| ⌘N | new bot |
| ⌘F | search |
| ⌘⇧A | the approval queue |
| ⌘↵ | approve the top item in the queue |
| ⌘⌫ | reject the top item in the queue |
| ⌘, | the app's settings (and close them again) |
| Esc | close the app's settings |
| ⌘Q | quit the app (the bots keep going) |
| ↵ | send the message |
| ⇧↵ | new line in the message |