Friday runs as a set of local services managed by the Friday Studio launcher. Here’s how they fit together.Documentation Index
Fetch the complete documentation index at: https://docs.hellofriday.ai/llms.txt
Use this file to discover all available pages before exploring further.
Daemon
Port 18080 — The core of Friday. The daemon is the backend service that runs everything. It manages workspace lifecycles, orchestrates agents, executes workflows, and exposes the HTTP API that all other components talk to. Key responsibilities:- Workspace management — loads
workspace.ymlconfigurations, creates runtime instances on demand, and tears them down after idle timeout - Workflow engine — executes jobs defined as FSM (finite state machine) pipelines, routing between states and managing transitions
- Agent orchestration — dispatches agents (built-in, custom Python, or inline ), manages tool connections, and collects results
- Signal routing — receives signals (HTTP webhooks, cron schedules, filesystem events, and chat messages from Slack, Discord, Telegram, and WhatsApp) and routes them to the correct workspace and job
- Streaming — pushes real-time execution progress to connected clients via Server-Sent Events (SSE)
- Storage — persists workspace registries, session history, artifacts, and activity logs using SQLite by default
Studio
Port 15200 — The local web dashboard. The Studio is your visual interface for managing spaces, testing agents, inspecting job executions, and browsing skills. It communicates with the daemon API over HTTP. Key tools:- Space dashboard — view runs, jobs, signals, and agents for each loaded space
- Agent Tester — test any agent in isolation with different inputs and models
- Job Inspector — debug pipelines with visualization and waterfall timelines
- Skills browser — navigate, edit, and publish skills
- Configuration editor — edit
workspace.ymlwith syntax highlighting - CLI cheatsheet — searchable command reference (press Shift+?)
Launcher
The Friday Studio launcher is a macOS system tray app that manages the full service stack: daemon, Studio, webhook tunnel, Link, and NATS. It starts everything together, shows per-service health status, and shuts down cleanly. The launcher runs a health server athttp://127.0.0.1:5199:
GET /api/launcher-health— JSON snapshot of per-service statusGET /api/launcher-health/stream— SSE stream of service status transitionsPOST /api/launcher-shutdown— trigger orderly shutdown
Link
Port 13100 — Credential management service. Link manages OAuth connections and API key storage. When you connect an integration (Google Calendar, Slack, GitHub, etc.), Link handles the OAuth flow and stores tokens locally. The daemon routes credential requests through Link at runtime.Chat interface
The primary way to build and manage spaces is through the Friday chat interface. Open any space in Studio and use the Chat tab to talk to Friday — describe what you want, and Friday creates signals, agents, jobs, and workspace configuration for you. The chat interface is backed by the workspace-chat agent, which has access to the full workspace API — it can create spaces, add signals, wire up jobs, configure MCP servers, and deploy changes, all through conversation.Webhook Tunnel
Port 19090 (public-facing) · Port 20241 (cloudflared transport, loopback) — Public URL for receiving external webhooks. The webhook tunnel creates a Cloudflare tunnel so external services (GitHub, Jira) can send webhooks to your local instance. Without it, you’d need to expose your machine to the internet manually. How it works:- On startup, the tunnel registers with Cloudflare and gets a public URL
- External services send webhooks to
https://{tunnel-domain}/hook/{provider}/{workspaceId}/{signalId} - The tunnel verifies the webhook signature (if configured) and forwards the payload to the daemon
- The daemon routes it to the correct workspace and triggers the job
TUNNEL_TOKEN for a stable URL across restarts, or let it generate a random temporary URL each time. Set NO_TUNNEL=true to disable it entirely.
NATS
Port 4222 (protocol) · Port 8222 (monitor / healthz) NATS is the internal message bus Friday uses for agent communication. The daemon, agents, and internal services communicate over NATS — you don’t interact with it directly. The monitor endpoint athttp://localhost:8222/healthz can be used to verify NATS is running.
CLI
Binary:friday — Command-line interface for the daemon.
The friday CLI communicates with the daemon over HTTP (localhost:18080). It’s an alternative to the Studio for managing spaces, triggering signals, inspecting sessions, and publishing skills. See the CLI reference for the full command list.
How they communicate
| From | To | Purpose |
|---|---|---|
| Studio | Daemon | All UI operations, real-time streaming |
| CLI | Daemon | All CLI operations |
| Webhook Tunnel | Daemon | Forward external webhooks |
| External services | Webhook Tunnel | GitHub, Jira webhooks |
| Agents | NATS | Internal message bus for agent communication |
Data flow
When you trigger a job, here’s what happens:Workspace activated
The daemon finds the target workspace. If its runtime isn’t loaded, it creates one on demand from the
workspace.yml.Session created
A new session is created to track this execution. The workflow engine loads the job’s FSM definition.
FSM executes
The workflow engine walks through FSM states. At each action state, it dispatches agents via the orchestrator. Agents connect to MCP tool servers, call LLMs, and produce results.
Results stream
Each agent step, tool call, and state transition is pushed to connected clients via SSE. The Studio renders progress in real time.

