* feat(runtimes): weekly usage dimension + tz-aware aggregation (MUL-2382) Adds a Weekly view to the runtime Usage chart alongside Daily and Hourly, backed by `aggregateByWeek` on the existing 180-day daily cache (no new endpoint). Weeks are ISO 8601 Mon–Sun; the in-progress week is rendered at half opacity and tooltip-labelled "partial · N / 7 days". Side effects called out in the RFC: - `sliceWindow` now reads "today" in the runtime's IANA timezone, fixing a one-day drift at the window edge when the browser and runtime sit in different time zones. - ActivityHeatmap rows are reordered Mon → Sun to match the rest of the Weekly aggregation; "today" is computed in runtime tz so the grid's trailing column lines up with the daily rows the backend buckets. Dimension / period coupling: switching dimension resets the period to that dimension's default when the active value isn't in its allowed set (Hourly 7/30, Daily 7/30/90, Weekly 30/90/180). Unit tests cover weekStart / addDays / tz-aware today, the sliceWindow boundary, and aggregateByWeek's partial-week math. Co-authored-by: multica-agent <github@multica.ai> * fix(runtimes): weekly chart shows trailing calendar weeks (MUL-2382) aggregateByWeek built one bucket per week-with-data, and the caller took the last N buckets. With sparse data — old populated weeks plus empty stretches near today — the slice surfaced the old weeks instead of the trailing in-window calendar weeks the user selected. Now aggregateByWeek takes weekCount and emits exactly that many trailing calendar weeks anchored at today's week in the runtime tz. Buckets are pre-zeroed so empty in-range weeks render as empty bars; rows outside the window are dropped. Co-authored-by: multica-agent <github@multica.ai> * feat(usage): drop Hourly dim + add Daily/Weekly to workspace dashboard (MUL-2382) - Remove Hourly from the runtime usage WHEN-chart: segmented control is now Daily / Weekly. Drop the HourlyActivityChart component, aggregateCostByHour helper, byHour query subscription, and the when_tab_hourly i18n key. - Add the same Daily / Weekly dimension toggle to the workspace-level Usage page (dashboard-page.tsx). Time-range linkage matches the runtime page: Daily allows 7/30/90 (default 30), Weekly allows 30/90/180 (default 90); switching dimensions resets `days` when the current value isn't in the new dimension's set. - Reuse `aggregateByWeek` from runtimes/utils for cost / tokens (signature relaxed to accept the wider DashboardUsageDaily shape). Add `aggregateWeeklyTime` / `aggregateWeeklyTasks` in dashboard/utils with identical pre-zeroed trailing-week semantics. Workspace dashboard uses the user-chosen timezone (existing TimezoneSelect) as the week-boundary tz; runtime page continues to use the runtime's IANA tz. - New `WeeklyTimeChart` / `WeeklyTasksChart` mirror their daily counterparts plus partial-week half-opacity bars and rangeLabel tooltips, matching the existing Weekly cost / tokens charts. - Tests: drop hourly-related setup; add weekly run-time / tasks coverage asserting pre-zeroed trailing buckets and the same MUL-2382 sparse window-scoping regression we caught on the runtime side. Co-authored-by: multica-agent <github@multica.ai> * fix(usage): correct workspace Weekly window + lock tz to UTC (MUL-2382) Two blocking correctness bugs from Emacs's PR #2822 review: 1. The Weekly chart paints `ceil(days/7)` trailing calendar weeks but the API was still asked for exactly `days`. Worst case (today = Sunday on a 30D request) the leftmost Monday sits 34 days back, so the first week's bucket was silently truncated. Over-fetch the per-date queries to `weekCount * 7` days when Weekly is active; per-agent rollups stay at `days` so the KPI / leaderboard labels keep their advertised window. Daily-aggregation surfaces (cost/tokens/time/tasks KPIs and the Daily chart) re-scope the over-fetched rows back to `days` so the labels stay consistent. 2. The backend dashboard rollup buckets data by UTC `bucket_date` (and the raw fallback queries by `DATE(tu.created_at)`, also UTC), but the frontend was driving Weekly boundaries from the user-chosen `TimezoneSelect`. Near midnight UTC that put cross-boundary rows into the wrong calendar week. Lock workspace Weekly to UTC and remove the timezone picker from this page; the runtime detail page keeps its own `runtime.timezone`-anchored aggregation, which is consistent because its rollup is materialized in that runtime's tz. Verification: pnpm --filter @multica/views test (636 passed), typecheck clean, lint 0 errors / 13 pre-existing warnings. Co-authored-by: multica-agent <github@multica.ai> --------- Co-authored-by: multica-agent <github@multica.ai>
Multica
Your next 10 hires won't be human.
The open-source managed agents platform.
Turn coding agents into real teammates — assign tasks, track progress, compound skills.
Website · Cloud · X · Self-Hosting · Contributing
English | 简体中文
What is Multica?
Multica turns coding agents into real teammates. Assign issues to an agent like you'd assign to a colleague — they'll pick up the work, write code, report blockers, and update statuses autonomously.
No more copy-pasting prompts. No more babysitting runs. Your agents show up on the board, participate in conversations, and compound reusable skills over time. Think of it as open-source infrastructure for managed agents — vendor-neutral, self-hosted, and designed for human + AI teams. Works with Claude Code, Codex, GitHub Copilot CLI, OpenClaw, OpenCode, Hermes, Gemini, Pi, Cursor Agent, Kimi, and Kiro CLI.
For larger teams, Squads add a stable routing layer: assign work to a group led by an agent, and the leader delegates to the right member.
Why "Multica"?
Multica — Multiplexed Information and Computing Agent.
The name is a nod to Multics, the pioneering operating system of the 1960s that introduced time-sharing — letting multiple users share a single machine as if each had it to themselves. Unix was born as a deliberate simplification of Multics: one user, one task, one elegant philosophy.
We think the same inflection is happening again. For decades, software teams have been single-threaded — one engineer, one task, one context switch at a time. AI agents change that equation. Multica brings time-sharing back, but for an era where the "users" multiplexing the system are both humans and autonomous agents.
In Multica, agents are first-class teammates. They get assigned issues, report progress, raise blockers, and ship code — just like their human colleagues. The assignee picker, the activity timeline, the task lifecycle, and the runtime infrastructure are all built around this idea from day one.
Like Multics before it, the bet is on multiplexing: a small team shouldn't feel small. With the right system, two engineers and a fleet of agents can move like twenty.
Features
Multica manages the full agent lifecycle: from task assignment to execution monitoring to skill reuse.
- Agents as Teammates — assign to an agent like you'd assign to a colleague. They have profiles, show up on the board, post comments, create issues, and report blockers proactively.
- Squads — group agents (and humans) under a leader agent and assign work to the squad. The leader decides who should pick it up, so routing stays stable as the team grows.
@FrontendTeaminstead of@alice-or-bob-or-carol. - Autonomous Execution — set it and forget it. Full task lifecycle management (enqueue, claim, start, complete/fail) with real-time progress streaming via WebSocket.
- Reusable Skills — every solution becomes a reusable skill for the whole team. Deployments, migrations, code reviews — skills compound your team's capabilities over time.
- Unified Runtimes — one dashboard for all your compute. Local daemons and cloud runtimes, auto-detection of available CLIs, real-time monitoring.
- Multi-Workspace — organize work across teams with workspace-level isolation. Each workspace has its own agents, issues, and settings.
Quick Install
macOS / Linux (Homebrew - recommended)
brew install multica-ai/tap/multica
Use brew upgrade multica-ai/tap/multica to keep the CLI current.
macOS / Linux (install script)
curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash
Use this if Homebrew is not available. The script installs the Multica CLI on macOS and Linux by using Homebrew when it is on PATH, otherwise it downloads the binary directly.
Windows (PowerShell)
irm https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.ps1 | iex
Then configure, authenticate, and start the daemon in one command:
multica setup # Connect to Multica Cloud, log in, start daemon
Self-hosting? Add
--with-serverto deploy a full Multica server on your machine:curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash -s -- --with-server multica setup self-hostThis pulls the official Multica images from GHCR (latest stable by default). Requires Docker. See the Self-Hosting Guide for details. If the selected GHCR tag has not been published yet, fall back to
make selfhost-buildfrom a checkout.
Getting Started
1. Set up and start the daemon
multica setup # Configure, authenticate, and start the daemon
The daemon runs in the background and auto-detects agent CLIs (claude, codex, copilot, openclaw, opencode, hermes, gemini, pi, cursor-agent, kimi, kiro-cli) on your PATH.
2. Verify your runtime
Open your workspace in the Multica web app. Navigate to Settings → Runtimes — you should see your machine listed as an active Runtime.
What is a Runtime? A Runtime is a compute environment that can execute agent tasks. It can be your local machine (via the daemon) or a cloud instance. Each runtime reports which agent CLIs are available, so Multica knows where to route work.
3. Create an agent
Go to Settings → Agents and click New Agent. Pick the runtime you just connected and choose a provider (Claude Code, Codex, GitHub Copilot CLI, OpenClaw, OpenCode, Hermes, Gemini, Pi, Cursor Agent, Kimi, or Kiro CLI). Give your agent a name — this is how it will appear on the board, in comments, and in assignments.
4. Assign your first task
Create an issue from the board (or via multica issue create), then assign it to your new agent. The agent will automatically pick up the task, execute it on your runtime, and report progress — just like a human teammate.
CLI
The multica CLI connects your local machine to Multica — authenticate, manage workspaces, and run the agent daemon.
| Command | Description |
|---|---|
multica login |
Authenticate (opens browser) |
multica daemon start |
Start the local agent runtime |
multica daemon status |
Check daemon status |
multica setup |
One-command setup for Multica Cloud (configure + login + start daemon) |
multica setup self-host |
Same, but for self-hosted deployments |
multica issue list |
List issues in your workspace |
multica issue create |
Create a new issue |
multica update |
Update to the latest version |
See the CLI and Daemon Guide for the full command reference.
Architecture
┌──────────────┐ ┌──────────────┐ ┌──────────────────┐
│ Next.js │────>│ Go Backend │────>│ PostgreSQL │
│ Frontend │<────│ (Chi + WS) │<────│ (pgvector) │
└──────────────┘ └──────┬───────┘ └──────────────────┘
│
┌──────┴───────┐
│ Agent Daemon │ runs on your machine
└──────────────┘ (Claude Code, Codex, GitHub Copilot CLI,
OpenCode, OpenClaw, Hermes, Gemini,
Pi, Cursor Agent, Kimi, Kiro CLI)
| Layer | Stack |
|---|---|
| Frontend | Next.js 16 (App Router) |
| Backend | Go (Chi router, sqlc, gorilla/websocket) |
| Database | PostgreSQL 17 with pgvector |
| Agent Runtime | Local daemon executing Claude Code, Codex, GitHub Copilot CLI, OpenClaw, OpenCode, Hermes, Gemini, Pi, Cursor Agent, Kimi, or Kiro CLI |
Development
For contributors working on the Multica codebase, see the Contributing Guide.
Prerequisites: Node.js v20+, pnpm v10.28+, Go v1.26+, Docker
make dev
make dev auto-detects your environment (main checkout or worktree), creates the env file, installs dependencies, sets up the database, runs migrations, and starts all services.
See CONTRIBUTING.md for the full development workflow, worktree support, testing, and troubleshooting.

