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: configuration

Reference: configuration

Huskarl has no configuration file for the daemon. Most things are set per bot in the app (see Settings). What is left is files under ~/.huskarl and a few environment variables.

Environment variables

The daemon reads the variables when it starts, unless stated otherwise. For the app's login item you do not set them yourself. Most are for development and tests.

Locations

Variable Default What
HUSKARL_HOME ~/.huskarl where everything is stored. Read by both the app and the daemon
HUSKARL_SOCKET <home>/run/huskarld.sock the socket. Unix sockets are limited to 104 bytes on macOS, so a deep HUSKARL_HOME may need this

The daemon

Variable Default What
HUSKARL_LOGIN_PATH on off: keep the PATH the daemon was given, instead of taking it from the login shell
HUSKARL_LOG_TO_FILE off set: stdout and stderr go to <home>/logs/huskarld.log. The app's login item sets it
RUST_LOG info log level (env_logger)
HUSKARL_TICK_SECONDS 20 how often the scheduler looks for routines and tasks
HUSKARL_WEBHOOK_PORT 47811 the port for the routines' webhooks on 127.0.0.1
HUSKARL_BROWSER_IDLE_SECONDS 600 how long a bot's browser can sit unused before it is closed
HUSKARL_CHROME first one found the Chromium program the bots' browsers use
HUSKARL_NOTIFY on off: no system notifications (ntfy is not affected)
HUSKARL_VAULT the Keychain memory: logins in memory instead of the Keychain. For tests
HUSKARL_FELAGI_TICK_MS 2000 the tick of the Félagi thread
HUSKARL_LOCAL_MODEL huskarl-local beside the daemon the on-device model's program; off for none
HUSKARL_LISTEN huskarl-listen beside the app the program that turns speech into text for the chat box. Read by the app
HUSKARL_FOLDERS ~/Huskarl where the folders routines watch are made
HUSKARL_UNDO_SECONDS 30 how long an approved mail, payment or deletion waits for undo. 0: it goes at once

The app

Variable Default What
HUSKARL_UPDATE_URL https://elyracode.com/huskarl/latest.json where the app looks for a newer version
HUSKARL_AWAY_SECONDS 600 how long the window must have been in the background before "While you were away" is shown

Mail

Variable What
HUSKARL_MICROSOFT_CLIENT_ID the Entra app's client id. Used instead of microsoft.json
HUSKARL_MICROSOFT_TENANT tenant, default common
HUSKARL_MICROSOFT_LOGIN login server, default https://login.microsoftonline.com. For tests
HUSKARL_GRAPH_API Graph, default https://graph.microsoft.com. For tests
HUSKARL_GOOGLE_CLIENT_ID Google's client id. Used instead of google.json
HUSKARL_GOOGLE_CLIENT_SECRET Google's client secret
HUSKARL_GOOGLE_AUTH_URL default https://accounts.google.com/o/oauth2/v2/auth. For tests
HUSKARL_GOOGLE_TOKEN_URL default https://oauth2.googleapis.com/token. For tests
HUSKARL_GCAL_API Google Calendar, default https://www.googleapis.com. For tests
HUSKARL_GMAIL_API default https://gmail.googleapis.com. For tests
HUSKARL_GITHUB_API default https://api.github.com. For tests
HUSKARL_LICENCE_API https://elyracode.com/huskarl/licence
HUSKARL_WORKSPACE_MCP Elyra Workspace's gateway, instead of the port in ~/.elyra/state.db. For tests

Agents and tests

Variable What
HUSKARL_AGENT_ELYRA a program other than Elyra that speaks Elyra's RPC protocol, for example scripts/mock-agent/elyra_rpc.py. Variables that start with MOCK_ are passed on to it
HUSKARL_AGENT_CLAUDE a program other than claude. MOCK_ variables are passed on
HUSKARL_AGENT_GROK a program other than grok
HUSKARL_FAILPOINT crash the daemon at a given step: after_step_begin, before_step_finish, after_propose, after_claim or after_execute. For the kill matrix
ELYRA_CODING_AGENT_DIR where your Elyra keeps its login, default ~/.elyra/agent

The scripts

Variable Default Used by
HUSKARL_TEAM 52AT44QFCM bundle.sh, release.sh: which Developer ID team it is signed for
HUSKARL_IDENTITY first Developer ID for the team bundle.sh, release.sh: the signing identity
HUSKARL_NOTARY_PROFILE Knut Horne release.sh: the profile in the Keychain for notarytool
HUSKARL_DOWNLOAD_BASE https://elyracode.com/huskarl release.sh: the address in latest.json

Files under ~/.huskarl

Path What
huskarl.db the SQLite database, with -wal and -shm next to it. Only the daemon writes
run/huskarld.sock the socket between the app and the daemon (0600, in a folder with 0700)
logs/huskarld.log the daemon's log, from the login item, the developer LaunchAgent, and when the app starts the daemon itself
bots/<id>/ the bot's own folder, the only place the agent may write
bots/<id>/home/ HOME for Elyra and Grok Build
bots/<id>/work/ the working folder, with tmp/ (TMPDIR)
bots/<id>/agent/ Elyra's folder: settings.json, links to auth.json and models.json, and sessions/
bots/<id>/instructions.md the system prompt for Elyra, written at every start
agents/claude/ Claude Code's login for Huskarl (CLAUDE_CONFIG_DIR)
agents/grok/ Grok Build's login for Huskarl (GROK_HOME): auth.json and config.toml, which Huskarl writes at every start
browsers/<bot>/ the Chrome profile of the bot's browser: logins and cookies
testpost/ the practice mailbox: inbox.json, drafts.json and outbox.json
microsoft.json {"client_id": "…", "tenant": "common"}. See Mail
google.json {"client_id": "…", "client_secret": "…"}
felagi.json {"server", "daemon_id", "name"} for Félagi. The token is in the Keychain
app.json the app's appearance, and the language ("language": "en", the default, or "nb"). See Settings
bin/huskarld the copy the developer LaunchAgent runs

The daemon reads microsoft.json, google.json and felagi.json when it starts (felagi.json also while it runs).

In the database

The phone notifications (server and topic for ntfy) are in the settings table under the key ntfy. The language for what the daemon writes for people (en or nb) is under the key language; the app sets it when you choose a language. Everything about the bots is in the other tables. See Architecture.

In the Keychain

Service Account What
no.huskarl.google the email address refresh token for Gmail
no.huskarl.microsoft the email address refresh token for Outlook
no.huskarl.felagi the server address the daemon token (fdt_…)

Outside ~/.huskarl

Path What
~/Library/LaunchAgents/no.huskarl.daemon.plist the developer LaunchAgent. Removed by the packaged app
Huskarl.app/Contents/Library/LaunchAgents/no.huskarl.huskarld.plist the app's login item