Elyra
Elyra The coding agent eTerm The terminal that knows where each command ends Huskarl AI colleagues on your own Mac Starf An activity monitor for Apple silicon that never invents a number etrans An SSH and SFTP client for macOS Elyra VM Virtual machines for macOS, Linux and Windows on your Mac Litr A small, native web browser for macOS Notr A notebook for macOS e The native code editor Elyra Grove Native local development environment Askr The real server for Laravel & PHP Elyra Framework Rust + Svelte 5 framework for desktop apps Elyra Conductor Local project conductor Refr Local-first PDF workspace for macOS Elyra Workspace A desktop workspace for coding agents Elyra SQL Server MySQL-compatible SQL server in Rust Elyra Félagi Agents as teammates on one board Elyra SQL Client Native desktop SQL workbench Elyra SQL Anywhere Replication-ready SQL engine Elyra Sjá SEO & GEO workspace for macOS Elyra DataGrid Server-driven data grid for Laravel
Release notes
Changelog
Elyra

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 " in place of the thread. The fields, in order:

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 (or HUSKARL_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.json describes (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