friday-studio

mcp
Guvenlik Denetimi
Gecti
Health Gecti
  • License รขโ‚ฌโ€ License: NOASSERTION
  • Description รขโ‚ฌโ€ Repository has a description
  • Active repo รขโ‚ฌโ€ Last push 0 days ago
  • Community trust รขโ‚ฌโ€ 13 GitHub stars
Code Gecti
  • Code scan รขโ‚ฌโ€ Scanned 12 files during light audit, no dangerous patterns found
Permissions Gecti
  • Permissions รขโ‚ฌโ€ No dangerous permissions requested
Purpose
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.
SUMMARY

๐Ÿค– Open-source AI agent runtime โ€” shareable workspaces, MCP tools, skills, memory, and cron/webhook automations. Self-hosted and transparent.

README.md

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 the
friday-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"}'

Browse
friday-studio-examples
for more โ€” github-digest, inbox-zero, competitive-monitor,
daily-operating-memo, and others โ€” each is a self-contained
workspace.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:

  1. Verifies uv is on PATH (installs from astral.sh if not).
  2. 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/.env or ~/.friday/local/.env,
    matching whichever home holds your live state).
  3. 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.
  4. Uninstalls any stale editable friday-agent-sdk installs 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 in
tools/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 the
Dockerfile, and BUNDLED_AGENT_SDK_VERSION in
apps/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:

AI Workflow

Claude Code skills support a structured planning-to-execution pipeline:

  1. Design โ€” /brainstorming refines a rough idea into a design doc via
    Socratic questioning. Outputs to docs/plans/.

  2. Iterate โ€” /improving-plans critiques the design, surfaces gaps, and
    outputs an improved version. Keep iterating until the questions become
    trivial.

  3. Tasks โ€” /creating-tasks converts the validated design into tracked
    work items with dependency graphs.

  4. Execute โ€” /implementing-tasks spawns parallel agents. Each claims a
    task, implements, commits, moves on.

  5. Polish โ€” /polishing runs a self-review team (lint, slop, tests,
    design) before PR.

  6. Ship โ€” /opening-pr creates a PR with summary and test plan.

Post-ship: /reviewing-code for reviewing others' PRs.

Learn more

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 โ€” see
THIRD_PARTY_LICENSES.md and NOTICE
(includes MPL-2.0 ยง3.2 source-availability notice and license elections for
dual/tri-licensed deps).

Yorumlar (0)

Sonuc bulunamadi