This guide gets Friday running locally, completes setup, and explains what to do when a capability is missing.
Friday is local-first and BYOK. You can start it without every provider configured, but real tasks that need models, search, OCR, TTS, optional channels, or third-party accounts require valid credentials and verification.
- Node.js 22+
- npm 10+
- Git
- A modern browser
- Optional: model/search provider keys, such as OpenAI, Doubao/Volcengine, Tavily, Serper, or other supported providers
Check your local runtime:
node --version
npm --versionnpm install -g @thesongzhu/friday
friday startOpen:
http://localhost:3141
git clone https://github.com/thesongzhu/Friday.git
cd Friday
npm install
npm run build
npm startOpen:
http://localhost:3141
docker compose -f docker/docker-compose.yml up --buildOpen:
http://localhost:3141
Setup should guide you through:
- Local session: Friday establishes a local browser session for this machine.
- Provider: choose or auto-detect a model provider, enter credentials, and verify the lane.
- Capabilities: review text, vision, OCR, embedding, web search, PDF, browser, files, skills, workflows, memory, TTS, and optional channel support.
- Channels: connect optional chat/control channels such as Discord, Telegram, Feishu/Lark, Signal, WhatsApp, QQ, or webhooks only when you want that surface and can verify it.
- Home: after setup completes, opening Friday should go directly to Home.
If setup cannot verify a capability, it should say what is missing, where to configure it, and how to test it after configuration.
Friday does not include model or paid search credentials. Bring your own keys.
Common setup paths:
| Need | Typical provider path | What Friday should show if missing |
|---|---|---|
| Text model | OpenAI, Doubao/Volcengine, Moonshot, Anthropic, Google, OpenRouter | missing provider key or invalid route |
| Vision / multimodal | provider with image input support | missing vision-capable model or API key |
| OCR | provider OCR API or installed OCR skill | missing OCR provider, account, or skill |
| Web search | Tavily, Serper, or custom search skill | missing search key or disabled provider |
| Embedding / memory search | embedding-capable provider or local embedding lane | missing embedding provider |
| TTS | provider TTS lane or local speech skill | missing TTS provider |
Missing external accounts, OAuth, payment, CAPTCHA, API keys, and sensitive permissions are human blockers. Friday should not mark those tasks as complete until real verification passes.
After setup, try a small task that exercises the closure loop:
Summarize what capabilities are configured, list what is missing, and tell me the next setup step.
Friday should answer with:
- available capabilities
- missing capabilities
- exact human blockers
- configuration path
- verification step
To keep Friday available after login:
bash scripts/ops/install-friday-launchagent.shCheck status:
bash scripts/ops/friday-launchagent-status.shSee macOS Auto-Start for logs, uninstall steps, and channel wake behavior.
From source:
npm run typecheck
npm run lint
npm run build
npm testnpm run typecheck covers source, operator-client, UI, and type-level contracts. It does not replace the normal .test.ts Vitest suite; use npm test for that.
Useful targeted checks:
npm run ops:doctor:runtime
npm run check:security-doctor
npm run check:audit-integrity
npm run check:provider-reliabilityFriday can turn repeated work into reusable skills and workflows, but executable capability must stay reviewable.
Common commands:
friday list
friday import ./my-skill.friday.tgz
friday import ./path/to/SKILL.md
friday import https://github.com/example/skill-repo.gitEvery generated or imported capability should move through:
candidate -> plan -> sandbox/test -> approval if required -> install/register -> doctor verify -> available
See Extending Friday for authoring guidance.
curl http://localhost:3141/v1/healthExpected shape:
{
"ok": true,
"data": {
"status": "ok",
"version": "1.0.0"
}
}Use Troubleshooting when:
- Friday opens a recovery/auth page instead of Home.
- setup status is unavailable.
- a provider shows the wrong name or route.
- a capability says it is available but the representative task fails.
- a channel receives messages but cannot control Friday.
- a generated skill installs but cannot pass verification.
For security-sensitive problems, follow SECURITY.md.