Last weekend, I spent time setting up OpenClaw. Within 4 hours, I had hit $20 in usage (thank you, spend caps!). It was clear that if I wanted to experiment with this type of software, my clanker would need to run within the bounds of subscription pricing.
For the purpose of this post, I’ll refer to the software repo I’m using (epiphyte) as my “claw” and the instance of that software with a set of memory/skills/identity as my “clanker” (briar).
For those unfamiliar, the broad-strokes thing that claws offer are “just” persistent memory across repeated invocations. In the same way as you could say “An LLM is just f(x: text) => text”, a claw is just cron + LLM + a scratch pad. It turns out to be more powerful than that definition would give it credit for.
How does epiphyte compare to OpenClaw?#
On the face, this does approximately the same thing as OpenClaw. It’s an agent who runs on a timer/cron. It has the ability to communicate to me through messaging (telegram). It can read and write its own memory files as well as identity files (SOUL.md, USER.md, etc), which it uses to increasingly build context. Its skills allow it to reach the external world in defined pathways.
Differences#
OpenClaw is 600k+ lines of typescript with a skill registry that’s 17% malware. Epiphyte is 2,000 lines of Go.
Instead of API based pricing, I’m using my Claude subscription by repeatedly invoking claude -p and parsing the json output. This is a big point of consternation as of February 2026. The terms of service for using other agentic harnesses with a Claude subscription are increasingly being cracked down on and folks are being banned. While the rules are a bit murky, Thariq, an Anthropic employee, has explicitly said that this specific usage pattern is fine.
We want to encourage local development and experimentation with the Agent SDK and claude -p.
I’m not isolating my clanker through docker containers. I found that mapping in folders and getting relevant access to be too difficult on the DX front. Instead, I’m using lighter-weight kernel isolation through Luke Hinds’s nono which hooks into OS security primitives to ensure the agent can’t see/edit files/tools I don’t want it to. The fact that my tool is using the claude process is a net benefit over the Agent SDK here because I can apply nono to it, but do well-defined things outside of the sandbox.
I explicitly limit the times that the tool can communicate to me though an outbox pattern. The outbox enforces quiet hours so I’m not woken up in the middle of the night because the agent thought I should know something / take some action.
Architecture#
The core loop is built around claude -p invocations. That looks like this:
claude -p "<prompt>" \
--append-system-prompt "<identity + memory instructions>" \
--tools "Bash,Read,Write,Edit" \
--allowedTools "Bash,Read,Write,Edit" \
--add-dir ~/.epiphyte/memory \
--model opus \
--output-format stream-json \
--resume <session-id>
Keeping it tied to direct invocations of claude means we also get the benefit of prompt caching improvements and more that the Anthropic team is adding.
My nono configuration is primarily driven from epiphyte’s config.yaml but the resulting CLI looks something like:
nono run \
--allow-cwd \
--allow ~/.config/epiphyte \
--allow ~/.claude \
--read ~/path/to/obsidian \
-- claude -p "<prompt>" --tools "Bash,Read,Write,Edit" ...
epiphyte stores its data in a data directory which auto-commits & pushes to git every 10 minutes. That directory looks like:
~/.epiphyte/
config.yaml # model, tools, heartbeat interval
identity/
SOUL.md # personality and values
IDENTITY.md # name, communication style
USER.md # facts about me
HEARTBEAT.md # what to do when the cron fires
memory/ # the scratch pad — agent reads and writes these
TODO.md # canonical task list
tools/*.md # CLI references
contacts.md # people the agent knows about
2026-02-21.md # today's journal
research/ # agent-written research output
sessions/
telegram.session # session ID (plain text, one line)
heartbeat.lastrun # timestamp for rapid-restart protection
There’s no underlying database, just flat files.
Problems#
It’s not all been roses. Getting the prompts right has required tinkering. I can tell the agent to send me a daily digest, but getting it to reliably do that means tuning prompts and it’s a little finnicky.
The sandboxing that nono provides is great, but it does mean that I lose access to GPU-accelerated tooling because of how Apple’s sandbox works. This means I’ve had to do some somersaults from a code perspective to hook in qmd, but it was worth it because that tool is great.
What am I having it do?#
A lot of folks have difficulty understanding what to do with such a system. There’s a bunch of content around people generating massive workflows that achieve precisely nothing.
For context, epiphyte has the following capabilities:
- Make todo items for me in todoist
- Search via the Brave API
- Send me articles via Readwise Reader
- Send me messages via telegram
- Query my obsidian knowledge store via
qmdand direct file access - See who I’m due to talk to via
frm - Has an outbox so it will respect quiet hours, because I’m a human who needs sleep and the dopamine problem is real
With those capabilities, briar has been doing the following work:
- Researching things about my upcoming Berlin move: gyms, meetups, etc.
- Researching topics that will be relevant for my upcoming job (taking into account the things I know from my knowledge base), then adding articles about it into my readwise reader.
- Figuring out who in my relevant tech circles lives in Berlin as well as who I don’t know, but probably should.
- Helping me figure out what to write about given my goals.
What are my plans going forward?#
Honestly, this is a pretty fun place to just tinker. The output is genuinely useful. It regularly tells me to keep in contact with friends, go attend these meetups, you probably want to meet these people, here’s some cool stuff you don’t know.
I think I’ll have some organic growth as I want it to develop capabilities.. but this is honestly good enough to be considered done. The impulse is to keep adding complexity, but claws don’t need to be complicated.
Comments
Reply on Bluesky to join the conversation.
Loading comments...