Skip to content

CapyAgent - a program on your own computer.

News

What is happening
with the project

Short notes about decisions and findings. Not announcements, but things that actually happened and changed the code.

numbers

The test count was recounted and can no longer go stale quietly

The site had said 910 since 22.08, while the code holds 4,617: 3,977 in the core and 640 in connectors. The figure understated the truth 4.4 times because it was typed into the page instead of coming from the source, so nothing stopped it going stale. It now lives in one place next to the command that recounts it, and the build stops when the number and the code disagree.

release

CapyAgent v1.0.10 is available as a normal desktop app

The release includes an Apple Silicon Mac DMG, a Windows installer and a Linux AppImage. First launch inspects the device, uses an available local Codex sign-in and shows discovered rules and memory before the person decides what to save.

Open release

site

The site became bilingual

Rebuilt from one page into nine, in Russian and English. Content lives in JSON per locale, and the build fails itself if the locales diverge on keys: a page with half of it untranslated looks fine, and the visitor is the one who notices.

numbers

Tests recounted from the code

910 tests as of 22.08: 639 in the core and 271 in connectors. The previous site showed 905, and the README still says 737. A number on a public page comes from the code, not from a neighbouring document.

naming

CapyAgent now has one name throughout the distribution

The program, commands, paths and new settings now share one public name. Existing installations continue through compatibility, while a new user no longer sees different names on the site, in the terminal and in the app.

Repository

browser

Local browser: actions only on listed sites

Browser actions are allowed only on sites from the list, only with confirmation, and only via a link from a snapshot. Before clicking, the connector compares the label against the live page: what you confirmed is exactly what gets clicked.

audit

Checks that written code is actually wired up

Over three days the same thing happened eleven times: code written, covered by tests, green in CI - and nothing to invoke it. Twice it was inside tasks already marked done. Now make check-wiring fails the build instead of adding a warning to a list that gets read exactly once.

security

The audit closed 21 findings

The most expensive one: the /call command had its own road into a connector, bypassing the deny list, disabled tools and confirmations. Closed. Execution now records an outcome in the journal: a trail with consent and no outcome does not answer the only question that matters - did it actually happen.

service

The core runs as a service on a production server

Scheduled jobs are executed by the agent, and a primary model failure switches to the fallback. A channel crash now brings the process down: previously the service showed as active while the bot stayed silent for days, and we heard about it from the client.

comparison

Compared against alternative architectures

After our own implementation, we compared dialogue, memory and resilience with several mature approaches. It exposed three places where load could knock out a conversation; each became a separate check.

decision

We build our own core, not a fork

Forking someone else's core means a permanent chase after upstream. Go was chosen for memory use and delivery as one binary. Connectors live outside the core as separate MCP servers, so they survive a change of core; that is what makes the product durable.

Want this by email?

There is no newsletter yet. Write to us and we will call you when something worth your attention appears.