A New Kind of Memory
Until a month ago, every interaction with stonerOS followed the same shape. I opened a session, the AI loaded my baseline files, I asked something, the AI answered using what it had read. The whole relationship lived in recall.
Then I added two things. One is a small file called rules.json that lets the system surface context without being asked. The other is a skill called /draft-as-josh that can produce messages in my voice. Together they shift the system from passive context to active proxy—and they make a specific argument about how much of that shift I want.
Rules That Fire On Their Own
The first shift lives in preferences/rules.json. Each rule has two parts: a trigger (a keyword in my first message, a time of day, a session tier) and an action (load a file, surface a reminder, activate a skill). The context-router checks the rules at the start of every session and fires whatever matches.
A few in the active set: when I mention an interview or a recruiter, the system loads my job pipeline and the interview-prep skill before I ask. When I touch anything labeled “personality” or “baseline,” a reminder surfaces about loading the corrections file first. On weekend evenings, if I mention building or making something, the ideate skill activates.
Memory used to be a thing I could find. Now it’s a thing that shows up. The system remembers on my behalf.
What I built in deliberately: rules can inject, remind, or activate—never write, send, or modify. Every fire gets logged so I can audit which ones earn their keep.
A Twin That Drafts
The second shift lives in a skill called /draft-as-josh.
I keep a file called pipeline.json that tracks every active job application—company, role, status, contacts, prior notes. When a message lands, the old workflow was: open pipeline.json, find the contact, re-read the thread, calibrate register, then start writing. The new version is: paste the message into /draft-as-josh and review what comes back.
The skill classifies first—register, recipient, stakes. It loads my voice calibration files. If the recipient is in pipeline.json, it pulls their name, status, and prior thread notes. Then it drafts under strict rules: closed em-dashes, no AI smoothness, no corporate filler. For high-stakes messages it runs voice-qa automatically and revises if the gate fails.
The output reads like me because the agent draws on an accumulated record before drafting—personality exports, journal entries, project briefs, voice-qa flags, register definitions, learned anti-patterns. The voice is retrieved, not invented.
But the skill ends at presentation. It produces a draft. It never sends.
The Line I Drew
There’s a version of this where I give the system permissions to send—auto-reply to messages, auto-post responses, auto-confirm meetings. The technical surface is already there. Wiring it up would be an afternoon.
I haven’t done it, and I’m not going to. The value of the twin is that it sounds like me. The moment I let it send unreviewed messages, I’m trading the integrity of every relationship it touches for a small reduction in latency.
The rule I gave the system: any action with external visibility requires a manual review step. Internal actions can fire automatically; external actions stay on review. Zero unreviewed external action is the bright line.
What Changed Day-to-Day
I spend less time finding things. Rules surface the right context automatically. The cognitive overhead of “what do I need to load for this question” mostly disappeared.
I draft faster. The cold start of any message used to mean opening context, calibrating register, then writing. With /draft-as-josh, the loading happens automatically and I review what comes back. The review pass is where most of the work moved.
I trust the system more on the things it does autonomously, and less on the things it doesn’t. When a rule fires, I know exactly what class of action it’s allowed to take. When I see a draft, I know it hasn’t been sent.
Every layer of autonomy I’ve added has worked because the corresponding manual layer was already working. Manual context-loading came before the rules engine; manual voice-tuning came before the twin. When I’ve tried to skip the manual phase, the automation hasn’t held up.
So the rule I’m holding to: automate what I’ve already done by hand. Everything else is reach.
I’d rather have a system that’s slow and sounds like me than a fast one that doesn’t.