Skip to main content

Recommended programs and services

elanous runs on very little: Bun, git and one way to reach a language model. Everything else on this page is optional — but each one opens a part of elanous that is otherwise closed or runs in a weaker form. This page says what each program or service unlocks, what happens without it, and how to set it up on macOS, Linux and Windows (WSL2).

elanous doctor checks most of them on your machine and names what is still locked. See Doctor.

Where keys go

A service key is read from its environment variable, or from a file in ~/.cache/ named after the variable in lower case — for example ~/.cache/firecrawl_api_key for FIRECRAWL_API_KEY. The file needs only the key on one line. Keep it readable by you only (chmod 600).

At a glance​

What it unlocksWithout it
Bun, gitelanous itselfelanous does not start
A model subscription (ChatGPT via Codex, or another provider)Chat, the harness, every agentNothing thinks — there is no free model floor
GitHub CLI (gh)Pull requests, landing changesThe harness still works on a branch, but cannot open or merge PRs
ripgrep, Node.jsFast code search; the Codex CLIWeaker search; no Codex backend
GrokA second model, web search, a coding agent backendFewer models and agents to switch to
Firecrawl, TavilyFull-page crawl and better web searchA free search (DuckDuckGo + Jina) takes over
Chrome (or Chromium/Edge)Agents that look at and use web pagesBrowser tools say "Chrome unavailable"
Aside browserA browser agent backend and page checks through AsideThe default Chrome path is used
Claude CodeA coding agent backend on your Claude subscriptionOther backends
TailscaleThe web app on your phone, tablet and other computersThe web app works on this machine only
ObsidianThe Vault menu and saved notesAny Markdown folder still works
Telegram / Discord botsTalking to elanous and getting alerts on your phoneTerminal and web app only
LinearIssues arriving as tasksTasks come from Telegram, the web app and the terminal
ElevenLabsHigh-quality voiceFree voices (edge-tts, macOS say)
ffmpeg, ImageMagickVideo, audio and image stepsThose steps are skipped or fail

The base​

Bun and git — required​

The installer fetches Bun for you. git must already be there.

Setup
macOSxcode-select --install gives you git.
Linuxsudo apt-get install -y git unzip — Bun's own installer fails without unzip.
WindowsUse WSL2 and follow the Linux line. Native PowerShell is experimental — see Install.

A model — required​

elanous needs at least one way to reach a language model. The simplest is a ChatGPT subscription through the Codex CLI:

npm install -g @openai/codex # needs Node.js
elanous login openai-codex

Other providers (Grok, Anthropic, Gemini, OpenRouter) and how to mix them are in Providers and Codex subscription.

The harness uses gh to open, update and merge pull requests. It needs version 2.80 or later.

Setup
macOSbrew install gh
Linuxelanous doctor --fix --yes installs a current one. Do not use the distribution's apt package — it is too old.
Windows (WSL2)Same as Linux.

Then sign in once: gh auth login.

  • ripgrep (rg) makes code search fast for agents. macOS brew install ripgrep · Debian/Ubuntu sudo apt-get install -y ripgrep · Fedora sudo dnf install ripgrep.
  • Node.js is needed only because the Codex CLI runs on it. macOS brew install node · Debian/Ubuntu sudo apt-get install -y nodejs npm.

Build tools and Python — optional​

  • A C/C++ compiler and make let elanous build its native terminal module. On Linux it falls back to Bun's built-in terminal support without them. macOS xcode-select --install · Debian/Ubuntu sudo apt-get install -y build-essential · Fedora sudo dnf install gcc-c++ make — then elanous doctor --fix --yes.
  • Python is used by a few skills. elanous python setup --yes prepares an environment for them.

Seeing the world — search, crawl and the browser​

These are the programs and services elanous uses to read the web. None is required: a free search tier (DuckDuckGo for search, Jina Reader for pages) always works without a key. The paid services give fuller pages and better results.

Firecrawl — full pages and whole sites​

Crawls and scrapes pages (including pages that need JavaScript), maps whole sites, and searches developer documentation. Also used for web search.

  • Key: FIRECRAWL_API_KEY (or ~/.cache/firecrawl_api_key).
  • Without it: search and page reading fall back to the free tier.

A search engine built for agents.

  • Key: TAVILY_API_KEY (or ~/.cache/tavily_api_key).
  • The crawl skill uses it as soon as the key is there. The chat's built-in web search uses it only after elanous config set webSearch.tavily.enabled true.
  • Without it: the free tier.

Jina — page reader​

Works without a key. A key (JINA_API_KEY) only raises the rate limit.

Grok (xAI) — a model, a search engine and an agent​

Grok does three jobs in elanous: another model for chat and the harness, a web-search provider that also covers X and Reddit, and a coding agent backend (elanous agent-mission mission --backend grok).

  • Either a key — XAI_API_KEY (or ~/.cache/xai_api_key) — or the grok CLI signed in to your xAI account.
  • Without it: other models and backends; X and Reddit coverage in search is thinner.

Apify — bulk posts from X​

Collects many posts at once for analysis. Key: APIFY_TOKEN. There is no free replacement for this one job.

Chrome, Chromium or Edge — agents that use web pages​

Agents use a real browser through the Chrome DevTools Protocol to open pages, read what is on screen and click through them. The web app's self-checks use it too.

What elanous finds
macOS/Applications/Google Chrome.app
Linuxgoogle-chrome, chromium or the snap package
Windows (WSL2)Chrome or Edge installed on Windows — no Linux browser needed

Point elanous at another build with ELANOUS_CHROME_BIN. Browsers such as Arc, Dia or Aside can be driven the same way while they are open, but not started by elanous.

Aside browser — a browser agent​

With the Aside browser's command-line tool (aside) on your PATH, elanous can hand a whole task to Aside (elanous agent-mission mission --backend aside) and check pages through an Aside session. Without it, the Chrome path above is used.

Agents you can hand work to​

elanous agent-mission runs another coding agent in a terminal that elanous watches and you can open from the web app (Terminal). Each backend uses your own subscription for that tool — elanous removes API keys from its environment so a subscription is not silently billed as API use.

BackendProgram to install and sign in
codex (default)Codex CLI — npm install -g @openai/codex, then codex login
claudeClaude Code — install it and sign in with your Claude account
grokThe grok CLI from xAI — grok login
geminiGoogle's Antigravity CLI (agy) — sign in once by hand
asideThe Aside browser CLI (aside)

Reaching elanous from anywhere​

Tailscale — the web app across your devices​

Tailscale connects your own computers and phones over a private network. With the web app shared from an always-on Elanous host, you can open the same workspace from a phone or tablet away from home, or from another computer on your tailnet. A headset or glasses can use it too if they have a browser that can open the web app. This is useful for checking work and reaching the host's web app remotely; it does not install Elanous on each device or make the host redundant.

Where this connects: This sharing setup provides a remote-access path to the web app. The pwa share enable step does not add content to the absorption loop, adaptive grounding, daily external trend watching or marketing; those are separate workflows.

Set it up in this order:

  1. Install Tailscale on the Elanous host and each device from tailscale.com/download — the macOS app bundle or brew install tailscale both work. elanous looks for the CLI in that order: the macOS app bundle first (/Applications/Tailscale.app/Contents/MacOS/Tailscale), then /opt/homebrew/bin (Homebrew), then your PATH.

  2. Sign in on each device and join the host's tailnet. Keep Tailscale running on the host and confirm it is connected.

  3. If another person will use their own account, invite them to the tailnet from the Tailscale admin console → Users → Invite external users: by email, or by generating and sharing an invite link. The invited person opens the link, signs in with their own account, and the devices they connect join your tailnet. Inviting needs an Owner, Admin or IT admin role; see Tailscale's invite guide for the current procedure.

  4. On the host, enable sharing for the web app:

    elanous nexus pwa share enable
  5. Open the shared URL from a browser on a signed-in phone, tablet or other device. See The web app.

Check the host's Tailscale connection and its MagicDNS name with this read-only command:

tailscale status --json

The host should report BackendState as Running; Self.DNSName identifies its MagicDNS name. Check the active Serve configuration independently with:

tailscale serve status --json

elanous nexus pwa share enable forwards the Nexus web app through Tailscale Serve's TLS-terminated TCP mode on the daemon's port, mounted under /app/showroom/. A successful command prints the share URL with your tailnet's MagicDNS name for the host; use that exact URL on another device in the same tailnet. The port is part of the URL. In the Serve status JSON, find TCP["<port>"] using the port printed in that URL; its TCPForward should target localhost:<port> and TerminateTLS should name the host. If sharing fails, confirm that Tailscale is running and that the Nexus daemon has a known port, then retry the command. These status checks do not by themselves prove another device can open the app.

One macOS quirk to know when scripting these checks: the app-bundle binary behaves as a GUI app when its environment is empty — for example when a daemon (with no TERM) runs the check — prints "The Tailscale GUI failed to start", and exits 0 with no JSON, so a status check reads as failure while Tailscale itself is fine. Set TAILSCALE_BE_CLI=1 in the environment you give the CLI to pin command-line behavior; elanous does this for its own checks (measured 2026-09-27).

Tailscale is optional: without it, the web app remains available on the host but is not shared through this tailnet path. The documented benefit here is remote access to the web app; no increase in automation or host availability has been measured for this guide.

Telegram and Discord​

Talk to elanous and receive alerts from your phone.

elanous onboarding telegram # asks for the bot token from @BotFather
elanous onboarding discord

You can also connect both from the web app's Settings. See Telegram and Discord.

Linear​

Issues in Linear arrive as elanous tasks. See Tasks and intake.

Notes, voice and media​

Obsidian​

The web app's Vault menu reads and edits an Obsidian vault, and saved summaries land there. Any folder of Markdown files works; Obsidian itself only makes browsing nicer. Choose the folder with elanous onboarding obsidian or in the web app's Settings. See Vault.

Voice​

What it givesSetup
ElevenLabsNatural speech and streaming speech-to-textELEVENLABS_API_KEY
edge-ttsFree speechpip install edge-tts, and sox
macOS sayFree speech, macOS onlybuilt in

Without ElevenLabs, elanous uses edge-tts and then say — whichever is actually installed (edge-tts counts only when both edge-tts and sox are found). On Linux there is no say, so install edge-tts and sox if you want speech without a paid key.

Video, audio, images and text in pictures​

ProgramUsed forSetup
ffmpegVideo and audio stepsmacOS brew install ffmpeg · Linux sudo apt-get install -y ffmpeg
ImageMagick (magick)Image stepsmacOS brew install imagemagick · Linux sudo apt-get install -y imagemagick
soxAudio conversion (and edge-tts)macOS brew install sox · Linux sudo apt-get install -y sox
UpstageReading text from images and documentsUPSTAGE_API_KEY; without it, a vision model reads them
SupadataYouTube transcriptsSUPADATA_API_KEY

Check what you have​

elanous doctor

prints every key it found (never the value), every program it looked for, what you can and cannot do yet, and how to fix each gap. elanous doctor --fix --yes installs what it safely can.