Pimpo
Documentation

Pimpo — Complete plan#

Working name. Premises: free and open source, local-first, no deadlines (each phase ends at a gate). Priorities and UI decisions were evaluated with Jev (TypeSafe System One). The raw data is in jev/, and the method is in Appendix A. Community validation: on hold by Dener's decision.


0. One-page summary#

What it is: a free, local personal AI agent that does what OpenClaw and Hermes do (chats over Telegram, reads email and calendar, automates tasks), but was designed from their failures.

The core idea — the agent that turns into software:

  1. The first time, the agent solves the task with an LLM and asks for approval for anything that cannot be undone.
  2. When it works, it compiles the task into a routine: readable code, with tests and a list of what it may touch.
  3. The routine runs on its own on schedule, without an LLM, for cents. A judgment model only steps in for specific decisions ("is this email important?").
  4. If something changes, the routine stops, alerts you and proposes a fix that you approve.

Why it beats both: they send every request through the LLM, every time. That is where the unreliability (the #1 reason people quit), the cost (up to $131 a day) and the forgotten rules (the case of the 200 deleted emails) come from. Pimpo is also secure by construction: rules outside the model, minimal capabilities, approval on the phone, invisible keys, a receipt and undo for everything, and a real spending limit (neither of them has one).

The interface (validated with Jev): chat to talk and approve, plus a local web interface to see and control. The main screen is Routines. The moment that makes someone say "wow" is seeing the task that just ran turn into a routine, with the cost dropping to zero.

The full path (section 8): 13 phases, from the first commit to a mature project. First build the core (F0–F4: compiler, security, UI, three perfect uses). Then open up to the world (F5–F8: installation, migration, family, gallery, connectors). Finally expand and mature (F10–F12: native apps, protection network, longevity; F9, small business, was removed).

First milestone: the morning brief runs 30 days in a row as a compiled routine, with LLM cost close to zero and no silent failure.


1. The problem, with evidence#

PainEvidenceStructural cause in the competitors
Not reliable#1 reason for quitting in the Hacker News threads about OpenClaw; "a cron job does the same"Every request is re-decided by an LLM
Expensive and unpredictableHeartbeat of $18.75 per night; reports of up to $131 per day (Notebookcheck, OpenClaw docs)Whole context resent every turn; no spending limit (O#42475, H#6839)
Forgets rules and does damageA Meta researcher had more than 200 emails deleted after context compaction removed "confirm first" (TechCrunch, February 23, 2026)Rules live only in the model's context
Insecure135,000 exposed instances, CVEs rated 9.9; malicious skills on ClawHub; banned at Meta, Google and AmazonApprovals off by default; skills with full power; keys readable by the agent (O#7916)
Cannot see or undoOpenClaw's audit log does not store arguments; Hermes has no audit table; rollback requests unanswered (H#12238, O#153257)Observability and reversibility are not part of the design
Hard to maintainAbout a 25% chance that an update breaks delivery; more than 5,000 open issues in each projectLarge stacks (Node, Python, Docker) and a fast pace

The space is open: OpenClaw entered "stabilization mode" (#5799) and closes feature requests automatically. Hermes leaves governance stuck in needs-decision. Requests for per-tool approval, auditing and spending limits had their PRs closed without merge.


2. Who it is for#

Persona 1 — Marina, the burned enthusiast (first target)

Persona 2 — Carlos, the small-business owner (second target)

2.1 User research, ongoing and private#

Jev pointed to "talking to real users" as the biggest gap in every review (up to 0.97). Public promotion is on hold, but private research is not promotion. Proposal, subject to decision #5:

PhaseResearchWith whomWhat it decides
F15 interviews showing the compilation moment (prototype or video)People who used and dropped OpenClaw or HermesWhether the routines idea solves their pain; which three uses to prioritize
F23 sessions on approvals and rulesThe same peopleThe wording of approvals and the annoyance limit
F3Usability test with a fixed script (the phase gate)5 new peopleWhether the UI tells the story on its own
F4Usage diary for 2 weeks3 people using it for realReal failures, trust, perceived cost
F5Closed beta of installation and migration10 people, technical and non-technicalWhether it is ready for v1.0

Each round ends with a short record (what was learned and what changes in the plan), kept alongside the code.

Out of scope, for now: companies with compliance requirements (Microsoft and NVIDIA are there) and developers who want a coding agent (Claude Code and Codex cover that).


3. Product principles#

  1. One routine is worth more than a thousand conversations. What repeats becomes software. The LLM is for what is new.
  2. Nothing irreversible without you. And almost everything is reversible.
  3. The rules are yours, not the model's. They live outside the context and the agent cannot edit them.
  4. Everything has a receipt. If it happened, you can see what, why, how much it cost and how to undo it.
  5. Never fail silently. Every failure becomes an alert on the phone.
  6. Predictable cost. Hard budget, monthly projection, no surprises.
  7. Few things, done perfectly. Three flawless uses before 150 integrations.
  8. Explain it as you would to a person. No jargon in the interface. "Will delete 212 emails from the Work folder", not gmail.messages.batchDelete.

4. Prioritized features (evaluated with Jev)#

Scale from 0 to 3 for user value, differentiation against OpenClaw and Hermes, technical risk and MVP need. Priority is 0.45×value + 0.35×differentiation − 0.2×risk.

4.1 MVP core (need ≥ 2.2), split into two deliveries#

The morning brief only reads data and sends it to you. It has no irreversible action. That is why the technical proof (F1) can be small, and the full security package comes right after (F2), before any case that writes or deletes.

F1 — the proof (v0.1)

FeatureValueDiffer.RiskMVPVersion in F1
Routine compiler2.972.631.732.98Complete; it is the proof
Scheduler2.941.311.052.99Fixed time (cron)
Morning brief2.761.351.532.99Calendar + important emails
Exploration mode2.191.191.622.88Only with read capabilities and sending to the owner
Telegram channel2.761.171.302.79Chat and alerts
Per-routine capabilities2.942.331.192.69Manifest checked at runtime
Spending limit2.952.881.012.58Simple daily limit, checked before each call (highest overall priority: 2.13)
Calibrated judgment steps2.562.551.592.35One judgment: "important email?"
Health watchdog2.702.291.172.26Every failure becomes an alert
UI: Routines (minimal)2.612.450.891.63Card with runs, cost and capabilities; chosen by Jev as the main screen

F2 — secure by construction (v0.2)

FeatureValueDiffer.RiskMVPWhy in F2
Approval on the phone2.911.920.882.92Needed from the first case that writes or deletes
Rules engine outside the model2.952.741.632.74Same; solves the 200 emails case
Credential broker2.792.451.362.52In F1, the few credentials stay in the local vault
Self-repair by diff2.462.681.932.44High risk; in F1, a failure only alerts
Undo2.812.531.532.36Only makes sense with write actions
Audit with arguments2.802.641.352.32In F1, the event log already records; F2 adds chaining and verification
UI: Receipts2.902.571.032.30Second highest overall priority (2.00); ships together with undo

4.2 v1 (high value or differentiation, outside the MVP core)#

4.3 Later#

Two honest surprises from Jev:


5. UX and UI#

5.1 Decisions validated with Jev#

5.2 Interface principles#

  1. Show what the agent can do as concrete objects, not as conversation. A routine is a card with a name, schedule, health, cost and capabilities, not a prompt lost in the history.
  2. Every action has three layers of detail: the human sentence ("Archived 14 newsletters"), the technical summary (tool and target) and the full arguments, on demand.
  3. Color means risk, not decoration. Green for read, amber for reversible write, red for irreversible. The same language appears in Telegram (emoji) and on the web.
  4. Never an empty screen without a next step. The empty state of Routines is "Ask for something you do every week".
  5. Cost always in view, discreet, on every routine and every exploration.
  6. Motion with purpose: the compilation is animated (the conversation condenses into a routine card). It is the only place with striking animation, because it is the product's moment.

5.3 Information architecture (web)#

┌ Sidebar ────────────────┐
│  Routines        (home) │  routine cards + "New task"
│  Needs you         (3)  │  pending approvals and alerts
│  Receipts               │  timeline of everything that happened
│  Rules                  │  rules in natural language
│  Cost                   │  spending, budget, projection
│  Memory                 │  what the agent knows, with provenance
│  Connections            │  Gmail, calendar, Telegram, models
│  Settings               │
└─────────────────────────┘
 Top: search (⌘K) · today's budget ($0.04 of $1.00) · health status

5.4 The screens#

Routines (home)

Routine detail

New task and live exploration

Needs you

Receipts

Rules

Cost

Memory

Connections

Onboarding (first run)

  1. "Hi, I'm Pimpo." Three short screens explaining: routines, rules and receipts.
  2. Connect Telegram (QR code or bot link).
  3. Connect the model (API key, or a local model via Ollama).
  4. "What can I do without asking you?": three simple options (conservative, balanced, liberal), which become editable rules.
  5. Daily budget, with a suggested value.
  6. The first task: "Do you want a summary of your calendar tomorrow at 7 a.m.?", which leads straight to the compilation moment.

5.5 The design of Telegram messages#

Telegram is half of the interface and follows the same system:

5.6 Visual language#

5.7 UX metrics#


6. Technical architecture#

6.1 Overview#

 Telegram ◀────────────┐                     ┌──────▶ Web UI (PWA, React)
                       │                     │
 ┌─────────────────────┴─────────────────────┴───────────────────────────┐
 │ pimpo — a single Go binary                                              │
 │                                                                         │
 │  Channel gateway ──▶ Conversation ──▶ Exploration (tool loop) ─────────┐ │
 │                                          │                             │ │
 │                                          ▼                             │ │
 │                                  Routine compiler                      │ │
 │                    (code + tests + capability manifest)                │ │
 │                                          │                             │ │
 │  Scheduler ──▶ Routine runtime (JavaScript on goja, pure Go) ───────────┤ │
 │                                                                        ▼ │
 │                     Policy engine  ◀── user rules                        │
 │              (capabilities · rules · risk · budget · approval)           │
 │                                          │                               │
 │         ┌───────────────┬────────────────┼────────────────┐              │
 │         ▼               ▼                ▼                ▼              │
 │   Connectors       Credential         LLM layer        Judgment          │
 │ (Gmail, calendar,  broker            (providers,      (Jev · local model │
 │  weather, HTTP)    (local vault)      spend proxy)     · cheap LLM)      │
 │                                                                          │
 │  Storage: SQLite (append-only events, chained audit)                     │
 │  Memory: versioned Markdown files (embedded git, go-git)                 │
 │  Health watchdog · HTTP + WebSocket API for the UI                       │
 └──────────────────────────────────────────────────────────────────────────┘

6.2 Stack#

6.3 Data model (main entities)#

6.4 Compiled routines in detail#

Format

// routine: morning-brief v3
export const manifest = {
  schedule: "0 7 * * *",
  capabilities: ["gmail.read:inbox", "calendar.read:primary", "http.get:api.open-meteo.com", "telegram.send:owner"],
  judgments: { important: "Is this email important for the owner today?" },
};

export default async function run({ gmail, calendar, http, telegram, judge }) {
  const events = await calendar.today();
  const mails = await gmail.unread({ since: "24h" });
  const important = [];
  for (const m of mails) {
    const j = await judge.important(m);          // calibrated probability
    if (j.p >= 0.7) important.push(m);
    else if (j.p >= 0.4) important.push({ ...m, unsure: true });
  }
  const weather = await http.getJSON("https://api.open-meteo.com/v1/forecast?...");
  await telegram.send(formatBrief(events, important, weather));
}

Lifecycle

  1. Exploration: the LLM uses the same capability functions, and every call is recorded (input and output).
  2. Compilation: the LLM receives the exploration record and generates code, manifest and tests. The tests replay the recorded inputs and check the outputs and the calls.
  3. Verification: the code runs in the isolated runtime against the tests. The manifest is checked: no call outside the declared capabilities is possible.
  4. Review: the user sees the card (capabilities, estimated cost, tests) and turns it on.
  5. Execution: the scheduler runs it without an LLM. Every call goes through the policy engine.
  6. Breakage: a capability error, an API format change or a judgment that is too uncertain (configurable threshold) stops the run, alerts and opens a repair exploration.
  7. Repair: the LLM proposes a diff, and the tests (old and new) must pass. The user approves the diff and a new version is born.

What does not become a routine: one-off tasks or tasks that are too open-ended. They stay in exploration mode, equally protected by the policy engine.

6.4.1 Specification: when a task is compilable#

The compiler only proposes a routine when all conditions hold. The conditions are checked by code, and the ones that depend on judgment go through the judgment backend:

  1. Repetition: the user asked for recurrence ("every day", "whenever it arrives"), or the same intent showed up 2 or more times.
  2. Verified success: the exploration ended without error, without a denied action and with the result approved by the user (a 👍 or "looks good").
  3. Stable structure: the capability calls of the exploration form a sequence that can be written as code with loops and conditions. It does not depend on reading free text to decide which tool to call next.
  4. Isolable judgments: every decision that requires interpretation fits in a closed question (yes or no, choice among options, a score), with a well-defined input (an email, an event). Open questions ("write a reply") are not judgments: they become an explicit, budgeted LLM call inside the routine, marked on the card as "uses LLM".
  5. Testable: the recorded inputs make it possible to replay the run without the network.

Compiler success measure: the fraction of eligible explorations whose generated routine passes its own tests on the first attempt, and the fraction of routines that run 30 days without a fix. Both are measured in the routine benchmark (section 7).

6.7 Privacy and data#

6.5 Policy engine#

6.6 Threat model (summary)#

ThreatDefense
Prompt injection in an email that is readExternal content is marked as untrusted; minimal capabilities; irreversible actions always approved; the content does not become instruction memory
Malicious skillRuns in the isolated runtime with minimal declared capabilities; no shell, no network outside the list
Key leakThe agent only sees aliases; the broker injects the value on the way out and the value never goes back to the model
The agent edits its own rules or manifestRules and manifests only change by user action in the UI or in Telegram, with a receipt
Runaway spending or loopBudget checked before each call; step limits per exploration
Interface exposed to the internetListens only on localhost by default; remote access only through an authenticated tunnel; token required
Tampering with receiptsEvents chained by hash; verification in the UI

7. Engineering and quality#


8. Complete roadmap#

From the first commit to a mature, sustainable project. No deadlines: the order matters, the duration does not. Each phase has goal, deliverables (product, UI, technology), quality, gate, metrics and dependencies. A phase only starts when the previous phase's gate has been reached. The exception is what is marked as parallel.

            ┌──────────── Build the core ────────────────┐
F0  Foundation and compiler proof
F1  The compiled routine ───────────────────────────▶ v0.1  experimental
F2  Secure by construction ─────────────────────────▶ v0.2
F3  The UI that tells the story ────────────────────▶ v0.3
F4  Three perfect uses ─────────────────────────────▶ v0.4
            ┌──────────── Open up to the world ──────────┐
F5  Installation without a terminal + migration ────▶ v1.0  first stable version
F6  Memory with provenance + family + WhatsApp ─────▶ v1.1
F7  Gallery of routines and skills with capabilities ▶ v1.2
F8  More channels and connectors ───────────────────▶ v1.3
            ┌──────────── Expand and mature ─────────────┐
F9  (removed: small business is not the focus)
F10 Native apps (desktop and phone) ────────────────▶ v1.5
F11 Shared protection network + Guard ──────────────▶ v2.0
F12 Longevity: SDK, languages, audit, LTS ──────────▶ v2.x

F0 · Foundation and compiler proof#

F1 · The compiled routine → v0.1 (experimental)#

F2 · Secure by construction → v0.2#

F3 · The UI that tells the story → v0.3#

F4 · Three perfect uses → v0.4#

F5 · Installation without a terminal and migration → v1.0 (first stable version)#

F6 · Memory with provenance, family and WhatsApp → v1.1#

F8 · More channels and connectors → v1.3#

F9 · (removed)#

F10 · Native apps → v1.5#

F11 · Shared protection network and Guard → v2.0#

F12 · Longevity → v2.x#


9. Complete feature map#

All 46 features evaluated by Jev, with the phase in which they come in. The numbers are the calculated priority (0.45×value + 0.35×differentiation − 0.2×risk).

PhaseFeatures
F0Compiler proof · binary base · minimal Telegram · design tokens
F1Routine compiler (1.91) · Scheduler (1.57) · Morning brief (1.41) · Exploration mode (1.08) · Telegram channel (1.39) · Capabilities (1.90) · Daily spending limit (2.13) · Calibrated judgments (1.73) · Health watchdog (1.78) · Minimal Routines UI (1.85) · Any provider by API (0.42) · Single binary (1.40)
F2Rules engine (1.96) · Approval on the phone (1.81) · Credential broker (1.84) · Audit with arguments (1.91) · Undo (1.84) · Self-repair (1.66) · Sandbox by default (1.49) · Receipts UI (2.00) · Needs you UI (1.41) · Basic Rules and Cost UI
F3Full Cost UI (1.82) · Rules UI with testing (1.69) · Live exploration UI (1.62) · Onboarding UI (1.51) · Anti-annoyance (1.52) · PWA UI (0.85)
F4Email triage (1.49) · Versioned memory (1.53) · Memory UI (1.39) · Local judgment model (1.68) · Safe update (1.31)
F5Migration (1.52) · Import skills from the ecosystem (0.70)
F6Memory with provenance (1.69) · Family mode (0.90) · WhatsApp channel (0.81)
F7Routine gallery (new, derived from F5)
F8Email channel (0.78) · Voice (0.95) · Claude or ChatGPT subscription as the brain (0.75) · Connector SDK
F9~~Small-business back office (1.26)~~ removed by Dener's decision
F10Desktop app (0.83) · Phone app (0.68)
F11Shared protection network (1.14) · Guard plugin (1.08)

10. Connector catalog by phase#

Each connector declares capabilities with a risk level: 🟢 read, 🟡 reversible write, 🔴 irreversible.

PhaseConnectorCapabilities
F1Google Calendar🟢 read events
F1Gmail (IMAP)🟢 read messages
F1Telegram🟡 send to the owner
F1HTTP (domain list)🟢 GET on declared domains
F2Gmail🟡 archive, label, draft · 🔴 send, delete (made reversible: delayed send, trash)
F4Google Calendar🟡 create event (reversible)
F4Local files🟢 read declared folders · 🟡 write with snapshot
F5Gmail (OAuth), Outlook and generic IMAPread and write as above
F6WhatsApp🟡 send to the owner · 🔴 send to third parties (always approved)
F8Notion, Obsidian🟢 read · 🟡 write with history
F8Todoist, Google Tasks, Apple Reminders🟢 read · 🟡 create and complete
F8Home Assistant🟢 read states · 🟡 reversible actions · 🔴 critical physical actions (locks, alarm) always approved
F8GitHub🟢 read issues and PRs · 🟡 comment
F8RSS and web pages🟢 read
F8Weather, package tracking, exchange rates🟢 read
F8Spreadsheets (Google Sheets, CSV)🟢 read · 🟡 write with history
F8Local OCR for photos🟢 local

Permanent rule: no bank or brokerage connector with the capability to move money. Read only, and only after F12, with an audit.


11. Project operations#

Versions and releases

Updates

Support and reports

Security

Documentation

Terms of use and legal risks

Languages


12. Community and sustainability (all free)#


13. Metrics#

MetricTarget
LLM cost per routine runClose to zero; compared with the same task with an LLM on every run
Runs with silent failureZero
Successful runs over 30 daysMore than 99%
Irreversible actions without approvalZero
Approval requests per dayFewer than 5
Deviation between spending and budgetZero or negative
Successful explorations that become routinesMore than 50% of repeated tasks
Time to the first routineLess than 5 minutes
Time to migrate from OpenClaw or HermesLess than 5 minutes

14. Risks and responses#

RiskResponse
Compiling tasks into reliable routines does not work well (the core bet)That is F1, with a single case and a 30-day gate. If it fails, the product is still worth it as a "secure by construction agent", but it loses its big differentiator, and the plan is reassessed before moving on
Google connectors require app verification for sensitive Gmail scopesEach user creates their own OAuth client (guided in the UI) or uses IMAP with an app password; consider verification only when there are users
Few tasks repeatOne-off tasks stay in exploration, which is already protected. The initial focus is precisely the repetitive uses (brief, triage)
External APIs changeThe health watchdog detects it and self-repair proposes a diff; never silence
Too many approvals become annoyingAnti-annoyance and a risk classifier; a target of fewer than 5 requests per day
The competitors' huge communitiesDo not compete on quantity: win over those who got burned, with migration in 1 command
They copy the ideaIt would require rewriting their core (everything goes through the LLM) and building capability-based security; even so, speed and focus
Dependence on Jev for judgmentsPluggable backend; the local model and the cheap LLM make sure the product works without it
False sense of securityDocument honestly what each layer guarantees and what it does not

15. Pending decisions (Dener's)#

  1. Final name (check trademark and domain).
  2. Default judgment backend: Jev (better calibration, requires a key) or a local model (free, offline, less accurate). Recommendation: Jev when there is a key, local model as the free default from F4.
  3. Routine language: JavaScript on goja (LLMs write JS well; pure Go) or Starlark. Recommendation: JavaScript on goja, the change Jev most recommended for the MVP.
  4. Compiled policy language: CEL (Google's standard, simple and safe) or our own DSL. Recommendation: CEL.
  5. Private conversations with users during F1: Jev pointed to "talking to real users" as the piece most missing from the plan (0.84). This is different from public promotion, which is on hold: it would be 5 private conversations with people who used OpenClaw or Hermes, showing the compilation moment. Recommendation: do it, without a public announcement.
  6. Gmail access: IMAP with an app password (simple, works today) or OAuth with each user's own client (more secure, more tedious setup). Recommendation: IMAP in F1 and guided OAuth in F3.
  7. When to come off the hold on community promotion (F5 and F7 depend on it).

16. Long-term vision#

Where Pimpo wants to get to: to be the standard, trustworthy way to have a personal agent. Not because of the number of integrations, but because it is the only one people trust to leave running on its own.


Appendix A — How Jev was used#

Appendix B — Result of Jev's review#

Three rounds of review, with fixes between them.

Question about the whole plan1st roundFinalReading
Would the result be better than OpenClaw and Hermes for the target audience? (0–3)2.752.75"Clearly better on the pains that make people give up"
Is the order of the phases correct?0.880.88Yes
Does the UI make the two "wow" moments visible?0.880.89Yes
Do F0 and F1 fit one person with coding agents?0.500.52Uncertain: Jev has no way to know, and the uncertainty is concentrated in the compiler (0.81 as the biggest threat)
Biggest riskcompiler (1.00)compiler (1.00)That is why F0 starts with the compiler proof and has a gate that stops everything if it fails
Most missing piecetalking to users (0.84)talking to users (0.82)Became pending decision #5 (private conversations, no promotion)

Actions taken from the review:

  1. F0 now starts with the compiler proof (10 recorded tasks, 8/10 gate).
  2. The specification of what is compilable was created (6.4.1).
  3. F1 was trimmed down: no automatic self-repair (moves to F2), minimal connectors, minimal UI.
  4. The MVP table was split into F1 and F2, because the morning brief has no irreversible action.
  5. The routine runtime became goja, the change with the most impact according to Jev (0.66 against 0.13 for the second option).
  6. The privacy and data section was created (6.7).
  7. Private conversations with users came in as a pending decision.

About the uncertainty on scope: a probability near 0.5 means Jev sees similar arguments on both sides, not that it thinks it does not fit. The right answer is not more text in the plan, it is running the F0 compiler proof, which settles the question with data.

Review of the complete plan (roadmap F0–F12)#

QuestionBefore the fixesAfter
Is it a complete plan, from the first commit to a mature product?0.960.96
Are the post-v1.0 phases as detailed as the early ones? (0–3)2.332.57
Is the UI covered across the whole lifecycle?0.800.73
Biggest gaptalking to users (0.97)talking to users (0.94)

Verifiable gates per phase (probability that the gate can be checked without subjective judgment):

PhaseBeforeAfter
F10.470.80
F20.560.80
F30.450.63
F40.240.61
F50.510.58
F60.540.78
F70.360.49
F90.480.67
F110.480.53

What was done: every gate now has numbers and a verification source (event log, CI tests, recorded sessions, repository history); the ongoing private research plan came in (2.1); the terms of use and legal risks section came in (11).

What remains open, honestly:

Appendix C — Technical decisions for F6 to F12 (Jev)#

Made with tools/jev/decisions_later.py (result in decisions_later.json), before each phase:

DecisionChoiceProbabilityClosest alternative
WhatsAppOfficial API (Cloud API)0.56local bridge (0.26), with the risk of the number being blocked
Gallery signingauthors' Ed25519 keys0.74Sigstore (0.25)
Voicelocal whisper.cpp0.51provider API (0.26)
PDFpure Go library0.84Typst (0.09)
Photoslocal Tesseract0.51Tesseract with fallback to the model (0.35)
Phone alertsTelegram as the push channel0.53ntfy (0.44)
Connector SDKMCP processes over stdio0.47compiled Go packages (0.43)
Protection networksigned static file in a repository0.95own API (0.05)

Two changes from the original plan, both because of the decisions above: the gallery uses Ed25519 keys instead of Sigstore, and the phone app uses Telegram (and the generic channel) for instant alerts instead of its own push.

The local judgment model was measured before becoming the default: on its own it is 85% accurate; in a cascade with Jev, sending only the 22% of uncertain answers, it is 92% accurate (Jev alone: 94.5%). That is why the local backend runs in a cascade.

This page is built from the repository's documentation. Improve it on GitHub.