Channels
How Artemis connects to the outside world.
Most AI setups trap you in a single interface. Artemis separates the "brain" (the core agent) from the "mouth" (the channels).
They all connect back to the central Gateway via WebSockets or REST, which means they share the same memory, the same tool registry, and the same context.
CLI
This is my everyday driver. It's built with Ink (React for the terminal) rather than just being a raw text stream.
Instead of just running a loose script, the CLI is now packaged as a fully-fledged @artemis/cli terminal app. Once linked globally, you interact with the agent natively:
artemis chat # Interactive chat TUI (default)
artemis channels # Manage active channel connections
artemis config # View configuration & LLM providers
artemis brain # Browse your ~/.artemis memory files safely
artemis gateway # Stop, start, and restart the background daemonThe chat interface is the heavy lifter. It supports hot-reloading active sessions across channels, gracefully handles manual tool confirmation prompts, and uses a dynamic shimmer effect to look premium while the LLM reasons.
Web UI
A robust Next.js 16 chat interface. It leverages a fully synchronized cmdk-based session dropdown so you can seamlessly hop between CLI history, WhatsApp replies, Web UI conversations, and Gmail threads natively.
pnpm webThe WhatsApp implementation uses whatsapp-web.js. It runs a headless browser under the hood to handle the connection.
pnpm whatsappOn the first run, it drops a QR code in your terminal. Scan it with your phone, and the agent becomes a contact you can text. I lowered the verbosity in the system prompt for this channel specifically, because wall-of-text replies in WhatsApp are annoying.
Discord
A simple Discord integration restricted to DMs.
pnpm discordYou'll need a bot token from the Discord Developer Portal. Make sure you set DISCORD_OWNER_ID in your .env, or the bot will refuse to talk to anyone. I didn't build this to be a public server bot—it's meant to be your personal assistant.
Telegram
A Telegram bot integration that supports streaming replies, thinking trace updates, and image inputs.
pnpm telegramYou will need a bot token from Telegram's BotFather. Set TELEGRAM_BOT_TOKEN in your .env file. You can also specify TELEGRAM_PROVIDER and TELEGRAM_MODEL. Centralized admin authorization applies on first contact, requiring OTP or admin approval.
Gmail
The most complex channel. It uses a local OAuth2 flow to authenticate, caches the token, and then periodically polls your inbox in the background.
pnpm gmailIt can read threads, draft replies, and send emails directly. More importantly, email threads are directly surfaced alongside your regular conversations in the Web UI, allowing you to converse with email recipients identically to chatting in the terminal.
The Architecture
Each channel roughly follows the same pattern. There is a listener that catches incoming events (a CLI keystroke, a WhatsApp message, a Discord webhook). That event gets pushed over WebSocket to the Gateway. The Gateway wakes up the Agent Core, which does whatever tool-calling and reasoning it needs, then pushes chunks of the response back down the socket to be rendered by the channel.