
Security News
PHP Foundation Says Chainguard Broke Security Embargo Ahead of Emergency Patches
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.
@worca/app
Advanced tools
Worca turns a task into reviewed, merge-ready work. A deterministic multi-agent pipeline that plans, implements and reviews in isolated git worktrees, with quality gates, budgets and a human in the loop. Web UI, CLI and chat.
Worca turns a task into reviewed, merge-ready work. It is a deterministic multi-agent pipeline: you point it at a project, describe the work, and a state machine runs the agents of a workflow in sequence — by default Clarify → Plan → Refine → Implement → Review — looping until the work clears quality gates, pausing to ask you the questions that matter, and keeping every run isolated in its own git worktree and branch. Pick Auto and Worca chooses the workflow for the task, draw your own in Workflows (or ask its chat to build it), or start the shipped Presentation workflow to turn a brief into a slide deck, or Architecture (C4) to keep a diagram of your code that draws itself from the code.
It ships as a web UI, a CLI, and an installable /worca skill for
Claude Code — all running the same engine — and chat plugins (Telegram, Slack,
Discord, Teams) let you drive runs from a chat. See the
architecture in one picture.
Pick Auto — first in the New pipeline Workflow picker and selected by default
(--workflow auto on the CLI) — and Worca picks the workflow for you. One model call
reads the task text, the attached files and a small offline fingerprint of the
repository (and may take a brief read-only look at the checkout), then classifies the
task: a free-form prompt, a partial plan or a complete plan, how large the change is,
and signals such as a big web UI feature. It knows every agent only by its metadata
and the front matter of its agent file (never the agent's full instructions) and
assembles a matching workflow from those agents. A saved workflow with exactly that
shape is reused; otherwise the proposal is saved as a new workflow once accepted. With
Human in the loop on (the default), you see the proposal first: Accept & run,
Revise it in plain text (Advanced and up), or Cancel run. Turn the switch off
(--no-human) and the proposal is accepted as is, with no clarify step and no agent
questions; a loop that runs out of cycles, a recovery prompt, a cost cap or an error
still pause the run. Pick any saved workflow instead to skip all of this. Auto is not
available for workspace runs yet.
The built-in Default workflow hands your task to five agents:
## Clarifications (Q&A) section, so every later step
sees them.-v2, -v3, …)
until no critical/major issues remain.Each loop has a cycle cap (default 3, adjustable per loop). A loop that hits it with
blocking findings left pauses the run and lists the open issues: I approve another
cycle, or Don't approve another cycle and continue with what you have. Only
critical/major findings block; minor findings and suggestions never do. A
finished run's work is committed to its own worca-cc/… branch, ready for
Create PR.

Every finished run keeps its full record, one tab each in Runs: Overview (the review verdict and its findings, time, cost, files changed), Diff (every file with its +/− and patch), Artifacts (the plans, reviews and other files the steps wrote), Actions, Workflow (the graph as it ran, with per-step time and cost at Expert), Q&A (the clarify answers and any mid-run questions), and at Expert Logs and Agents. Diff, Artifacts and Actions start at Advanced (see UI levels).

claude --resume) in the same worktree,
uncommitted agent work included, or Resume at… schedules it. Paused runs
survive a server restart, and a run cut off mid-step comes back as
Interrupted, resumable from its last clean point.worca-cc/… branch, so agents never edit your checkout and parallel runs
don't collide. When a run ends, its work is committed to that branch and the
worktree is removed; the branch stays.--on-source-branch) and the run still works on a hidden branch, but when it
finishes done its source branch is fast-forwarded onto that work and the
hidden branch is deleted; the run's page then offers Push gh), or on Azure DevOps with a personal access
token. The button then becomes View pull request.--mock on the
CLI, WORCA_MOCK=1 for a whole server) runs the pipeline against a
deterministic offline mock — no claude, no tokens — for demos, development
and CI.
/answer field=value); a
finished run's page replays the form read-only with its answer. Review
Implementation, Narrative Spine, Visual System and Deck Outputs ask this way;
plugins can ship forms too.--model only fills nodes with none. Fan-out agents also
take a sub-agent model.
md, json, void) with smooth
wires coloured by type. Each card declares what it consumes and produces, a
wire only connects compatible ports, and Save stays off until the graph
is valid. A blocking output wired back to an earlier card becomes a loop
(drawn amber, swooping under the cards with a ≤N pill): a reviewer keeps
sending work back until it passes or the loop hits its cycle cap — 3 by
default, set per loop wire in its toolbar. Flow cards — Task (the run's
request), End (the result), AND, OR, Combine — express joins,
choices and merges without any code. A selected card's toolbar sets its
model, effort and await-all; More holds every other setting. The top
bar keeps only Back, Workflows ▾ (New canvas, Open…, Import…, Export…),
the name, the Library toggle and Save; Auto-layout and the zoom menu
sit bottom right. See docs/ui-levels.md.#composer, #agents, #scripts and
#agent-create addresses land in the view. (2) suffix; nothing is ever overwritten,
and any script commands are shown for approval first). In Expert, a
Claude Code skill writes a SKILL.md plus the agents it dispatches
under .claude/, so the pipeline runs inside Claude Code without Worca
(not yet for pipelines with script cards). A Worca plugin folder
bundles the pipeline with your own agents and scripts it uses and the
skills they need — built-in agents are never copied — so the recipient runs
worca plugin link <folder> and picks up edits with
worca plugin reimport <name>. The CLI does the same with
worca workflow list, worca workflow export <id> --format json|claude|plugin
and worca workflow import <file>.
worca --workflow wf_presentation --prompt "…". Deck Clarify asks
what shapes the talk (live or read alone, audience, duration, the ask,
sources, brand); Narrative Spine writes one hallway sentence, a 3–5 section
spine and a takeaway title per slide; Visual System fixes grounds, type
scale, compositions and the accent, with rendered preview sheets. You approve
the spine and the system on ask forms or send changes back, and Deck Outputs
asks what to deliver (PDF + standalone HTML, PDF only, standalone HTML only,
or the deck files only) and whether to add narration audio.deck.pdf
with headless Chrome (page count checked against the slide count),
optionally record a per-slide ElevenLabs narration from the speaker notes
(the API key is used for that run only, never written to disk), and inline
everything into one self-contained deck.standalone.html; Deck Export then
checks the result against what the request asked for. Their findings loop
back to the builder too, up to 2 cycles. The files live in the run's folder,
not your repository — open them on the run's Artifacts tab (Advanced).
The audit and the PDF need Chrome, Chromium or Edge; the script cards need
Python 3.8+. The narrated deck linked from
docs/why-worca.md runs on the same kit.worca --workflow wf_architecture_c4 --prompt "…", on a
project or a workspace) finds the project's LikeC4 files, asks on one card
which to update — or where to create one and how to group the deployment
sheet into bands, each with prose criteria for what belongs in it — and which
images to export. The architect reads the code and writes the model; a check
card parses it with the viewer's own parser and sends blocking problems back,
up to 2 cycles..c4 from a run's Artifacts tab
and it draws in Worca's viewer, with a view picker, an info rail, hover and
selection highlighting, a JPEG button and Full screen. The render card
writes SVG, JPEG or PNG of every view with the same renderer (JPEG and PNG
need Chrome, Chromium or Edge; in a container, the -full image). Worca's own model is
docs/architecture/architecture.c4;
the design is docs/architecture-c4.md..env*, keys, cert stores, container
secrets, Worca's own DB and settings) and blocks publication commands
(git push, npm/yarn/pnpm publish); Strict adds an environment scrub on agent spawn, denies
network-egress tools (including git clone/fetch/pull, DNS and download
CLIs), gh, docker push, cloud CLIs and
WebFetch/WebSearch, and protects home-dir credential stores. A team
policy can preset the picker and warn when a run's set ranks below its
minimum tier.permissions.deny rules on every pipeline agent spawn, one set for every
member of a workspace run; repo settings can't undo them. No preset denies
MCP registry tools, but a deny rule you write on a server reaches every copy
of it. See docs/guardrails.md for the full model and
its honest limitations.stdio, http or sse, or required by a team policy), and
Sets, where each server gets its values and secrets, so one server can sit in two sets
with different credentials, and Skills, the skill catalog (Skills): skills that
plugins ship or that you import, added to sets like servers. The built-in marketplace ships MCP servers as plugins (see
Plugins & chat).~/.worca-cc/mcp/secrets.json
(mode 0600) and reach a server as spawn environment; the run's MCP config holds
${MCPSECRET_…} references, and a stdio server starts with a short list of variables plus
what its definition declares. The agents of a run that uses a set can still read its secrets;
MCP servers lists what else can.claude process gets a
short-lived wbt_ token that works only on the broker's private port and is revoked when the
process exits; the broker adds the real key on the way to the provider its slot is pinned to.
With the broker on, Worca refuses to start while any model credential is within agents'
reach. In multi mode each teammate saves their own keys to the broker's encrypted vault
(Settings › General › My model credentials › Manage keys), and Statistics shows
spend By person. worca broker serve|secrets|revoke --person <email>; see
Credential broker.docs/workspace-map.md.
WORCA_ACTIONS_REMOTE=1. See
docs/actions.md.
worca-cc-plugin.json. It can contribute task sources (e.g. GitHub Issues),
agents (with their ask forms), scripts, skills, workflow templates, models,
chat channels, and MCP servers for the registry.
Install from the Marketplace page (Advanced) or worca plugin install;
Add marketplace (a GitHub URL, owner/repo or a local path) is Expert.
Installing from the UI is an explicit consent ceremony pinned to the commit
you saw: what's installed, which ask forms an agent can show and which file
types they may display, which secrets each part requests, where models
route, which setup commands run. Update previews the commits and a
diffstat, and flags new secrets, changed setup and changed model env, before
you accept (worca plugin update --diff adds the full diff). Package your
own with Export… on a saved workflow or Share as plugin… on the
Models page; see the authoring guide.dev branch, is registered on every install (nothing is installed until
you pick it): the GitHub Issues task source, the four chat channels below,
and MCP plugins for Atlassian, Cloudflare, Firebase, Notion and Railway. Set
WORCA_BUILTIN_MARKETPLACE to another repo URL or a local checkout to use
that instead (followed at its HEAD; only committed files count)./answer questions and forms, /approve or /retry at a
gate, /direct a live run, /pause, /stop, /resume, /status, /cost,
/use <name>, /mute 2h; /help lists them all. Commands are
deny-by-default: only chats on the channel's allowlist may send them. Setup:
Telegram,
Slack,
Discord,
Teams.git (log,
diff, blame, grep…), takes attached text files, images and PDFs, and never edits a file
itself. Settings › Ask Worca (Advanced) sets the turn limit, a per-turn cost cap, script
creation and opt-in web access with an allowed-domain list; chat spend counts toward the total
budget, and a team policy can preset the limits or narrow web access, never widen it.docs/scheduled-runs.md).
Ask for "auto", or for work no saved workflow fits, and it drafts a workflow card you tune
and Save as workflow. Model and provider, workspace, Actions, team-metrics, team-policy and
Away mode changes, cloning a repo and reading a new website are cards too: nothing changes
until you apply one. A started run becomes a live card — status, elapsed, cost, its agents and
its workflow graph, with Open run — where you Pause, Resume or Stop the run and
answer its questions; once it ends, the card shows the result, the top changed files, its
artifacts and Create pull request. While the chat follows a live run, the composer's →
chip (named after the run) sends it a direction instead of a message. The chat still posts when
the run waits for an answer, pauses, fails or finishes.https:// or localhost. It listens in ~99 languages and the
built-in voice speaks English. See docs/speech.md and
docs/speech-languages.md.
--night on the CLI. A marked run is also
answered by day once a question has waited 30 minutes. On the run page, Away mode on this run
(As set up, Answer for me now, Never on this run) overrides one run.--at, --every, --cron) or the API (POST /api/run with scheduledFor
or repeat). A series has overlap and failure-streak policies — by default it
pauses itself after 3 failures in a row; Settings › Runs › Scheduled runs
holds the defaults. See docs/scheduled-runs.md.worca schedule (list, show, run-now, move, cancel,
skip, pause, resume, log) does the same from a terminal.worca ui (or a
worca … --at … --wait terminal) is up and the machine is awake. A slot missed
by less than the grace window (6 h by default) starts late; past it, the run
is marked missed and waits for Run now.--after <id>, or Run after on a run page), by default only when that
run ends done (--after-any also accepts a failed or stopped one), and on
its feature branch with --source-from-previous — refactor → tests → docs,
each on the branch the previous one left.
worca config. A
per-pipeline cost limit pauses a runaway run before its next step; Continue without cap (this
pipeline) or worca resume <id> --ignore-cost-cap lifts it for that run. A total cost limit
counts pipeline and Ask Worca spend over a weekly (from Monday) or monthly (from the 1st)
window; once reached it pauses running pipelines at their next step and blocks new runs,
resumes and Ask turns until the window resets or you raise the limit. Team caps live in
Team policy.
worca-metrics branch on the project's own origin; there is no separate
metrics server. Records carry the git user name (or none, a team choice made once at enable
time), never an email address.worca metrics push [--project <path>] flushes pending run records, e.g. on a
headless machine; worca metrics pr-workflow [--project <path>] [--force] [--print] writes
that Action to .github/workflows/worca-metrics-pr-events.yml. See
docs/team-metrics.md.
worca-policy branch on the project's origin (protect it so only maintainers push). Every
teammate's Worca reads it on start and hourly; worca policy pull refreshes a CLI-only
machine. A project carries its own policy or follows another project's; a workspace uses a
policy home, a member each developer picks on their machine.default (applies until you set your own) or a soft
expectation: for a cap the tighter of team and local applies, and an off-list model, a missing
plugin or guardrails below the minimum tier warn and are recorded. Going past a team cap takes
a confirmation (with a reason when the policy requires one) and is recorded to team metrics;
unattended (--yes) runs warn instead of pausing. Only Ask Worca's web fields bind: a policy
can switch web access off or narrow its hosts, never widen them.worca policy show|pull|init|setup — init --here creates the branch,
init --follow <slug> follows another project, setup --install installs or updates the
required plugins; continue past a team cap with --past-team-cap [--reason "…"] on a run or
on worca resume. See docs/team-policy.md.ANTHROPIC_BASE_URL)
that is merged into that model's agent spawns. Share as plugin… exports your
models as a plugin scaffold: each env value is committed, omitted, or kept out of
the repo as a secret each teammate enters once, after installing, under the
plugin's Model secrets.worca --model run with that model, and other runs with the built-in
Haiku); endpoint-routed models carry Claude Code's internal
haiku/sonnet/opus/fable tier keys so nothing falls back to the Anthropic API; and
Hide built-in models drops the built-ins from every picker.worca models does the same from a terminal.
Both pages are Expert level. See docs/models.md.~/.worca-cc/worca-cc.db; plan/review markdown and per-run artifacts live
in a machine-wide store, ~/.worca-cc/store/<projectKey>/. Agent memory
sits beside them in ~/.worca-cc/memory/..git), so every git worktree
of a repo shares one history.WORCA_HOME=<dir> (or Settings › General › Worca root
folder, Advanced) puts everything under <dir>/.worca-cc/; only the
global settings.json stays in your home folder.docs/storage.md.
3/9 count, opens a
checklist of nine steps, from Connect Claude Code and Watch a run end to end to Group projects
into a workspace and Set a team policy. Every tick is derived from what you have really done,
never stored. Each tile, done ones included, starts a spotlight guide that rings the real control,
says why, and moves on when you do the real thing; Esc or Skip leaves it. Hide from sidebar
drops the pill and Settings › General › Getting started brings it back. See
docs/getting-started.md.docs/ui-levels.md.npm install -g @worca/app # puts `worca` on your PATH
Requirements:
node:sqlite; on an older
Node the CLI says so and exits.gh) is optional: it opens pull requests and issues.claude) on your PATH and signed in (claude, then /login; an
ANTHROPIC_API_KEY works too) — for real runs only; mock mode starts no
claude at all. WORCA_CLAUDE_BIN points Worca at another binary.claude.exe) and npm install -g @anthropic-ai/claude-code work: npm puts a
claude.cmd shim on PATH that Node cannot spawn, so Worca runs the package's
native claude.exe next to it instead. If that binary is still npm's placeholder
(the package's postinstall didn't run) or there is none, Worca says what to do
rather than a bare ENOENT; WORCA_CLAUDE_BIN can always point at a
claude.exe directly.Prefer the agents to run in a disposable Linux box instead of on your machine?
The same Worca ships as an image (ghcr.io/sinishadjukic/worca, amd64 and arm64,
plus a -full variant) with a Compose file. The agents cannot read your host
credentials or touch files outside the project folders you mount; the box keeps
its own Worca home and Claude login. Needs Docker or Podman with podman compose.
worca container up # writes ~/.worca-cc/container/, starts the box; UI on http://localhost:4317
worca container login # log Claude Code in, once
worca container help lists the rest (down, logs, pull, shell,
run -- <worca args>, overlays via --with egress,ssh,teams,clonein). Without
npm, download docker/compose.yml, set WORCA_PROJECTS in a .env beside it
and docker compose up -d. See docs/docker.md for login
options, git credentials, the egress allowlist, clone-in mode and Windows (WSL2).
The same image runs as an always-on service: on Railway (or any host), reachable
only through a Cloudflare Tunnel with Cloudflare Access in front, and Worca
verifying the Access token on every request itself. On Railway the agents run as
their own user, cut off from Worca's settings, database and GitHub token. Step by step:
docs/deploy-railway.md; the Cloudflare side and the
security model: docs/remote-access.md. Upgrades,
configuration and checks of a running deployment:
Operate your deployment, with
the tools/railway/worca-railway.mjs tool and this repository's
/worca-railway skill for Claude Code.
worca ui # start it (worca --ui does the same)
Open the printed URL (default http://localhost:4317), add a project, and
click New pipeline: describe the task, pick a workflow and press
Start run — turn on Mock mode beside it to try a run offline, with no
Claude calls and no cost. At the Advanced UI level the
form also takes a markdown brief or a task pulled from a plugin source like
GitHub Issues, guardrails, and Schedule… on the Start run caret. Answer
clarify questions and loop gates as they come — in the browser or from chat.
The UI is one process per machine. Starting it while it is already up is not an error — Worca prints the URL and how to restart it, and exits 0 (a port held by another program is exit 1):
worca ui status # is it running? (exit 0 = yes, 1 = no)
worca ui restart # stop the running one, start it again
worca ui stop # stop it gracefully
worca ui --port 4318 --open # another port; open the browser when up
worca ui --mock # offline mock mode for every run
--port (or the PORT env var) picks the port; stop, restart and
status remember the port of the last started UI (ui.json in the Worca
home), so they usually need no flag. See worca ui help.
Appearance. Settings › General › Appearance picks System (follow the
operating system), Light or Dark — one setting for every browser that
opens this Worca. The web UI relies on CSS light-dark() (and ::backdrop
inheriting the dialog's scheme), so it needs Chrome/Edge 123, Firefox 120 or
Safari 17.5 (or newer).
# run a pipeline against a project (--project defaults to the current directory)
worca --project /path/to/your/project --prompt "Add a /search endpoint"
worca "Add a /search endpoint" # bare prompt, from inside the project
# use a markdown brief as the prompt (a relative path is read from the project)
worca --project /path/to/your/project --file ./brief.md --title "Search feature"
# let worca pick the workflow for the task (Auto), review the proposal first
worca --project /path/to/your/project --prompt "Add a /search endpoint" --workflow auto
# Auto run with no proposal and no questions (loop-budget, recovery, cost and error pauses still apply; add --yes when nothing can answer them, e.g. in CI)
worca --project /path/to/your/project --prompt "Add a /search endpoint" --workflow auto --no-human
# pause with Ctrl+C (twice stops it), continue later (survives restarts)
worca resume <pipelineId>
# see every run from the terminal — no browser, no Worca server needed
worca runs
worca runs --status paused
worca runs <pipelineId> # one run in detail (any unique prefix; --json for machines)
# read a run's live log from the terminal; -f follows (Ctrl-C detaches, the run continues)
worca logs <pipelineId>
worca logs <pipelineId> -f
# stop a live or paused run, or pause a live one — even one started in another terminal
worca stop <pipelineId>
worca pause <pipelineId> # resume later with: worca resume <pipelineId>
# run it later: once, or on a repeat (it starts while `worca ui` is up, or this terminal waits with --wait)
worca --project /path/to/your/project --prompt "Upgrade dependencies" --at "tomorrow 02:00"
worca --project /path/to/your/project --prompt "Upgrade dependencies" --at 02:00 --wait --yes
worca --project /path/to/your/project --file ./nightly.md --every "weekdays 02:00"
worca schedule list
# offline demo — full pipeline, no tokens
worca --project /path/to/your/project --prompt "demo task" --mock --yes
# share a saved pipeline: as JSON, or as a plugin folder bundling your agents, scripts + skills
worca workflow export wf_my-flow --format json --out my-flow.json
worca workflow import my-flow.json
worca workflow export wf_my-flow --format plugin --target ./my-flow-plugin
# scripts: list, scaffold and test a script card — no server needed
worca script list
worca script new runTests --runtime shell
worca script test runTests
worca script test shell --param command="npm test" --cwd .
worca plugin init my-plugin
worca plugin new-script tidy --dir ./my-plugin
worca plugin validate ./my-plugin --run-cases
Run worca --help for every subcommand — projects (add, list,
remove), resume, runs, logs, schedule, workflow, script,
plugin, marketplace, models, config, metrics, policy,
container, broker, doctor — and flag; most have their own
worca <subcommand> help.
Exit codes, for scripts and CI wrappers: 0 the run finished (or an
interactive run paused and you can resume it); 1 a hard error, a stop, or an
interactive pause an error forced; 2 a usage error; 3 any pause under
--yes — the run parked itself (auth, quota, a usage or cost limit, exhausted
retries, a step error) with nobody attached to resume it. Nothing is discarded
on a pause: worca resume <pipelineId> picks the run up where it stopped — on
the model it was started with (--model, or the one picked in the UI) — and
the cause is printed with the pause block on stdout.
/worca skill (inside Claude Code)worca --install /path/to/your/project
This copies Worca's agents and the /worca skill into the project's
.claude/ folder (files already there are kept). Then open Claude Code in
that project and run:
/worca Add a /search endpoint with pagination
The skill starts the same deterministic orchestrator as the CLI;
/worca --ui starts the web UI.
/<set>:<skill> names, Team required skillsclaude it starts gets a short-lived token, and the broker adds the real key on the way to the providerdev.azure.com: the token, its scopes, and what does not work yetworca-metrics branchworca-policy branchclaude it spawns in a disposable Linux container: the published image, compose, worca container@worca/app versions are publishedBug reports and PRs are welcome — see CONTRIBUTING.md for
the from-source setup, mock mode, the test suite, and the PR workflow.
Development happens on the dev branch, and PRs target dev.
Everyone taking part is expected to follow the
Code of Conduct.
FAQs
Worca turns a task into reviewed, merge-ready work. A deterministic multi-agent pipeline that plans, implements and reviews in isolated git worktrees, with quality gates, budgets and a human in the loop. Web UI, CLI and chat.
The npm package @worca/app receives a total of 55 weekly downloads. As such, @worca/app popularity was classified as not popular.
We found that @worca/app demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.

Security News
PHP releases emergency patches for two critical RCE vulnerabilities as agencies urge organizations to take unpatched sites offline.

Threat Research
/Security News
A supply chain attack compromised LiteLLM 1.107.0 on PyPI and Docker, spreading malware that steals cloud credentials, developer secrets, and AI provider keys.