Loops of AI agents that build your app, and finish it.

An architect, a coder, a reviewer and a tester pass the work around a ring on your own machine. When the tasks run out, you get a finish report, with your app one press away in a live preview.

Free with free models, your own keys or local ones · Windows, macOS, Linux

One prompt stops when the model stops.

Ask a single model for an app and you get one answer. In a loop, that answer is the first pass: the next bubble reads it, a failed check sends it to the fixer while the loop waits, and the ring turns again.

One prompt

PromptModel wrote 14 files
  • Reviewedno
  • Tests runno
  • Starts with one commandunknown

A loop example log

  1. traverse 1CoderWrote app/src/App.tsx (+142/-0)PASS
  2. traverse 1ReviewerVisual Review: Failed — 2 blockingFAILFixer
  3. traverse 1FixerEdited app/src/App.tsx (+9/-4)PASS
  4. traverse 1Testernpm test exited 0PASS
  5. traverse 2ReviewerVisual Review: Passed — 0 blockingPASS
How it works

From a sentence to a board that runs.

  1. 01

    Tell the Manager what you are making.

    The Manager is a chat that plans the board with you. In Plan mode it reads your folder, asks what it needs to, and writes cards into the Task Book once you agree.

  2. 02

    Switch to Build.

    Build proposes the loops: who sits in each ring, which folder each one may change, and where work goes when a check fails. Nothing is placed until you press Build it.

  3. 03

    Press Play. The loops run at once.

    Each bubble runs one pass, and its output is the next bubble’s input. By default a Sub-loop runs when the bubble before it fails, so a failed review goes to the Fixer while the loop waits. Caps stop a loop that keeps failing instead of letting it spend all night.

  4. 04

    Get it back finished.

    When a run runs out of work on its own, the app writes a finish report from the run’s record, with a live preview of your app beside it.

A habit tracker. One page, React, saved in the browser.

I’ll draft the cards once one thing is settled.

Waiting on 1 decision

When should a day’s habits reset?

At local midnight recommendedWhen the app is first opened each dayOr write your own…

Build this board?

Appwrites app/
ArchitectDesignerCoderReviewerFixTester
Fix · ON_FAILFixer
Docswrites docs/
ResearcherDocumenter
AppReviewer · traverse 4Max loop executions19 of 100
DocsDocumenter · traverse 2Max loop executions4 of 100

Task Book

0Draft
3Approved
2Implementing
1Review
6Done
0Blocked
CoderPASSReviewerFAILFixer

The app is finished — its report and preview are ready

The run completed and wrote a finish report: what was built, how to run it, what was tested and what is missing.

Finish report
Live previewRunning

The parts that keep a loop honest.

Long runs work when every bubble has a clear job, a limited reach and somewhere to send its mistakes.

Several loops, one board

Each loop runs its own lane at its own pace. Loops trade work through the Task Book and the files on disk, never through each other’s context.

Four Manager modes

A mode is what the Manager is allowed to change. Only you switch it, and Build writes no code.

A guard on every command

Commands are parsed before they run. Commits and deletions ask first; shells, remote access and paths outside the project are refused.

  • Anthropic
  • OpenAI
  • Google
  • OpenRouter
  • NVIDIA
  • Ollama
  • LM Studio

Seven providers, your keys

Pick a model per bubble, or a pool of up to eight that moves to the next when one is rate-limited or down. Free tiers and local models count.

Lessons it keeps

When a call is refused, the loop mines a lesson from it, and the next pass is given it. You can accept, reject or forget each one, and set how sure it is.

Finished means something you can check.

A run that completes on its own hands over three things. You read what happened instead of asking a model how it went.

ReportFinished
  • Runs with one command, from a README
  • Tests pass
  • Presentable — the visual review passed

What was built

  • app/src/App.tsx+142
  • app/src/habits.ts+61
  • app/src/App.test.tsx+48
  • app/README.md+22

Task Book cards done: 9

How to run it

Install first:

npm install

From README.md:

npm run dev

What was tested

npm test

Passed, 9/29/2026, 2:14:07 PM.

What’s missing

Nothing the run’s record can see.

Visual review: passed

1280 × 800 and 390 × 844 · 0 blocking

Runninglocalhost:5173
Today6-day streak
  • Read 20 pages
  • Walk 30 minutes
  • No phone after 22:00
+ Add a habit
Example handover from a small habit-tracker run.
  1. Visual review

    The reviewer opens the app in a real browser at desktop and phone widths. Blank pages, overflow, broken images and placeholder text fail it outright. If you have set a vision model, it also judges the screenshots against your DESIGN.md. The report’s Presentable line carries its verdict.

  2. Finish report

    Built from the run’s own record, with no model asked to grade itself: what was built, the command that runs it, the last test run and its exit code, and anything still missing.

  3. Live preview

    Your app’s dev server, one per board and held apart from the run. A new run does not stop it, so a Vite app keeps following the loop’s edits. Start, restart and stop it from the Report tab.

It runs where your code is.

Perfica is a desktop app. Your code goes only to the model you pick, and with a local model it never leaves the machine.

Runs on your computer
Every run and every Manager turn is held by a process on this machine. There is no Perfica server between you and your code.
Keys stay on this device
Stored encrypted (AES-256-GCM) on this machine and never kept in the page. The app holds no key of its own.
No account needed
Everything works without one. An account only adds sync, which is what Cloud is for.
Your project stays a folder
The board, the Task Book and the run history live in a folder inside your project that keeps itself out of git. If the folder is not a git repository yet, Perfica makes it one, so every pass can be committed, and says so first. It never does that to your home folder or a drive’s root.
Secrets are off limits
Agents cannot read .env files, keys or certificates, and their commands run without variables named like KEY, SECRET or TOKEN.
Nothing big fetched without asking
The sandbox’s Docker image, the agents’ browser and the dictation model are downloaded only when you turn them on. Updates and the model price list come from GitHub.
Pricing

Free to run. Cloud when you want sync.

Free

$0

The whole app. Every loop, bubble, mode and tool.

  • Your own keys for Anthropic, OpenAI, Google, OpenRouter or NVIDIA
  • Free models from a free OpenRouter or Gemini key, or local ones through Ollama and LM Studio
  • Command sandbox, web search, visual review, finish report and preview
  • No account
Download

Cloud

Coming soon

$36/ year

Everything in Free, across all your machines.

  • Boards synced across your devices
  • An encrypted vault for your provider keys, handed only to the app on a signed-in device
  • Billed yearly

Cloud cannot be bought yet. Nothing in the app needs it.

Questions, answered plainly.

More in the docs.

What does Perfica cost?

The app is free. You pay your model provider for what your bubbles use, or nothing if you run free or local models. Cloud, when it opens, is US$36 a year.

Can I start without paying for a key?

Yes. Start free, the first screen of setup, walks you through a free OpenRouter key and a free Gemini key in about two minutes, and your first loop runs on free models. When a free tier runs out for the day, the loop pauses and starts again by itself. Ollama and LM Studio run models on your own machine with no key at all.

Does my code leave my computer?

Only as part of the prompts your bubbles send to the model provider you chose, and as search queries when an agent searches the web. With a local model through Ollama or LM Studio, the prompts never leave the machine.

What does “finished” mean?

A run hands over when it runs out of work on its own. The report calls it finished when the README gives one command to start the app, the last test run passed, no bubble ended on FAIL or ERROR, and the preview did not crash. Anything short of that is listed under “What’s missing”. It also says whether the app is presentable, from the Reviewer’s visual review, without making that a condition of finished.

Can the agents run anything they like?

No. Each bubble holds only the tools its role grants, and its file tools write only inside its loop’s folder. With the sandbox on, its commands are held there too. Commands pass a guard that allows, asks or refuses; commits, pushes and deletions ask you first unless you turn on Full Auto.

Which models can I use?

Anthropic, OpenAI, Google, OpenRouter and NVIDIA with a key, and any model you run in Ollama or LM Studio. A bubble can use one model or a pool of up to eight that moves on when one is busy or out of quota.

Why does Windows warn me when I install it?

The builds are not code-signed yet, so Windows SmartScreen warns the first time. For the same reason the macOS app cannot update itself; download new versions from the releases page.

What is Cloud?

An optional yearly plan, US$36, for syncing your boards across devices and keeping your keys in an encrypted vault. It is not on sale yet.

Give it a project. Get back an app that runs.

Windows · macOS · Linux