Max Petrusenko (@petrusenko_max) header
Max Petrusenko (@petrusenko_max) profile picture

Senior AI Systems | Forward Deployed Engineer | Full-Stack | Backend Engineer | Ex-US Treasury. Python, TypeScript, React, Next.js | RAG, Agents, API, Cloud AWS

Joined March 2010
Photo by Max Petrusenko (@petrusenko_max)Photo by Max Petrusenko (@petrusenko_max)Photo by Max Petrusenko (@petrusenko_max)Photo by Max Petrusenko (@petrusenko_max)Photo by Max Petrusenko (@petrusenko_max)Photo by Max Petrusenko (@petrusenko_max)Photo by Max Petrusenko (@petrusenko_max)Photo by Max Petrusenko (@petrusenko_max)Photo by Max Petrusenko (@petrusenko_max)Photo by Max Petrusenko (@petrusenko_max)
my WhatsApp agent tags every message it sends, and the analytics never see a phone number. it runs replies and follow-ups for my contact improv class. the tracking setup, step by step: 1. fire one PostHog event per live send. mine is ci_message_sent. 2. put the context on the event: lane, variant, question_id, lang, channel. that's what lets you ask which message got answered later. 3. never send the raw number. distinct_id is wa_ plus the first 16 characters of sha256(phone). 4. the hash is the same every time, so one person stays one person across every lane. 5. fail open. if the event call breaks, the message still goes out. 6. dry runs only log. a test send never lands in the numbers. the message matters more than the metric about it. save this for the day you wire analytics into an agent that texts real people. what does your agent log about the people it talks to?
3
2
193
anthropic’s internal AI use exceeds payroll only by retail-valuing self-consumed tokens, not actual spend. operators citing this as cost proof mis-model inference bills; the key signal is 90%+ of code added that month was written by Claude, shifting review and hiring needs.
132
remembering what worked breaks once the repo moves on. a saved fix for last month's config reads as truth unless the note has a date. teapawt.org/DataChaz/status/211729…
New coding session. Same problem. Start from zero. Beacon wants to break that loop. > memory for Claude Code, Codex + 20 more harnesses > 3K+ GitHub stars in 2 weeks > #1 on Product Hunt Free. Open source. Local-first. Your agents should remember what worked. repo in 🧵↓
123
anthropic's 1,127% headline hides the number that matters: q3 revenue growth was 47% qoq, down from 144% in q2, against $895.4 billion in compute commitments. anyone building on claude pays for that gap in tighter rate limits and less discounting.
1
1
149
my 08:42 job ran fine in a terminal and built 0 attendees under cron. it pulls Luma guests and preps the invites for my class. the checklist i use now: 1. run the job under the scheduler's PATH, not your shell. under Hermes' cron, `env python3` resolved to Homebrew python. 2. check that interpreter has your imports. that one had no `cryptography`. 3. grep the job log for the real error. mine said "luma guests failed". 4. trace what the failure held back. every automated invite waited, and the attendee list came out 0. 5. pin the interpreter by path. scripts/luma now calls /usr/bin/python3. 6. move machine specific settings to env vars. the Brave profile is $LUMA_BRAVE_PROFILE. 7. give it a fallback. Profile 3 if it exists on the mac, else Default. a green terminal run tells you about your shell. it says nothing about the job. save this for the next job that works by hand and breaks on schedule. which python is your cron actually calling?
2
1
148
my reply agent stopped answering people because of 1 file. it handles WhatsApp replies for my friday contact improv class. a yes reply gets the event info, and the event lives in ask-event.json. after oct 30 passed, the file still said oct 30. so yes replies went to review instead of getting info, and 19 replies sat unanswered from oct 31 to nov 1. the fix in ask-replies: once the date passes, roll ask-event.json to the next Luma Friday. any config with a date in it needs code that moves the date. what in your agent quietly expires?
1
3
164
I gave an AI agent a plain-English task: "Open FileMaker, create a new database, name it, save it." Nobody told it which buttons to press. It worked out the steps itself, moved a visible mouse across the screen, and explained every click out loud as it went. The voice is an AI clone of mine. How it works: • Hermes Agent makes the decisions. It reads the task, picks the next action, and checks the result before moving on. • Action maps (JSON) record where FileMaker's buttons, menus and dialogs are. • Notion holds the rules: how to handle popups, when to stop and ask a human, and the run logs. • macOS Accessibility (AppleScript) does the clicking. The cursor glides to the target and clicks right as the voice says "click". • Narration comes from Kokoro TTS plus my cloned voice (F5-TTS) on a Mac mini. Word-level timings keep the speech and the clicks in sync. • screencapture and ffmpeg combine the screen recording and the narration into one video. • It all runs on a separate Mac, so my laptop stays free. Give it a new task and you get a new narrated video, with no re-recording. Next: schema, value lists, and turning written procedures into training videos. If your team trains people on FileMaker or any other desktop software, how do you do it today? #AIagents #FileMaker #Automation #TextToSpeech
8
5
425
a setup gets tested when it runs unattended. across 26 repos, launchd started calling stale copies until i pinned absolute script paths teapawt.org/milesdeutscher/status/…
Boris Cherny, the creator of Claude Code, revealed his entire setup. The 6-step framework you can use to actually use Claude Code properly:
1
398
50 agents in a minecraft experiment stalled on bureaucratic process instead of building. coordination overhead, not a capability verdict. size agent teams by verified deliverables, not headcount. a run failing on individual capability would undercut this.
3
2
391
a five-model file-based team matches a good single-model harness, so orchestration buys reliability not intelligence. teams using cheap 27b setups get parity at 0.39 and 40 mins run time but must grade by script and accept longer wall-clock time
1
1
356
a freeform "improvements" box wired to an agent that yolo implements whatever gets submitted is a tiny feature that changes the whole feel of an app. the activation energy to sand a rough edge or add a feature drops to almost nothing. someone using an app built this way implemented 150 improvements over a few days. that starts to feel like a new kind of tool. liquid software. once it exists, every app without it feels a little rigid and anachronistic. why can't i just tell it how i want it different? the open questions are real. does it become unmaintainable after a while? maybe model intelligence improves faster than feature appetite, so it's fine. how does collaborative software work in this model? can software designed this way be secure and reliable? broader deployment aside, it works great in a personal context. it also echoes Lisp/Lisp machines, Smalltalk, and HyperCard: systems the user can take control of and modify. those visions never quite worked, and most software today still isn't usefully end-user modifiable. but this small affordance changes your relation to the software. a little transgressive, a little empowering, in a Lickliderian and Engelbartian way.
1
4
256
whichever agent you're running, your voice is still the best way to talk to it. opencode's hex is the best way to actually use that voice: - fast - runs locally - mac, windows, linux stable release is out now: anoma.ly/hex
1
3
200
This article got really popular
A one carat stone went for about $4,000 in 2015. Now the same stone sits in the hundreds. The price broke before anyone rewrote the story. So what is the premium actually paying for now?
2
171
volta doesn't treat a model refusal as a stop. it scans the response for 'i can't,' then fails over to smaller, more permissive models. if your misuse control is 'the model will refuse,' your real safety floor is the most permissive model in your chain.
2
146
the router is the weak point now, since a wrong cluster pick hands a run the wrong memory and nothing errors. teapawt.org/dair_ai/status/2116548…
Brilliant paper on agent memory from FAIR at Meta. (bookmark it) A single global history is the usual way to let agents learn from past runs. When tasks are interleaved, it gains almost nothing over no memory at all, an average of +0.015 in normalized reward. This work proposes Routed Continual Learning. Past trajectories are grouped into clusters, and each cluster keeps its state in one memory system from a fixed library. Before each run, an LLM router reuses a cluster or creates a new one. They tested it on a stream mixing 301 CL-Bench instances with 97 banking instances from τ³-Bench, across four language models. Routed CL raised reward over the global history by 15% to 30% of the maximum attainable reward. Estimated API cost fell by 65% to 72%. The runs were sequential, so parallel agents updating one cluster remain untested. If your agents handle mixed work, it might help to split their memory into clusters before adding a bigger memory system. arxiv.org/abs/2610.38796 Chat with Paper: academy.dair.ai/papers/route…
1
115
the chatgpt account takeover was a composition failure, not a chatgpt auth flaw: a sandboxed html preview and a graph's mathlive listener were each harmless alone and dangerous together. if mathlive had enforced origin checks, the chain would have stopped.
93
my cron-guard test called kickstart directly, so it only held on one os. made it os independent. a guard you can't test off the box it guards is just a launchd check. what's the blind spot in yours?
120
for scoring content with many questions, the costly part is re-reading the document repeatedly, not the model. batching questions in one pass reduces cost and latency. builders should count document passes, not just tokens per answer, to pick an efficient chat stack.
1
2
172