friday-studio
Health Pass
- License รขโฌโ License: NOASSERTION
- Description รขโฌโ Repository has a description
- Active repo รขโฌโ Last push 0 days ago
- Community trust รขโฌโ 13 GitHub stars
Code Pass
- Code scan รขโฌโ Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
- Permissions รขโฌโ No dangerous permissions requested
This tool is an open-source AI agent orchestration platform that provides self-hosted, autonomous workspaces. It manages AI agents triggered by various signals like HTTP webhooks, CLI commands, or cron schedules, granting them access to MCP tools.
Security Assessment
Overall risk is rated as Medium. The code itself is transparent; a light scan of 12 files found no dangerous patterns, hardcoded secrets, or excessive permissions. However, the platform's core design inherently involves executing actions, spawning processes, and making network requests (exposing HTTP endpoints and routing external payloads to agents). Users must also provide sensitive LLM provider API keys in the environment file to run the agents. While the base code is safe, the tool's high level of system access requires secure configuration, especially if exposed to the public internet.
Quality Assessment
The project is actively maintained, with the most recent push occurring today. It features clear, comprehensive documentation that details prerequisites and setup. The main drawbacks are a low community trust indicator (only 13 GitHub stars) and an ambiguous software license (NOASSERTION). The lack of a clear, standard open-source license means you should verify the repository's license file before using this in any commercial or production environment.
Verdict
Use with caution โ the code appears safe and is actively maintained, but you should clarify the ambiguous license before adopting it and ensure you properly secure the API keys and exposed HTTP endpoints.
๐ค Open-source AI agent runtime โ shareable workspaces, MCP tools, skills, memory, and cron/webhook automations. Self-hosted and transparent.
Friday Studio
AI agent orchestration platform. Workspaces run autonomous agents triggered by
signals (HTTP, cron).
The daemon manages workspace lifecycles โ each workspace defines agents,
signals, and jobs in a workspace.yml. Signals arrive (HTTP, CLI, cron), the
daemon routes them to the workspace runtime, which spawns sessions where agents
execute with MCP tool access.
Quickstart
Prerequisites
| Tool | Version | Why |
|---|---|---|
| Deno | 2.7.0+ |
Runs the daemon, CLI, and TypeScript packages |
| Go | 1.26+ |
Builds the Go services under tools/ (pty-server, webhook-tunnel, friday-launcher) |
| Node.js | 24+ |
Needed for npx, Vite, and the web playground |
| uv | 0.11+ |
Provisions the managed Python that user agents run under (auto-installed by setup-dev-env.sh if absent) |
| git | any recent | โ |
| Docker (optional) | any recent | Alternative path: run the full stack with docker compose up |
You do not need Postgres for local development โ the daemon uses SQLite by
default. Postgres is only required when running the link credential service
in production.
1. Clone and install
git clone https://github.com/friday-platform/friday-studio
cd friday-studio
deno install # install JS/TS deps (also runs husky via prepare hook)
2. Configure environment
cp .env.example .env
# open .env and set ANTHROPIC_API_KEY (or another provider key)
The example file documents every variable the daemon reads. The minimum to run
a real agent is one LLM provider key.
3. Start the daemon
deno task atlas daemon start --detached
Verify it's up:
curl -sf http://localhost:8080/health && echo " daemon ok"
deno task atlas daemon status
4. Run your first agent
Send a prompt through the CLI โ the daemon routes it to the bundled chat
workspace and returns a chat id you can follow up on.
deno task atlas prompt "Write a haiku about TypeScript"
deno task atlas chat # list recent chats
deno task atlas chat <chatId> --human # readable transcript
To run a real example workspace, clone thefriday-studio-examples
repo and add one โ for instance, the HTTP-triggered GitHub PR reviewer:
git clone https://github.com/friday-platform/friday-studio-examples
deno task atlas workspace add ./friday-studio-examples/github-pr-reviewer
curl -X POST http://localhost:8080/review-pr \
-H "Content-Type: application/json" \
-d '{"pr_url": "https://github.com/friday-platform/friday-studio/pull/118"}'
Browsefriday-studio-examples
for more โ github-digest, inbox-zero, competitive-monitor,daily-operating-memo, and others โ each is a self-containedworkspace.yml you can copy and edit.
5. Stop the daemon
deno task atlas daemon stop
Alternative: Docker
docker compose up
This runs the daemon, web UI (Studio), credential service, PTY server, and
webhook tunnel together. Ports default to 1xxxx to avoid host collisions โ
see docker-compose.yml.
Web playground (optional)
For interactive development with the Svelte UI, hot-reload daemon, and webhook
tunnel running side by side:
deno task dev:playground
Open http://localhost:5200.
Local development
Working in-tree (running the daemon out of the repo, not via the desktop
installer) needs a one-time setup so the daemon's user-agent spawn path
finds a managed Python with the SDK installed:
bash scripts/setup-dev-env.sh
Idempotent. Safe to re-run after every friday-agent-sdk version bump.
What it does:
- Verifies
uvis on PATH (installs from astral.sh if not). - Writes the env vars the daemon needs (
FRIDAY_UV_PATH,UV_PYTHON_INSTALL_DIR,UV_CACHE_DIR,FRIDAY_AGENT_SDK_VERSION)
into the daemon's envfile (~/.atlas/.envor~/.friday/local/.env,
matching whichever home holds your live state). - Pre-warms the uv cache โ Python 3.12 + the pinned
friday-agent-sdk
wheel โ so the first user-agent spawn doesn't pay the download as
cold-start latency. - Uninstalls any stale editable
friday-agent-sdkinstalls from system
Pythons that would otherwise shadow the uv-managed copy.
Restart your daemon after running it so the new env vars take effect.
The desktop installer handles the same setup automatically; this script is
for in-tree development only.
Commands
# Daemon lifecycle
deno task atlas daemon start --detached # start (background)
deno task atlas:dev daemon start # start with auto-restart (session-aware)
deno task atlas daemon status # health check
deno task atlas daemon stop # stop
# Interact
deno task atlas prompt "your prompt" # send a one-shot prompt
deno task atlas chat # list recent chats
deno task atlas chat <chatId> --human # show transcript
# Develop
deno task typecheck # deno check + svelte-check
deno task lint # deno lint + biome check --write
deno task fmt # biome format --write
deno task test $file # run a vitest file
# Go services
go test -race ./...
golangci-lint run
Project Structure
apps/
atlasd/ # Daemon โ HTTP API, workspace lifecycle (TS/Deno)
atlas-cli/ # CLI entry point โ `deno task atlas` (TS/Deno)
link/ # Credential / OAuth service (TS/Deno)
ledger/ # Resource & activity storage service (TS/Deno)
studio-installer/ # Friday Studio launcher app โ tray, daemon
# supervisor, autostart (Tauri/Rust)
packages/ # @atlas/* libraries โ core, agent-sdk, config,
# fsm-engine, llm, logger, mcp, memory, skills,
# storage, workspace, signals, โฆ
tools/
agent-playground/ # Web client (SvelteKit) โ dev tool and the
# production UI bundled in Friday Studio
evals/ # Agent eval harness CLI
friday-launcher/ # System tray launcher + daemon supervisor (Go)
pty-server/ # WebSocket โ PTY shell bridge (Go)
webhook-tunnel/ # Cloudflare tunnel โ daemon webhook forwarder (Go)
Config: friday.yml (platform-wide) ยท workspace.yml (per-workspace) ยทCONTRIBUTING.md (dev guidelines + code style)
Python user agents
A workspace agent declared type: "user" is a Python file the daemon spawns
as a subprocess. The agent code calls capabilities (LLM, HTTP, MCP tools,
streaming) over NATS through the friday-agent-sdk
package โ no provider keys, no MCP plumbing in your code.
Minimal agent:
from friday_agent_sdk import AgentContext, agent, ok
@agent(id="hello", version="1.0.0", description="Reverses input.")
def execute(prompt: str, ctx: AgentContext):
return ok({"reversed": prompt[::-1]})
if __name__ == "__main__":
from friday_agent_sdk import run
run()
Register and run:
curl -X POST http://localhost:8080/api/agents/register \
-H "Content-Type: application/json" \
-d '{"entrypoint":"/abs/path/to/agent.py"}'
curl -X POST "http://localhost:8080/api/agents/hello/run?workspaceId=user" \
-H "Content-Type: application/json" \
-d '{"input":"hello"}'
The daemon spawns uv run --python 3.12 --with friday-agent-sdk==<pinned> agent.py
under the hood โ the version is pinned intools/friday-launcher/paths.go
(bundledAgentSDKVersion) and threaded through to the daemon via the
launcher (or setup-dev-env.sh for in-tree work). Bumping the SDK is a
deliberate change in three pin sites: that constant, the same value in theDockerfile, and BUNDLED_AGENT_SDK_VERSION inapps/studio-installer/src-tauri/src/commands/prewarm_agent_sdk.rs.
Rule of thumb: use type: "user" only when each call's decision is
mechanical (regex / schema / fixed routing). For any LLM-judgment work
(classifying, summarizing, choosing among options), use type: "llm" with
MCP tools โ that's faster to author and easier to maintain.
Reference:
- SDK:
friday-platform/agent-sdk
ยท authoring guide vendored atpackages/system/skills/writing-friday-python-agents - Memory access from agents: narrative is the only supported strategy
today โ seepackages/system/skills/writing-to-memory - Spawn resolution:
apps/atlasd/src/agent-spawn.tsโ
three-tier fallback (uv-run โFRIDAY_AGENT_PYTHONโ barepython3)
AI Workflow
Claude Code skills support a structured planning-to-execution pipeline:
Design โ
/brainstormingrefines a rough idea into a design doc via
Socratic questioning. Outputs todocs/plans/.Iterate โ
/improving-planscritiques the design, surfaces gaps, and
outputs an improved version. Keep iterating until the questions become
trivial.Tasks โ
/creating-tasksconverts the validated design into tracked
work items with dependency graphs.Execute โ
/implementing-tasksspawns parallel agents. Each claims a
task, implements, commits, moves on.Polish โ
/polishingruns a self-review team (lint, slop, tests,
design) before PR.Ship โ
/opening-prcreates a PR with summary and test plan.
Post-ship: /reviewing-code for reviewing others' PRs.
Learn more
- docs.hellofriday.ai โ full documentation
friday-studio-examples
โ ready-to-import workspace examplesCONTRIBUTING.mdโ how to send patches, code style, hard
rules (CLA required)SECURITY.mdโ vulnerability disclosure
License
Friday is source-available under the Business Source License 1.1.
You can read, modify, and self-host the code under the
Additional Use Grant, which permits free production use for personal
use, organizations under 5 people, and businesses with under $1M ARR.
Production use outside those bounds, or that competes with Tempest Labs'
offering, requires a commercial license. Each released version converts
automatically to Apache-2.0 one year after that version is first
distributed (so the current version's Change Date is 2027-04-30; later
versions get their own date).
For commercial-license inquiries: [email protected].
Third-party components retain their original licenses โ seeTHIRD_PARTY_LICENSES.md and NOTICE
(includes MPL-2.0 ยง3.2 source-availability notice and license elections for
dual/tri-licensed deps).
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found