Penstock
a self-hosted agent harness that logs what it did, and reads from a Cistern pod only what you granted · Java · Spring Boot
Penstock runs your agents on your data, with receipts: a self-hosted agent harness for the work that happens where no editor is open (CI hooks, chat commands, scheduled triage) against your own internal systems, on models you choose. With database storage (SQLite in the shipped Compose file, or Postgres), every model call and every tool invocation is written to an audit log the owner reads back.
Its pod tool asks a Cistern pod for a file over plain HTTPS with its own credential. It gets only what was granted and is refused the rest, and what it read is receipted on the owner's side.
v0.5.3 is live: a jar, a bill of materials, a multi-architecture image, the Agent Client Protocol mode for editors, and a local MCP server that gives Claude Code and Claude Desktop the memory it keeps. v0.5.3 went through a stranger test on 17 October 2026: it installed and ran from the published jar and docs alone, with nothing blocking. Two documentation faults it found are being fixed (penstock#171) and the image was not part of the test, so it has not cleared the test the way Cistern has. Run it on your own machine for now, not on a network.
Where it stands
- Todaythree surfaces (web, REST, streaming), pluggable models including a local one, and, with database storage, an audit log of every model and tool call, attributed to the authenticated user and readable in the app
- Nowthe pod tool has shipped: Penstock asks a Cistern pod for a file over plain HTTPS as its own principal, is refused outside its grant, and what it read is receipted on the owner's side
- Since v0.3.0it speaks the Agent Client Protocol, so it runs as a selectable agent inside an editor that speaks ACP: read-only tools unprompted, every mutating tool behind the editor's own permission prompt
- Since v0.4.0it remembers. With memory switched on it recalls the facts, recent episodes and patterns for the project from a memory root you own before each model call; since v0.5.0 it gives Claude Code and Claude Desktop the same memory over MCP; and since v0.5.2 the model is asked to cite the card behind each decision and to propose what it learned, never to write a fact
- Nextclearing the stranger test: the two documentation fixes; the image is still untested. Each release's image is scanned and the report attached: from v0.1.0 to v0.5.3 the high and critical total went from 138 to 17. Three distinct criticals remain, all in Spring Framework 6.2 with a fix listed only in Spring Framework 7: one is not reachable and guarded by a test, two are being checked. Every scan report is attached to its release