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
Reference: CLI

Reference: CLI

huskarld is the daemon. With no arguments, or with serve, it runs. The other commands are a small client for development and tests: they connect to the socket, say hello, do one thing and exit. The daemon must be running, or you get huskarld is not running (<socket>). The exception is verify-audit.

<bot> is the bot's id, as huskarld bots shows it (a UUID). The name does not work.

In the app bundle the program is at /Applications/Huskarl.app/Contents/MacOS/huskarld. From source it is target/debug/huskarld or target/release/huskarld.

The daemon

huskarld / huskarld serve

Runs the daemon in the foreground.

  • Creates ~/.huskarl and ~/.huskarl/run with mode 0700, and the socket with 0600.
  • If a daemon is already running on the socket, it exits with huskarld is already running (<socket>).
  • Takes PATH from the login shell first (see Agents), unless HUSKARL_LOGIN_PATH=off.
  • With HUSKARL_LOG_TO_FILE set, stdout and stderr are written to ~/.huskarl/logs/huskarld.log. Otherwise the log goes to stderr. RUST_LOG sets the level (default info).
  • Stops on Ctrl-C or SIGTERM, stops the agents and the browsers, and removes the socket.

Bots and messages

huskarld bots

Lists the bots: id, name, status and last line.

huskarld new <name> [role]

Creates a bot with Elyra as its agent and prints the id.

huskarld send <bot> <text>

Sends a message and prints the reply as it arrives. On stderr:

  • · <tool> <arguments> for each tool call
  • ⏸ waiting for approval [<id>]: <title> for each proposal
  • note: … and error: … for notices. An error exits
  • — done in 4.2s, $0.0045 (or failed) when the turn is over.

huskarld suggest <description>

Asks the designer for a proposed bot based on the description, and prints it as JSON (bot and, if any, routine). Creates nothing.

Proposals

huskarld actions

Lists the proposals that are waiting, across bots, newest first: id and title, and below that the subject and the text with | in front of each line.

huskarld approve <id>

Approves a proposal and prints the status and the result, for example Done: … or Failed: …. A mail, payment or deletion waits for undo first (see Approvals and rules), and then it prints:

Scheduled: goes at 14:02:31. `huskarld undo <id>` takes it back.

huskarld reject <id>

Rejects a proposal. Prints Rejected: .

Both give the proposal has already been decided for a proposal that is no longer waiting.

huskarld replay <run|proposal> [--model <model>] [--instructions <file>]

Does a finished run again as a rehearsal: reads come from what the run read, nothing is carried out, and the thread shows what differs. Without options it uses the bot's settings as they are now. Prints Replaying. The comparison comes in the bot's thread when it is done. See Approvals and rules.

huskarld export <bot> [file]

Writes the bot as a recipe: role, instructions, rules, budgets, sites and routines, never memories, logins or webhook keys. Without a file, prints it. See Recipes.

huskarld import <file> [--yes] [--live]

Shows what the recipe's bot asks for beyond the defaults, and its instructions. With --yes it makes the bot, in rehearsal unless --live.

huskarld status

What waits for you and which bots are working, in a sentence or two, in your language: what Siri reads aloud.

huskarld ask <bot> <text> / huskarld ask --stdin

Sends the bot a message, waits for its turn to end, and prints only its answer (and how many proposals it left waiting). The bot is found by name, or the start of one. With --stdin, it reads "Bot name: text" from stdin, as the Siri shortcut gives it.

huskarld why <id>

Why the bot proposed it: what started the run, what you wrote, the calls it made first, what it said, and the rule that decides. See Approvals and rules.

huskarld undo <id>

Takes back an approved proposal that has not gone yet. Prints Rejected: Taken back before it went., or the error It has gone already, or was taken back.

Routines

huskarld routines

Lists all routines: id, the name in «…», when it runs, (paused) if it is paused, and the next run (next 2026-10-19 07:00, or -).

Connections

huskarld plan / huskarld activate / huskarld release-mac

The plan this Mac is on, as JSON. activate reads a licence key from stdin and activates it on this Mac; release-mac gives its seat back. See Plans and prices.

huskarld connect <bot> <gmail|outlook|teams>

Starts the sign-in and prints the address to open in your browser. The daemon waits 10 minutes for you to finish, and the thread is told how it went. See Mail.

huskarld connect <bot> github

With a token on stdin (pbpaste | huskarld connect <bot> github): tries it on GitHub, keeps it in the Keychain, and prints ok, or why GitHub refused it. Without one, prints where to make a token. See GitHub.

huskarld connect <bot> workspace

With the client Elyra Workspace paired on stdin (pbpaste | huskarld connect <bot> workspace): the token alone, or the configuration Workspace copies. Tries it, keeps the token in the Keychain, and prints ok, or why not. See Elyra Workspace.

huskarld connect <bot> felagi

With a Félagi API token on stdin: the .env lines Félagi hands back, or the fat_ token alone. Prints ok, or why not. See Félagi.

huskarld disconnect <bot> <gmail|outlook|teams|github|workspace|felagi>

Disconnects. The login is deleted from the Keychain when no bot uses the account. Prints ok.

huskarld check <bot>

Tries the bot's mailbox now: lists one message and searches for new mail in the last 24 hours. Prints one line per mailbox, for example Gmail: ok (3 mails in the inbox in the last day), or no mail connection.

Memory

huskarld remember <bot> <text>

Adds a memory, as if you had written it in the settings. Prints ok.

huskarld accept-memories <bot>

Accepts all of the bot's memories that were held back after outside text. Prints ok.

Rules and budgets

All print ok.

huskarld budget <bot> <tokens|none>

Tokens per run. none removes the limit (see Approvals and rules).

huskarld daily <bot> <usd|none>

Daily budget in dollars, for example 2.50. none removes the limit (see Approvals and rules).

huskarld allow-domain <bot> <domain>

Adds a rule: mail where every recipient is on the domain is sent without approval and logged. *.firma.no includes subdomains.

huskarld require-approval <bot> <class>

Adds a rule: the class requires approval. The classes are read, draft, internal and send. An unknown class gives unknown class <class> (read, draft, internal, send).

huskarld confidential <bot> <a,b,…|none>

What is confidential to the bot: senders, domains or words in the subject. See Approvals and rules.

huskarld delete <bot>

Puts the bot away: stopped, routines paused, mail disconnected, out of the list. Its thread and audit trail are kept.

huskarld mail-alias <bot> <address|none>

Gives the bot its own address: it sees and handles only mail sent to it. none gives it the whole inbox again. See Mail.

huskarld rehearsal <bot> on|off

Turns rehearsal on or off: the bot reads for real, and everything else is only written down. See Approvals and rules.

huskarld browser-domains <bot> <a,b,…>

Sets the sites the bot's browser may open, separated by commas. Replaces the list. An empty string ("") removes the browser. See Browser.

Notifications

huskarld ntfy on [server]

Turns on notifications on your phone, with https://ntfy.sh or the server you give. Prints server/topic.

huskarld ntfy chat [on|off]

Lets the phone write to the bots through the reply topic, or not; without on or off, says which. See Notifications and menu bar.

huskarld ntfy off

Turns them off. Prints off.

huskarld ntfy / huskarld ntfy status

Prints server/topic, or off.

Félagi

huskarld felagi connect <server> <fdt_token>

Connects the daemon to a Félagi workspace. See Félagi.

huskarld felagi status / huskarld felagi

Prints one of not connected, connected to <server> (workspace <slug>), N task(s) in hand or <server>: not connected: <error>.

huskarld felagi disconnect

Disconnects and deletes the token.

Audit

huskarld verify-audit

Walks the hash chain in the audit log and prints N entries, chain intact, or fails with the audit log is broken at entry <id>. Reads ~/.huskarl/huskarl.db directly. Does not need the daemon.

Errors

  • An unknown command gives unknown command <name>.
  • Too few arguments give the usage, for example usage: huskarld send <bot> <text>.
  • If the client and the daemon speak different protocols, the daemon replies the app speaks protocol X, this daemon Y; update the older one.