<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Building Pinchy in Public</title><description>Honest daily notes on building Pinchy, a self-hosted enterprise AI agent platform built on OpenClaw.</description><link>https://heypinchy.com/</link><item><title>Day 127: v0.7.0 — Skills, One Clicks, and Sessions That Survive an Update</title><link>https://heypinchy.com/blog/day-127-v070-skills-one-clicks-sessions/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-127-v070-skills-one-clicks-sessions/</guid><description>v0.7.0 ships three things that all answer the same question: how does a self-hosted agent platform get more capable without getting less governable. The big one is a skills foundation built on OpenClaw 2026.6.x&apos;s native skill mechanics — SKILL.md, per-agent allowlists — with web search as the first pilot skill and a market-monitor template that uses it. The honest framing: it&apos;s a foundation and one shipped skill, not a catalogue. The trick that makes it enterprise-shaped is default-deny at the skill layer: an empty allowlist excludes all 58 bundled OpenClaw desktop skills (1password, apple-notes, the lot), so an agent gets the web only when an admin grants it. Alongside it, two one-click deploys — a DigitalOcean Marketplace image and a CapRover template, both snapshots of the real production stack — and a quiet but real fix: updates no longer log everyone out, because the session cookie&apos;s name was flipping between deploys.</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 126: The Build Tools Don&apos;t Belong in Production</title><link>https://heypinchy.com/blog/day-126-the-build-tools-dont-belong-in-production/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-126-the-build-tools-dont-belong-in-production/</guid><description>The OpenClaw runtime image was shipping its own build toolchain to production: a C compiler, Python, and a 300 MB npm download cache, none of which the gateway uses once it is running. They were there only to compile native modules at build time, then rode along into every deployment. Splitting the image into a builder stage that compiles and a clean runtime stage that copies only the finished artifacts cut it by 38.6%, the same treatment the Pinchy image got on Day 122. A smaller image deploys faster, which is what fixed the one-click 504s, but the part I care about more is that a production image with no compiler and no package manager is a smaller thing for a security team to audit and a smaller surface to attack. The same day, the mascot finally became a clean vector, about 8 KB of SVG instead of a heavy raster, across the docs, the app, and the chat.</description><pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 125: This Time the Agent Really Did Stop</title><link>https://heypinchy.com/blog/day-125-this-time-the-agent-really-did-stop/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-125-this-time-the-agent-really-did-stop/</guid><description>On Day 120 the chat said the agent didn&apos;t respond when it actually had. This is the opposite failure: in production an agent hit a provider rate limit mid-run, right after it had created draft bills in Odoo, and the chat showed nothing at all. The live error bubble was ephemeral client state, so a reload or a websocket reconnect erased it, leaving the failure recorded only in the audit log where no user in a hurry would look. The fix is a durable, server-backed paused banner that survives reloads, names the actual cause instead of guessing rate limit every time, and, when the failed run already wrote something, warns that retrying could duplicate it. Pinchy owns that error surface in its own store, the same move as owning the transcript on Day 122: the things a user needs to trust can&apos;t live on a shelf the runtime is free to clear.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 124: The FAQ Only a Robot Could Read</title><link>https://heypinchy.com/blog/day-124-the-faq-only-a-robot-could-read/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-124-the-faq-only-a-robot-could-read/</guid><description>For months I had careful FAQ answers on 62 marketing pages, and 59 of them showed the answers to nobody: they lived only as FAQPage JSON-LD in the head, fed to a Google rich result and invisible to humans. Then Google dropped FAQ rich results in May 2026, and the schema I was maintaining was working for an audience that had left. The fix is a single Faq component that renders the visible Q&amp;A and the schema from one list, now on all 62 pages, because the visible answer is what an answer engine actually cites. The same day, the blog itself moved to Astro content collections, so the index, the prev/next nav, and this RSS feed generate themselves instead of being hand-maintained.</description><pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 123: The Box I Haven&apos;t Touched</title><link>https://heypinchy.com/blog/day-123-the-box-i-havent-touched/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-123-the-box-i-havent-touched/</guid><description>People ask what Pinchy runs on once you take it fully off the network, and the honest answer is that I have never touched the class of machine they mean. So this is the honest version of a spec sheet: what I can work out about an air-gapped LLM box I have never run, and what I cannot. The arithmetic of a memory-bound machine (bandwidth over TOPS, mixture-of-experts over dense, a 120B model in the low 50s of tokens per second) I can do without the hardware. The half that decides an enterprise purchase (error-correcting memory, out-of-band management, a soldered-RAM RMA, a trusted supply chain) I cannot, because you have to live with the machine. A prototype is coming, built with someone whose whole world is the hardware mine runs on. Until then I stay clear about which claims are measured and which are reasoned.</description><pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 122: Owning the Transcript</title><link>https://heypinchy.com/blog/day-122-owning-the-transcript/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-122-owning-the-transcript/</guid><description>Prepping an OpenClaw runtime bump, a Telegram test started failing deterministically: the read-only mirror read OpenClaw&apos;s session-scoped chat history, which a /new reset empties, so after a reset the web mirror went blank while Telegram itself still showed every message. Reading that storage more cleverly was the wrong fix. The right one is architectural: Pinchy now owns the conversation transcript in its own store, fed by message hooks, so a /new, a daily reset, or a context compaction can&apos;t touch it. It&apos;s the same line as Day 109, drawn through data instead of code: own what your users experience as theirs. Alongside it, the runtime bump landed and the Docker image got a lot smaller.</description><pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 121: Separating the Channels</title><link>https://heypinchy.com/blog/day-121-separating-the-channels/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-121-separating-the-channels/</guid><description>A slash command typed in Telegram could erase the web chat history with the same agent. Not by deleting anything: an accidental /new from Telegram reset an OpenClaw session that, through identity links, was shared with the web UI, so the web transcript silently became unreachable. The fix adopts OpenClaw&apos;s per-task session model, keyed per chat, so web and Telegram are separate conversations and one channel&apos;s reset can&apos;t reach into another. It&apos;s the cross-channel cousin of the Day 95 history bug. Alongside it, the unglamorous work of making v0.6.0 a one-click deploy: DigitalOcean and CapRover listings, and a release preflight that builds a staging checklist from the upgrade notes.</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 120: The Agent Was Alive the Whole Time</title><link>https://heypinchy.com/blog/day-120-the-agent-was-alive-the-whole-time/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-120-the-agent-was-alive-the-whole-time/</guid><description>On production, the chat kept saying &apos;The agent didn&apos;t respond&apos; while the agent had in fact responded: a refresh revealed the saved reply, and anyone who didn&apos;t refresh never saw the answer. The cause was five independent heuristics, each on its own clock, all guessing from silence about whether the run was alive. The fix was to stop guessing and use the one component that actually knows: OpenClaw owns run liveness, surfaced through the openclaw-node SDK I extended on Day 109. Alongside it, Odoo&apos;s state-changing actions (confirm, validate, approve) became governed, audited tools instead of raw method calls.</description><pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 119: Auditing My Own Marketing for Lies</title><link>https://heypinchy.com/blog/day-119-auditing-my-own-marketing-for-lies/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-119-auditing-my-own-marketing-for-lies/</guid><description>I point the same scrutiny at the marketing that I point at the code, and it does not come out clean: a site-wide audit, cross-checked against the shipped product, finds 56 claims that don&apos;t match what Pinchy actually does. We advertised channels we don&apos;t have, billing we don&apos;t do, and an approval gate that&apos;s really just an allow-list. The worst one is a security statistic we got wrong on our own page: 63% where the source says 35.4%. It&apos;s the exact failure mode we warn customers about, found on our own site, on the last day of a 14-day stretch about marketing in public.</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 118: v0.5.8, and a README That Earns the Star</title><link>https://heypinchy.com/blog/day-118-v058-and-a-readme-that-earns-the-star/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-118-v058-and-a-readme-that-earns-the-star/</guid><description>v0.5.8 shipped today: lossless per-turn token accounting, PDFs rerouted away from OpenClaw&apos;s broken built-in tool, a model-blocklist gate, and a ten-advisory security sweep. But the most uncomfortable part of the day wasn&apos;t the code. It was the README: the storefront for an open-source project, and ours was both underselling the work and quietly describing things the product doesn&apos;t do. Rewriting it to be compelling without adding a single claim I can&apos;t back turned out to be the same discipline as shipping the code.</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 117: Comparison Pages That Don&apos;t Flatter Us</title><link>https://heypinchy.com/blog/day-117-comparison-pages-that-dont-flatter-us/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-117-comparison-pages-that-dont-flatter-us/</guid><description>Today was a stretch of competitor comparison pages (Pinchy vs Dust, vs Glean, vs Copilot Studio, vs Windmill and Onyx) plus a &apos;best self-hosted AI agent platforms&apos; listicle. The discipline was the part worth writing about: every page names where the competitor genuinely wins, because a comparison that only flatters you is worthless to a reader and discounted by an answer engine. Dust is more polished. Glean is built for a scale we don&apos;t target. Copilot Studio lives inside Microsoft. Naming that is the trust signal, and it happens to be the GEO-effective move too. The rule I held all day: if I wouldn&apos;t say it to the competitor&apos;s face, it doesn&apos;t go on the page.</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 116: Pricing in Public</title><link>https://heypinchy.com/blog/day-116-pricing-in-public/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-116-pricing-in-public/</guid><description>Most enterprise governance tools hide their number behind a &apos;contact sales&apos; button. Today I did the opposite and shipped a public pricing page: Community free and self-hosted under AGPL with no user limit, Pro a flat ~€99 a year for up to 10 users (not per-seat, not per-agent, not per-message, no markup on model usage), and a quote you can review and accept online above ten, no sales call required. The decision was less about a number than about who a &apos;contact sales&apos; wall would quietly turn away. And shipping a real pricing page dragged a trail of small honesty-fixes into the light: a trial that finally says 30 days instead of 14, a privacy page that names the mail provider actually carrying the mail.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 115: The Runtime Moves, and the Licence Grows Teeth</title><link>https://heypinchy.com/blog/day-115-the-runtime-moves-and-the-licence-grows-teeth/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-115-the-runtime-moves-and-the-licence-grows-teeth/</guid><description>A busy hardening day with two faces. The runtime underneath moved again (OpenClaw 2026.6.5) and the E2E suite went flaky, so I spent the day fixing root causes instead of papering over them with retries, because a retry hides exactly the thing a runtime bump might have changed. Meanwhile the security and licensing posture grew teeth: Pinchy now fails closed on a default database password, refuses to boot insecure rather than warn, and surfaces where every secret came from. The seat cap became a soft cap with a 20% grace band so onboarding is never blocked, and license expiry fails closed gracefully: the gated team features deactivate, nothing locks you out, your data stays intact. A day about &apos;fail closed&apos; as a posture: when in doubt, refuse, but refuse kindly.</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 114: Honest Tokens</title><link>https://heypinchy.com/blog/day-114-honest-tokens/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-114-honest-tokens/</guid><description>The usage dashboard was quietly wrong about what a conversation cost: it wasn&apos;t counting prompt-cache tokens at all. PR #482 records cached input and charts it as its own series, so the numbers finally match the bill. Around it, a wide day spent making other numbers honest too: diagnostic span timing pinned to the right event, 47 places where the docs had drifted from the code, and sanitization that stopped mangling token counts, plus a structural fix that kills an optimistic-message crash class on tab refocus rather than patching the one symptom.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 113: The Data Void</title><link>https://heypinchy.com/blog/day-113-the-data-void/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-113-the-data-void/</guid><description>A few recent demo calls came from people whose AI assistant had recommended Pinchy, and gemini.google.com keeps showing up in the referrer logs. That sent me into a research rabbit hole on how AI engines decide what to cite. The useful finding flipped a worry into an opportunity. Our most obscure niches aren&apos;t a marketing weakness. They&apos;re the easiest place to become the cited answer, because almost nobody else has written it down.</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 112: Watchdogs for Silent Failures</title><link>https://heypinchy.com/blog/day-112-watchdogs-for-silent-failures/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-112-watchdogs-for-silent-failures/</guid><description>A day spent on the worst class of bug: the one that makes no noise. Three fixes, one theme. PR #470 stops a stream-resume from replaying a message id that already exists and crashing. PR #473 adds a watchdog for the 409-Conflict that quietly kills a Telegram channel when two pollers fight over the same bot, turning a silent stop into a visible health event. PR #474 adds a server-side first-chunk watchdog that times out a run wedged with no first token instead of hanging forever. Each one converts a quiet hang into a signal you can see and attribute.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 111: The Migration That Skipped Itself</title><link>https://heypinchy.com/blog/day-111-the-migration-that-skipped-itself/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-111-the-migration-that-skipped-itself/</guid><description>A Drizzle migration silently skipped, but only on an upgrade, never on a fresh install. The test suite built fresh databases every time, so the most important code path my users take was structurally invisible to CI. Green pipeline, broken upgrade. The fix came in three layers: correct the journal, repair the already-stranded tables forward, and add a test that performs a real version-to-version upgrade instead of building from scratch. A war story about the bug your tests can&apos;t see by construction.</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 110: Software That Doesn&apos;t Lie</title><link>https://heypinchy.com/blog/day-110-software-that-doesnt-lie/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-110-software-that-doesnt-lie/</guid><description>A Sunday with no merges and a pattern that kept resurfacing across the last two weeks: software that quietly claims something untrue. A dead watcher that said it was watching. A version endpoint that reported a number nothing had bumped. A flaky test that said &apos;maybe&apos; when it meant &apos;definitely racy.&apos; The fix is always the same (make the mechanism fire and watch it do so), and it turns out that&apos;s also the whole product thesis.</description><pubDate>Sun, 07 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 109: Extending a Runtime We Don&apos;t Own</title><link>https://heypinchy.com/blog/day-109-extending-a-runtime-we-dont-own/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-109-extending-a-runtime-we-dont-own/</guid><description>A day on openclaw-node, the SDK Pinchy owns, sharpening the line between the code I can change and the code I can only ask to change. The release ships v0.13.0: a sessions.messages subscription, sessions.describe and agent.wait wrappers, the runtime agent list via agents.list(), and a reliability fix: a dropped socket used to leave a request hanging for thirty seconds before it timed out; now in-flight requests reject the moment the connection goes, so a request that lost its socket fails immediately. Underneath it all is one rule about boundaries: the SDK is mine to extend, the runtime is someone else&apos;s house, and the difference governs how I&apos;m allowed to fix things.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 108: Making the Tests Tell the Truth</title><link>https://heypinchy.com/blog/day-108-making-the-tests-tell-the-truth/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-108-making-the-tests-tell-the-truth/</guid><description>A flaky end-to-end test turned out to be the most honest thing in the suite. The dispatch E2E failed at random, and the temptation was to paper over it with retries. But the flake was a real ordering race: after an OpenClaw restart, the config push and the agent-readiness signal weren&apos;t ordered, so a message could reach an agent that wasn&apos;t ready yet, in the test and in production. PR #464 fixes it with a deterministic readiness gate instead of a retry. Alongside it, token-usage accounting gets real assertions on totals, and the Ollama Cloud catalog gets reconciled against what the live API actually serves.</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 107: Thirty Thousand Open Doors</title><link>https://heypinchy.com/blog/day-107-thirty-thousand-open-doors/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-107-thirty-thousand-open-doors/</guid><description>A quiet Wednesday with no merges, so I went back and re-read the OpenClaw exposure research, and checked the numbers myself, because some of them were being quoted wrong. Bitsight saw more than 30,000 exposed gateways; SecurityScorecard saw more than 40,000 and flagged 35.4% as vulnerable, a number I&apos;d seen quoted higher more than once. The honest read isn&apos;t &apos;OpenClaw is insecure&apos;: its defaults are sane and the exposure is opt-out. The real gap is structural: a single shared secret can&apos;t express a team, and that&apos;s the gap Pinchy exists to close.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 106: Knowing What the Model Can See</title><link>https://heypinchy.com/blog/day-106-knowing-what-the-model-can-see/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-106-knowing-what-the-model-can-see/</guid><description>A model can be blind, and until today Pinchy didn&apos;t know it. You could attach an image to a text-only model and the request would fail, or worse, silently drop the image after you&apos;d already spent the turn. Today&apos;s PR is unglamorous bookkeeping: a table of what each model can actually do, vision and long-context and tool calling, seeded at every boot. It&apos;s the difference between an agent that fails loudly at the door and one that fails mysteriously mid-task. Capability is a fact about the model, not a hope you hold while you hit send.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 105: Memory, and Closing the Loops</title><link>https://heypinchy.com/blog/day-105-memory-and-closing-the-loops/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-105-memory-and-closing-the-loops/</guid><description>The busy day Day 104 saw coming. Thirteen PRs land, and the headline answers yesterday&apos;s question with a worse truth than I feared: Pinchy agents couldn&apos;t write memory at all. One had hallucinated a memory write that never happened, and the watcher I shipped on Day 91 to audit memory changes turned out to be dead code. It watched the wrong path and had never fired in production. PR #448 opens a narrow, file-granular write path so an agent can rewrite its memory but never its identity, and fixes the watcher. Then #454 closes the Day 96 loop by making CI refuse a release whose package.json version doesn&apos;t match the tag. Around them: PWA install, a self-service support bundle, CSV/text workspace attachments, DOCX-to-Markdown, and an honest-error callback to the Day 93 composer saga.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 104: What Should an Agent Remember?</title><link>https://heypinchy.com/blog/day-104-what-should-an-agent-remember/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-104-what-should-an-agent-remember/</guid><description>The last quiet day before a big one, spent on a question I&apos;ve been treating as solved when it isn&apos;t: what should an agent remember, and who gets to see what it remembered? Day 91 shipped a watcher to audit memory changes, and I&apos;ve been quietly assuming the whole memory story is in good shape. The more I poke at it, the less sure I am. Durable memory is what makes an agent feel like it knows you across sessions, and it&apos;s also a thing that silently shapes every future answer, can be written without anyone asking, and must never be allowed to rewrite the agent&apos;s identity. A reflection on the line between memory and identity, the day before that line gets tested.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Day 103: The Tour Guide Problem</title><link>https://heypinchy.com/blog/day-103-the-tour-guide-problem/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-103-the-tour-guide-problem/</guid><description>A Sunday spent guiding a group of RubyConf attendees around Vienna, which turned out to be the most useful thing I could have done for thinking about agents. Giving a good walking tour is an exercise in curation: you decide what to show whom, you read the group, you leave things out, you adapt on the fly. That&apos;s exactly the discipline Pinchy tries to encode: show the right person the right thing, don&apos;t dump everything. But the part that made the tour work was the part an agent can&apos;t do: sensing when the group was tired, when a story was landing, when to drop the script entirely. A reflection on what guiding a city taught me about building a tool that works through people rather than instead of them.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 102: A Room Full of Ruby</title><link>https://heypinchy.com/blog/day-102-a-room-full-of-ruby/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-102-a-room-full-of-ruby/</guid><description>A Saturday away from the keyboard, at RubyConf Austria, talking about Pinchy and AI with a few hundred people who don&apos;t already agree with me, which is exactly the point of going. A conference is where your pitch meets a thoughtful, craft-minded, healthily skeptical crowd, and you find out fast which parts of the story land and which parts you&apos;ve been telling yourself. The boundary thesis and the self-hosting angle resonated; &apos;isn&apos;t this just a wrapper&apos; and &apos;you&apos;re betting the whole thing on OpenClaw&apos; were the hard questions I couldn&apos;t wave away. The most credible thing I said all day was that I run my own company&apos;s books through it.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 101: Three Bugs, One Symptom</title><link>https://heypinchy.com/blog/day-101-three-bugs-one-symptom/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-101-three-bugs-one-symptom/</guid><description>The worst place for a bug is the first message after a fresh install, and that&apos;s exactly where one was hiding. Smithers answered the very first chat with &apos;No API key found for provider&apos; on a brand-new setup. What started as a single secrets.json race fix turned into three distinct production bugs that all produced the identical symptom from different root causes: a secrets-provider boot race, an agent hot-reload race, and one more. The fix ships with a protocol-level smoke-test suite across five providers so this whole class of first-run failure gets caught before every release. A separate fix un-sticks the &apos;Restarting…&apos; overlay when OpenClaw defers a restart behind active runs.</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 100: The MCP Question</title><link>https://heypinchy.com/blog/day-100-the-mcp-question/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-100-the-mcp-question/</guid><description>One hundred days in, a quiet Thursday to sit with the hardest open product question: MCP. There&apos;s a branch in review that would let Pinchy agents reach arbitrary MCP servers, and the breadth is obviously valuable: connect any tool, instantly. The problem is that breadth and boundaries pull in opposite directions, and boundaries are the entire reason Pinchy exists. An agent that can reach any MCP server is an agent whose permissions and audit trail just got an open-ended hole punched in them. A reflection on the tension between &apos;connect anything&apos; and &apos;who can see what,&apos; and why the answer can&apos;t be either extreme.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 99: The Stream That Survives a Reconnect</title><link>https://heypinchy.com/blog/day-99-the-stream-that-survives-a-reconnect/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-99-the-stream-that-survives-a-reconnect/</guid><description>After two days of essays, a day of code aimed at one of the oldest production complaints: &apos;the agent didn&apos;t respond,&apos; followed by duplicate retries. Issue #310 gets its architectural fix in three stacked PRs. Tier 1 is a defensive client patch for the drop-before-first-chunk window. Tier 2a adds a server-side run registry and a watchdog that tears down stuck runs and finally makes a run that finishes after the browser left auditable. Tier 2b is the headline: a browser that drops mid-stream and reconnects now rejoins the in-flight run as a listener and receives every remaining chunk: no orphan bubble, no spinner without a response.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 98: The Model Underneath Keeps Changing</title><link>https://heypinchy.com/blog/day-98-the-model-underneath-keeps-changing/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-98-the-model-underneath-keeps-changing/</guid><description>Another quiet day, another foundation that won&apos;t hold still: this time the models themselves. Pinchy picks a model for you automatically, across four providers, and the set of right answers changes monthly: new releases, renamed variants, a shiny preview model that advertises a 1M context window and silently drops tool calls. Day 91 was five layers of defense against exactly this, and it&apos;ll erode the moment the next generation ships. A reflection on why &apos;just let the user pick&apos; is a worse answer than it sounds, and what it actually takes to keep a good default good when the thing underneath it is a moving target.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 97: Building on Ground That Moves</title><link>https://heypinchy.com/blog/day-97-building-on-ground-that-moves/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-97-building-on-ground-that-moves/</guid><description>A quiet Monday with nothing merged, spent thinking about the structural bet underneath everything: Pinchy is built on OpenClaw, and OpenClaw moves fast. In the last three weeks alone it went from 2026.5.7 to 2026.5.20, jumped the client protocol from v3 to v4, fixed a thought_signature bug on one provider path but not the one we hit, and shipped two defaults, silent tool-registration no-ops and a 4 AM session reset, that each turned into a Pinchy-shaped bug. The speed is the reason Pinchy exists at all and the reason half my week is reaction. This is an honest accounting of building on a dependency that won&apos;t hold still.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 96: The Version That Lied About Its Number</title><link>https://heypinchy.com/blog/day-96-the-version-that-lied-about-its-number/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-96-the-version-that-lied-about-its-number/</guid><description>Two releases on a Sunday, an hour and fourteen minutes apart, and the second one exists only to fix the first. v0.5.5 ships at 10:49 with OpenClaw 2026.5.20 and its v4 protocol, the workbench/ subdir, multi-company Odoo hardening, the session-reset fix, and a tightened password-reset path. Then I notice the image reports its version as 0.5.4, because I cut v0.5.5 with gh release create instead of pnpm release, which skipped the package.json version bump. v0.5.6 at 12:03 is a purely cosmetic patch to make the tag and the reported number agree again. Underneath it all, a universal chat.agent_error audit event lands as the measurement floor for future auto-retry work.</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 95: The History That Vanished Overnight</title><link>https://heypinchy.com/blog/day-95-the-history-that-vanished-overnight/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-95-the-history-that-vanished-overnight/</guid><description>One PR on a Saturday, and it fixes a bug that would have read as data loss to anyone who hit it: OpenClaw&apos;s default session reset rotates every session at 4 AM, so Pinchy&apos;s chat history with each agent appeared to vanish every morning. The transcript was never deleted. The session pointer just moved to a fresh empty one. It surfaced when a scheduled cron job fired into the post-reset session and showed only its own message as the entire visible history. The fix is one line of config: disable the daily reset so Pinchy sessions never auto-expire.</description><pubDate>Sat, 23 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 94: Two Companies, One Chart of Accounts</title><link>https://heypinchy.com/blog/day-94-two-companies-one-chart-of-accounts/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-94-two-companies-one-chart-of-accounts/</guid><description>A real production chat surfaced the bug: the Finance Controller agent got confused by a multi-company Odoo database where the same account, 1000 Wareneinsatz, exists in two GmbHs, and the plugin neither showed which company a record belonged to nor refused a cross-company write. Today&apos;s fix makes company a first-class part of every Odoo reference: odoo_read auto-includes company_id, refs carry a [CompanyName] suffix, and a write-time guard refuses creates and writes whose company tags disagree. Around it: a workbench/ subdir so fresh agents can write without a prior upload, the CRM template gains quotation-ready models, and two OpenClaw bumps land back to back.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 93: v0.5.4 and the Cursor That Jumped</title><link>https://heypinchy.com/blog/day-93-v054-and-the-cursor-that-jumped/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-93-v054-and-the-cursor-that-jumped/</guid><description>v0.5.4 ships at 13:16: six read-write Odoo operator templates, the schema split, the FK-lookup grants, and a batch of chat-reliability edges. But the release nearly didn&apos;t go out on time, because a regression turned the chat composer hostile: typing into the middle of a draft jumped the cursor to the end after every character. The first fix (PR #413) was a clean hypothesis that didn&apos;t survive a re-test on staging. The real fix (PR #414) was to delete the code that caused it: a bespoke onChange wrapper that turned out to be doing, badly, exactly what the upstream primitive already did well.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 92: Errors That Tell the Truth</title><link>https://heypinchy.com/blog/day-92-errors-that-tell-the-truth/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-92-errors-that-tell-the-truth/</guid><description>A misleading error bubble gets replaced with an honest one: when Gemini 3 drops a thought_signature on a tool call, Pinchy now names the cause and tells the user that Retry usually clears it, instead of the old &apos;provider rejected the schema&apos; copy that made people think their agent was broken. The same classifier emits a throttled audit event so &apos;how often does this happen?&apos; becomes a SQL query. Around it: a build-once-run-many CI rebuild that stops every job from rebuilding the image, an Odoo fix that makes the id-vs-SKU trap impossible to miss, and the v0.5.4 release notes get finalised ahead of tomorrow&apos;s cut.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 91: The Default Gets Opinionated</title><link>https://heypinchy.com/blog/day-91-the-default-gets-opinionated/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-91-the-default-gets-opinionated/</guid><description>Fifteen PRs land today, and unlike yesterday&apos;s single Odoo cluster they don&apos;t share a folder. They share a question: what does the agent run on, and what is it allowed to touch? The headline is the default model tier moving from fast to balanced. New agents now default to Sonnet / GPT-5.5 / Gemini-Pro instead of the cheap-fast tier, because agent workloads are not chatbot workloads. The same PR kills a gpt-4o-mini selection bug hiding in a date parser. By evening the agent finally gets a place to write: pinchy_write lands with an always-on read side, memory-file changes become an audit event, and two guardrails close off the broken-but-shiny model and the unreachable Ollama URL.</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 90: A Monday on Odoo</title><link>https://heypinchy.com/blog/day-90-a-monday-on-odoo/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-90-a-monday-on-odoo/</guid><description>Five PRs merge today. Every one of them in the Odoo cluster. The headline is the schema split Day 89 set up: odoo_schema becomes odoo_list_models + odoo_describe_model with a compact type encoding that takes the per-model context burn from ~18 kB down to single-digit kB. A deprecated alias keeps pre-v0.5.4 agents alive while a data-migration rewrites every agent&apos;s allowed_tools list. By evening the self-ref chain lands: odoo_create now emits a _pinchy_ref on every record, so the Bookkeeper&apos;s create-invoice-then-attach-receipt flow stops being two disconnected tool calls. The MCP and Microsoft 365 branches that Day 89 talked about are still in review. Both were pushed today, neither merged.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 89: Two Weeks of Production</title><link>https://heypinchy.com/blog/day-89-two-weeks-of-production/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-89-two-weeks-of-production/</guid><description>Sunday. No commits today, but two weeks of using Pinchy in production has produced enough notes for one. Running my own bookkeeping through it surfaced several Odoo edges that have since landed as fixes. The attachment work two weeks ago started here: uploading a PDF wasn&apos;t possible on Day 70-something, and the chain of commits to make it real is what Days 81 and 82 were. The next stretch of thinking, multi-integration agents, a task model, MCP, is where the questions are.</description><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 88: The Saturday Drain</title><link>https://heypinchy.com/blog/day-88-the-saturday-drain/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-88-the-saturday-drain/</guid><description>Saturday. One commit lands at 06:14: the cleanup tail of yesterday&apos;s dispatch-probe shakeout. The web E2E suite hadn&apos;t picked up the config.apply rate-limit drain that the odoo and email suites got yesterday, and was failing on the rare run that interleaved with the odoo suite&apos;s startup. Same fix, different file. After that, the day stays quiet.</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 87: The Silent No-Op</title><link>https://heypinchy.com/blog/day-87-the-silent-no-op/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-87-the-silent-no-op/</guid><description>Friday. A new plugin-tool-coverage test goes red for five Pinchy plugins. Behind the red: OpenClaw 5.3 silently no-ops registerTool() unless contracts.tools is declared in the plugin manifest, and the field was missing in five of the seven manifests. Nineteen tools had been registering successfully on the team&apos;s dev OpenClaw and silently failing on the production one. Three rounds of CI fixes follow as the dispatch probes hit a different shape of failure each time.</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 86: The Attach-File Tool</title><link>https://heypinchy.com/blog/day-86-the-attach-file-tool/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-86-the-attach-file-tool/</guid><description>Thursday. odoo_attach_file lands: read-write Odoo operator agents can now attach uploaded files to Odoo records as ir.attachment, with permission-gated writes and the file lifted from the agent&apos;s workspace volume. The same PR fixes a vision-resolver bug where templates declaring vision capabilities were falling through to a text-only model. By afternoon, a code-review pass hardens the new tool against path traversal and OOMs with eleven tests pinning down the failure modes.</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 85: Naming the Version</title><link>https://heypinchy.com/blog/day-85-naming-the-version/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-85-naming-the-version/</guid><description>Wednesday. An end user upgrading Pinchy had no reliable way to confirm which version was actually running: /api/health returned only ok, /api/diagnostics was Domain-Lock-gated, and the OCI image-version label was empty. A new public /api/version endpoint plus populated OCI labels close the gap. Meanwhile, a staging click-through for v0.5.4 reveals that 14 of 22 Odoo templates declare required models that odoo-sync never probes. The operator templates were quietly disabled despite the modules being present. A drift-guard test pins the failure mode down.</description><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 84: Rebuilding the Snapshot Chain</title><link>https://heypinchy.com/blog/day-84-rebuilding-the-snapshot-chain/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-84-rebuilding-the-snapshot-chain/</guid><description>Tuesday. Drizzle migrations 0025–0030 got tangled during a rebase: the snapshot chain that each migration carries as its predecessor was no longer consistent. The fix rebuilds the chain by walking the migrations in their committed order and regenerating each snapshot from the previous one. A new contract test guards the chain integrity and prefix collisions; a runbook captures the recovery procedure for the next time.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 83: v0.5.3 and the Per-Agent Runtime</title><link>https://heypinchy.com/blog/day-83-v053-and-the-per-agent-runtime/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-83-v053-and-the-per-agent-runtime/</guid><description>Monday. v0.5.3 ships, and the headline is the one #199 has been pointing at since the chat first started using WebSockets: switching between agents in the sidebar no longer tears down the runtime that&apos;s mid-stream. A new ChatSessionProvider mounts one runtime per agent at the (app) layout level, the sidebar shows a pulse on agents with an active turn and a red dot on agents that errored, and a chat.background_run_completed audit event makes background activity auditable without leaking content.</description><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 82: Attachments That Open</title><link>https://heypinchy.com/blog/day-82-attachments-that-open/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-82-attachments-that-open/</guid><description>Sunday. The composer&apos;s attachment chip becomes a real preview surface. Click a PDF, an in-app modal renders it with the actual document on screen rather than a forced download. The uploads route picks up authentication for GET (it had been open) and a deliberate X-Frame-Options override for the route alone, so the modal can embed the document without weakening the rest of the app. Plus: an Agent Workspaces concept page that ties the architecture together.</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 81: Saturday on Three Fronts</title><link>https://heypinchy.com/blog/day-81-saturday-on-three-fronts/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-81-saturday-on-three-fronts/</guid><description>Saturday. Three threads that have been queued for a while land together. Images compress client-side to WebP before crossing the wire and the WS frame limit goes from 1 MB to 25 MB to match. An Ollama Cloud model that started returning silent HTTP 500s gets dropped from the allowlist, with the chat learning to render the error as a structured switch-model bubble instead of a raw status code. And the #199 Layer A test finally proves the cache-retry behaviour Layer B fixed yesterday.</description><pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 80: v0.5.2 and the Drain That Doesn&apos;t Stop</title><link>https://heypinchy.com/blog/day-80-v052-and-the-drain/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-80-v052-and-the-drain/</guid><description>Friday. v0.5.2 ships, rolling up the security fix and Ollama-local work from the last two days alongside today&apos;s new headline: client-router keeps draining the OpenClaw stream after the browser disconnects. Without it, an assistant message that finished generating while the user navigated away never made it into the cache, so the next page load looked like a half-finished reply that had quietly succeeded somewhere off-screen.</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 79: Personal Means Personal</title><link>https://heypinchy.com/blog/day-79-personal-means-personal/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-79-personal-means-personal/</guid><description>Thursday. A security fix lands quietly in assertAgentAccess: an admin used to be able to GET/PATCH/DELETE another user&apos;s personal agent by calling the API directly, even though the UI didn&apos;t expose them. The admin fast-path now checks isPersonal before granting access. The fix sits inside a much larger E2E pass that&apos;s verifying (across groups, invites, audit log, permissions, knowledge base) that what the UI shows and what the API enforces actually agree.</description><pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 78: v0.5.1 and the Host Rewrite</title><link>https://heypinchy.com/blog/day-78-v051-and-the-host-rewrite/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-78-v051-and-the-host-rewrite/</guid><description>Wednesday. v0.5.1 ships as a hotfix for a v0.5.0 startup loop: the generated openclaw.json was missing a baseUrl field for the bundled Anthropic/OpenAI/Google providers, and OpenClaw refused to come up. The same release fixes the long-standing Ollama-local setup, which never worked on a default install because host.docker.internal doesn&apos;t resolve inside the OpenClaw container. The fix is a host-gateway alias and a hostname rewrite that runs invisibly at config-write time.</description><pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 77: The Day After</title><link>https://heypinchy.com/blog/day-77-the-day-after/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-77-the-day-after/</guid><description>Tuesday. v0.5.0 has been out for less than 24 hours and the inbox already has the kind of feedback that&apos;s the most useful kind: the docs were almost right. BETTER_AUTH_URL was documented but not actually passed through to the container, the domain-lock middleware was rejecting internal callbacks, and the post-release docs got a polish pass. Also: a 234-line AGENTS.md gets carved out of CLAUDE.md so a different coding assistant has its own contract.</description><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 76: v0.5.0 Goes Out</title><link>https://heypinchy.com/blog/day-76-v050-goes-out/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-76-v050-goes-out/</guid><description>Monday. v0.5.0 ships after a morning of CI failures get hammered out one bracket at a time. Underneath the release tag: a plugin-manifest contract that every Pinchy plugin must now satisfy at build time, HTTP mocks for Gmail and Brave so the external plugins are exercised in E2E, and a ~50-second cold-start improvement from pre-warming runtime deps and disabling the plugins nobody asked for.</description><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 75: The Bonjour Watchdog and Other Ghosts</title><link>https://heypinchy.com/blog/day-75-the-bonjour-watchdog/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-75-the-bonjour-watchdog/</guid><description>Sunday. OpenClaw runtime bumps from 2026.4.14 to 2026.4.27, in two hops. The big news in 4.27: a per-agent auth-profiles.json that scopes credentials per agent. The smaller news: a Bonjour watchdog that was sending SIGTERM to the container in environments where mDNS announcement is blocked. Plus: an idempotency contract test for cold-start regenerate, and the CLAUDE.md docs get a careful re-read.</description><pubDate>Sun, 03 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 74: The Saturday Hardening Pass</title><link>https://heypinchy.com/blog/day-74-the-saturday-hardening-pass/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-74-the-saturday-hardening-pass/</guid><description>Saturday. CSRF gate on every state-changing API route. Password policy moves to 12 chars plus a breach-list check. Audit emissions go from fire-and-forget to a single await-or-defer pattern. Two large files (1097 and 1395 lines) get split into focused modules. SSRF guard closes a DNS-rebinding TOCTOU. RBAC filter lands on the telegram-bots endpoint. The kind of list that gets handed to procurement before any demo.</description><pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 73: A Chat That Stops Claiming Green</title><link>https://heypinchy.com/blog/day-73-a-chat-that-stops-claiming-green/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-73-a-chat-that-stops-claiming-green/</guid><description>Friday. The chat-status indicator had been defaulting to connected during cold-start: a small lie that made every fresh session look broken. Two PRs land that fix the lie at both ends, plus a Starting Agent state that holds until the first message is actually on screen. In parallel: audit PDF export with an integrity-hash CSV column, the audit refactor that backs it, and the agent-create cascade fix gets the matching test.</description><pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate></item><item><title>Day 72: Agent Create Without the Cascade</title><link>https://heypinchy.com/blog/day-72-agent-create-without-the-cascade/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-72-agent-create-without-the-cascade/</guid><description>Thursday. Creating a new agent had been quietly triggering a full gateway restart cascade: every plugin reloaded, every connection paused for several seconds. The fix swaps the inotify-driven config reload for a WebSocket RPC push, with a fire-and-forget retry that never blocks on the gateway&apos;s own boot. Plus: an inotify watcher restores secrets ownership in milliseconds, telegram silent EACCES swallows are plugged, and CI starts running against the production image.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 71: The 0600 Dance</title><link>https://heypinchy.com/blog/day-71-the-0600-dance/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-71-the-0600-dance/</guid><description>Wednesday. The secrets-ownership bug surfaces in integration: secrets.json gets the right mode but the wrong owner, OpenClaw refuses to read it, the gateway boots without a token. The fix is a chown + chmod dance every gateway boot. Plus: staging Caddyfile drops the timeout that was eating cold-start requests, the composer stops greying out during reconnects, and the v0.5.0 upgrade notes consolidate.</description><pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 70: When the Licence Has Teeth</title><link>https://heypinchy.com/blog/day-70-when-the-licence-has-teeth/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-70-when-the-licence-has-teeth/</guid><description>Tuesday. The seat cap stops being a label and starts being enforcement: invite endpoint blocks at the maxUsers count, banner warns ahead of it, audit log records the block. The chat UI grows real delivery states, sending/sent/failed, with a retry path that knows the difference between a dropped message and a half-streamed reply. openclaw-node 0.7.0 ships.</description><pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 69: Switching Off the Lambda</title><link>https://heypinchy.com/blog/day-69-switching-off-the-lambda/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-69-switching-off-the-lambda/</guid><description>Monday. The AWS Lambda that issued every trial key for the last two months gets a one-shot decommission workflow and disappears. The Odoo addon learns to look like part of Odoo: Pinchy logo on the menu, fields freeze after activation, the trial partner is a company. Plus: Squawk lints destructive migrations on every PR and the upgrade notes get a policy.</description><pubDate>Mon, 27 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 68: When the Form Actually Submits</title><link>https://heypinchy.com/blog/day-68-when-the-form-actually-submits/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-68-when-the-form-actually-submits/</guid><description>Sunday. Two commits on the website, both about getting Saturday&apos;s Odoo trial endpoint to work from a real browser instead of from a curl command. The first teaches CI to forward the shared-secret env var into the Astro build. The second swaps a custom auth header for Authorization: Bearer because Odoo&apos;s default CORS handling allows one and not the other.</description><pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 67: The Trial Comes Home</title><link>https://heypinchy.com/blog/day-67-the-trial-comes-home/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-67-the-trial-comes-home/</guid><description>Saturday. The trial endpoint leaves AWS for a custom Odoo addon, built end-to-end in one TDD pass: licence model, trial throttle, mail template, admin UI, CI. Plus: SecretRef follow-ups, Squawk-CLI for destructive-migration linting, and a release-notes template that refuses to merge without Breaking changes and Upgrade notes as separate subsections.</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 66: Streams That Announce Themselves</title><link>https://heypinchy.com/blog/day-66-streams-that-announce-themselves/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-66-streams-that-announce-themselves/</guid><description>openclaw-node 0.6.0 ships: agent_start and agent_end lifecycle chunks bracket every turn, lifecycle errors surface as real error chunks, duplicate errors get deduped between paths. Plus: v0.4.5 release notes consolidate the week, and the integration-delete flow gets one more round of polish.</description><pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 65: Secrets Out of the Config</title><link>https://heypinchy.com/blog/day-65-secrets-out-of-the-config/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-65-secrets-out-of-the-config/</guid><description>The big one. Every secret that used to live in plaintext in openclaw.json (gateway tokens, Telegram bot tokens, Brave and Ollama API keys, Odoo passwords) moves to a tmpfs-backed secrets.json referenced by opaque SecretRef markers. Delivery status and retry ship in the same push, along with a safer integration-delete flow.</description><pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 64: The Open Web, Closed Carefully</title><link>https://heypinchy.com/blog/day-64-the-open-web-closed-carefully/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-64-the-open-web-closed-carefully/</guid><description>Web Search merges. Pinchy&apos;s first integration past Odoo. Brave Search under the hood, a per-agent domain list with an Include/Exclude toggle, SSRF guards that validate every redirect hop, and a plugin-config refactor that pays for itself the moment a second plugin needs config.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 63: Billing Where We Already Live</title><link>https://heypinchy.com/blog/day-63-billing-where-we-already-live/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-63-billing-where-we-already-live/</guid><description>A quiet day on main: one commit on a branch, the last review round before Web Search merges. The interesting work today was off the keyboard: the first companies asking about a production deployment, and the decision to run Pinchy&apos;s subscriptions through the same Odoo instance Pinchy already integrates with.</description><pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 62: Gmail Without the Dev Console</title><link>https://heypinchy.com/blog/day-62-gmail-without-the-dev-console/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-62-gmail-without-the-dev-console/</guid><description>Gmail ships. The first Pinchy integration whose setup story includes a trip through the Google Cloud Console, folded into a wizard that hands over the redirect URI, stores credentials once per workspace, and treats abandoned OAuth flows as a visible pending state instead of limbo.</description><pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 61: Docs That Know Who&apos;s Asking</title><link>https://heypinchy.com/blog/day-61-docs-that-know-whos-asking/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-61-docs-that-know-whos-asking/</guid><description>Two branches, both moving. The pinchy-docs plugin learning to scope documentation to the agent that&apos;s asking; the password reset page finally existing, instead of routing resets through an invite form pretending to be one.</description><pubDate>Sun, 19 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 60: One Guide Instead of Two</title><link>https://heypinchy.com/blog/day-60-one-guide-instead-of-two/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-60-one-guide-instead-of-two/</guid><description>Saturday. One commit on main. Two docs pages that had been saying almost the same thing about HTTPS setup. Nearly the same is the dangerous part. The fix is not adding content; it&apos;s picking which page owns the flow and making the in-app link point there.</description><pubDate>Sat, 18 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 59: Three Releases Before Lunch</title><link>https://heypinchy.com/blog/day-59-three-releases-before-lunch/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-59-three-releases-before-lunch/</guid><description>Three point releases in ten hours, each closing a real report from the first day v0.4.0 spent in the wild: a Docker port bypassing UFW, a Caddyfile dpkg refused to install, a validator that trusted a public endpoint, and one unreadable row that hid every integration.</description><pubDate>Fri, 17 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 58: v0.4.0 Is Out</title><link>https://heypinchy.com/blog/day-58-v040-is-out/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-58-v040-is-out/</guid><description>Release day. Three last-hours fixes to Ollama Cloud support, then a post-release sweep through the website that found the same pattern of drift one layer up: marketing claims that had quietly stopped matching the product. The kind of thing you only find by running the product, and reading the product, yourself.</description><pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 57: A UI That Stops Lying</title><link>https://heypinchy.com/blog/day-57-a-ui-that-stops-lying/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-57-a-ui-that-stops-lying/</guid><description>Two related clean-ups before shipping v0.4.0: the agent permission screen was offering toggles that didn&apos;t do anything, and Smithers had been repeating the docs back at itself instead of reading them. Both cut.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 56: When the Other Side Disappears</title><link>https://heypinchy.com/blog/day-56-when-the-other-side-disappears/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-56-when-the-other-side-disappears/</guid><description>A chat platform is only as trustworthy as its worst moment. Today was about what happens when the model backend vanishes mid-stream, and how the user finds out.</description><pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 55: Shared Memory, Different Boundaries</title><link>https://heypinchy.com/blog/day-55-release-shape/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-55-release-shape/</guid><description>Three conversations in one day, all circling the same problem: companies want agents that can access shared knowledge, but only with the right boundaries, roles, and permissions in place.</description><pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 54: Making the Dashboard Honest</title><link>https://heypinchy.com/blog/day-54-making-the-dashboard-honest/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-54-making-the-dashboard-honest/</guid><description>A usage dashboard is only useful if the numbers are trustworthy. Today was about timezones, cache tokens, missing days, retry states, and all the details that turn raw token counts into something a company can actually rely on.</description><pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 53: Three Tracks Toward v0.4.0</title><link>https://heypinchy.com/blog/day-53-three-tracks-toward-v040/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-53-three-tracks-toward-v040/</guid><description>Usage tracking, Telegram guardrails, and a growing library of Odoo templates: three parallel workstreams that all point in the same direction: making Pinchy operational for real teams.</description><pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 52: Stabilizing the Edges</title><link>https://heypinchy.com/blog/day-52-stabilizing-the-edges/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-52-stabilizing-the-edges/</guid><description>The day after a feature lands is when the real product work starts: fixing merge fallout, tightening error handling, improving Odoo validation UX, and making sure edge cases fail clearly instead of mysteriously.</description><pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 51: Complexity and Regulation</title><link>https://heypinchy.com/blog/day-51-complexity-and-regulation/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-51-complexity-and-regulation/</guid><description>Day two of the scheduling software workshop. And someone points out that a piece of EU regulation about to take effect is, for Pinchy, essentially a tailwind.</description><pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 50: Audit Outcome</title><link>https://heypinchy.com/blog/day-50-audit-outcome/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-50-audit-outcome/</guid><description>The audit trail now shows whether each action succeeded or failed. Plus pre-built images ship to GitHub Container Registry, and a two-day workshop reveals what it really means to automate complex business workflows.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 49: Audit Trail v2</title><link>https://heypinchy.com/blog/day-49-audit-v2/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-49-audit-v2/</guid><description>A new audit log format that records not just what happened, but whether it worked. Plus a plugin that lets Smithers read Pinchy&apos;s own documentation on demand.</description><pubDate>Tue, 07 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 48: Qwen by Default</title><link>https://heypinchy.com/blog/day-48-qwen-by-default/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-48-qwen-by-default/</guid><description>A small change to Pinchy&apos;s default model selection logic that makes local Ollama dramatically more reliable. Plus a WebSocket fix nobody asked for but everybody needed.</description><pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 47: The Merge Day</title><link>https://heypinchy.com/blog/day-47-the-merge-day/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-47-the-merge-day/</guid><description>The insecure mode banner officially merges. Ollama gets tool-calling enforcement. And a deep dive into why dependencies are a constant maintenance tax.</description><pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 46: Pull, Not Build</title><link>https://heypinchy.com/blog/day-46-pull-not-build/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-46-pull-not-build/</guid><description>Pinchy now ships pre-built Docker images instead of building them on every deploy. First-time setup goes from 15 minutes to under a minute.</description><pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 45: Polish Day</title><link>https://heypinchy.com/blog/day-45-the-banner/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-45-the-banner/</guid><description>Easter weekend, low-energy work, but the small UX details that make the difference between a developer toy and a real product.</description><pubDate>Fri, 03 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 44: Two Tracks</title><link>https://heypinchy.com/blog/day-44-two-tracks/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-44-two-tracks/</guid><description>Odoo agent templates that configure themselves, and local Ollama support that discovers models automatically. Two features, 45 commits, one very productive day.</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 43: Grok Sent Him</title><link>https://heypinchy.com/blog/day-43-grok-sent-him/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-43-grok-sent-him/</guid><description>Someone found Pinchy because an LLM recommended it. The Odoo config went from 867KB to 3KB. And I&apos;m starting to understand who Pinchy is actually for.</description><pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Day 42: The Merge</title><link>https://heypinchy.com/blog/day-42-the-merge/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-42-the-merge/</guid><description>Telegram is merged. The multi-user test found bugs, I fixed them, and the biggest feature branch in Pinchy&apos;s history finally landed on main.</description><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 41: Telegram Is Done</title><link>https://heypinchy.com/blog/day-41-telegram-is-done/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-41-telegram-is-done/</guid><description>The Telegram integration that almost derailed everything is finally finished. Plus two meetings that confirmed Pinchy is heading in exactly the right direction.</description><pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 40: The Email Question</title><link>https://heypinchy.com/blog/day-40-the-email-question/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-40-the-email-question/</guid><description>Every company I&apos;ve talked to wants the same thing: an agent that reads their email. Here&apos;s what that actually means to build.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 39: The Mock Server Trick</title><link>https://heypinchy.com/blog/day-39-the-mock-server-trick/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-39-the-mock-server-trick/</guid><description>How a fake Telegram server made the real integration better, and why the Telegram feedback loop matters more than it sounds.</description><pubDate>Sat, 28 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 38: v0.3.0</title><link>https://heypinchy.com/blog/day-38-v030/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-38-v030/</guid><description>The deployment release ships, Telegram goes multi-bot, a recruitment company wants to automate their entire workflow with Pinchy, and the product roadmap writes itself.</description><pubDate>Fri, 27 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 37: Three Calls, Three Countries</title><link>https://heypinchy.com/blog/day-37-three-calls-three-countries/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-37-three-calls-three-countries/</guid><description>An Austrian manufacturer wants AI-generated quotes from their ERP. An Irish fleet management company wants to turn NanoClaw into a team tool. And I&apos;m learning what &apos;enterprise-ready&apos; actually means.</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 36: Deployment Hardening</title><link>https://heypinchy.com/blog/day-36-deployment-hardening/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-36-deployment-hardening/</guid><description>Fixing everything that breaks when Pinchy leaves localhost: cookies, HTTPS, OpenClaw restarts, Telegram stability, and the gap between &apos;works in Docker&apos; and &apos;works in production.&apos;</description><pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 35: The First Real Deploy</title><link>https://heypinchy.com/blog/day-35-first-deploy/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-35-first-deploy/</guid><description>A pilot user tried to deploy Pinchy on Hetzner. It didn&apos;t go smoothly. So I built the deployment docs, a loading page, cloud-init automation, and fixed every issue he hit, in one day.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 34: The Scaling Question</title><link>https://heypinchy.com/blog/day-34-the-scaling-question/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-34-the-scaling-question/</guid><description>Telegram integration, security hardening, dynamic model selection, and the uncomfortable realization that demand is outpacing what one person can build.</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 33: Show Me the Tokens</title><link>https://heypinchy.com/blog/day-33-show-me-the-tokens/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-33-show-me-the-tokens/</guid><description>A full usage dashboard with cost tracking, a screenshot CI pipeline that fought back hard, and a WebSocket fix that should have been obvious.</description><pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 32: The PDF That Needed Eyes</title><link>https://heypinchy.com/blog/day-32-the-pdf-that-needed-eyes/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-32-the-pdf-that-needed-eyes/</guid><description>Building a PDF reader that actually works, from text extraction to vision fallback, plus five new feature pages, an automated screenshot pipeline, and a security fix that couldn&apos;t wait.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate></item><item><title>What Jensen Huang&apos;s OpenClaw Strategy Means for Pinchy</title><link>https://heypinchy.com/blog/nemoclaw-and-pinchy/</link><guid isPermaLink="true">https://heypinchy.com/blog/nemoclaw-and-pinchy/</guid><description>Nvidia&apos;s NemoClaw validates the enterprise OpenClaw market. Here&apos;s how Pinchy fits into the picture, and why infrastructure and application layers are complementary, not competitive.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 31: Three Talks in Ten Days</title><link>https://heypinchy.com/blog/day-31-three-talks-ten-days/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-31-three-talks-ten-days/</guid><description>v0.2.0 shipped, a freelancer meetup talk delivered, and the star challenge score: Vibecoding 20, Freelancers 10. Plus: Nvidia just validated our entire market.</description><pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 30: The Last Mile</title><link>https://heypinchy.com/blog/day-30-the-last-mile/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-30-the-last-mile/</guid><description>21 commits, zero new features. Why we spent an entire day on polish before shipping v0.2.0, and why that matters more than the next feature.</description><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 29: 100 Stars and Three Handshakes</title><link>https://heypinchy.com/blog/day-29-100-stars-and-three-handshakes/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-29-100-stars-and-three-handshakes/</guid><description>Two major PRs merged, a sold-out meetup talk, three companies wanting to integrate Pinchy, and crossing 100 GitHub stars.</description><pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 28: Secrets and Stages</title><link>https://heypinchy.com/blog/day-28-secrets-and-stages/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-28-secrets-and-stages/</guid><description>Building defense-in-depth for audit logs, and getting ready to tell the Pinchy story to a sold-out meetup.</description><pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 27: Release Prep</title><link>https://heypinchy.com/blog/day-27-release-prep/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-27-release-prep/</guid><description>Testing for v0.2.0, a look at everything shipping in the next release, and why openclaw-node deserves more attention.</description><pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 26: Three Branches, One Saturday</title><link>https://heypinchy.com/blog/day-26-three-branches-one-saturday/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-26-three-branches-one-saturday/</guid><description>Enterprise key system, Telegram integration, and provider config migration. Three feature branches running in parallel on a Saturday.</description><pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 25: Messaging, Not Workflows</title><link>https://heypinchy.com/blog/day-25-messaging-not-workflows/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-25-messaging-not-workflows/</guid><description>Telegram integration design, the first external feature request, 5 community PRs, and a clarity moment: Pinchy is a messaging tool.</description><pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 24: Tokens Are Money</title><link>https://heypinchy.com/blog/day-24-tokens-are-money/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-24-tokens-are-money/</guid><description>RBAC is merged, a real company wants to pilot Pinchy, and I&apos;m learning that token cost is the concern nobody talks about publicly.</description><pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 23: The Bug-Free Demo</title><link>https://heypinchy.com/blog/day-23-the-bug-free-demo/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-23-the-bug-free-demo/</guid><description>First demo without a single bug. A cybersecurity startup grills Pinchy on security. RBAC edge cases continue. And the confidence is building.</description><pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 22: The Perfect Setup</title><link>https://heypinchy.com/blog/day-22-the-perfect-setup/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-22-the-perfect-setup/</guid><description>Peter Steinberger says nobody&apos;s building enterprise OpenClaw tooling. 30 seconds later, I&apos;m on stage showing Pinchy. Plus: RBAC edge cases and why manual testing still matters.</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 21: The Calls That Shaped the Roadmap</title><link>https://heypinchy.com/blog/day-21-the-calls-that-shaped-the-roadmap/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-21-the-calls-that-shaped-the-roadmap/</guid><description>Multiple demo calls, an enterprise from Dubai, a potential partnership, a talk at tomorrow&apos;s 280-person meetup, and the first enterprise feature: RBAC.</description><pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 20: v0.1.0</title><link>https://heypinchy.com/blog/day-20-v010/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-20-v010/</guid><description>542 commits. 33 PRs. 20 days. Pinchy has its first official release.</description><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 19: Release Ready</title><link>https://heypinchy.com/blog/day-19-release-ready/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-19-release-ready/</guid><description>24 commits, 5 PRs, zero new features. Just making Docker startup actually work. The unglamorous work that makes a v1 possible.</description><pubDate>Sat, 07 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 18: First Users, First Lessons</title><link>https://heypinchy.com/blog/day-18-first-users-first-lessons/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-18-first-users-first-lessons/</guid><description>A no-show demo, the founder impatience problem, and 14 commits making Pinchy actually work for the people who cloned it.</description><pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 17: The Merge</title><link>https://heypinchy.com/blog/day-17-the-merge/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-17-the-merge/</guid><description>Coded in the dentist&apos;s waiting room. Claude kept going during the cleaning. Then PR #21 landed: Better Auth replaces Auth.js in Pinchy.</description><pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 16: Auth, Mobile, and Real Users</title><link>https://heypinchy.com/blog/day-16-auth-mobile-and-real-users/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-16-auth-mobile-and-real-users/</guid><description>A complete auth system migration, mobile navigation from scratch, and a conversation from Brazil that opened up new use cases.</description><pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 15: The Fix-Everything Day</title><link>https://heypinchy.com/blog/day-15-the-fix-everything-day/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-15-the-fix-everything-day/</guid><description>Yesterday&apos;s demo broke things. Today I fixed all of them. And then kept going.</description><pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 13: The Thinking Day</title><link>https://heypinchy.com/blog/day-13-the-thinking-day/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-13-the-thinking-day/</guid><description>Zero commits. No code. Just the questions that shape the next two weeks.</description><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 14: The Demo That Broke Everything</title><link>https://heypinchy.com/blog/day-14-the-demo-that-broke-everything/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-14-the-demo-that-broke-everything/</guid><description>A live demo, an Anthropic outage, and two GitHub issues filed before the call was over.</description><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 12: The Audit Trail Closes</title><link>https://heypinchy.com/blog/day-12-the-audit-trail-closes/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-12-the-audit-trail-closes/</guid><description>PR #3 merged. Every tool call now leaves a trace. Plus: a marketing experiment that backfired.</description><pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Day 11: The Ecosystem Day</title><link>https://heypinchy.com/blog/day-11-the-ecosystem-day/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-11-the-ecosystem-day/</guid><description>Two npm releases, audit trail upgrades, and three calls with people who want to build with us.</description><pubDate>Sat, 28 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Day 10: Context Belongs to People, Not Agents</title><link>https://heypinchy.com/blog/day-10-context-belongs-to-people/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-10-context-belongs-to-people/</guid><description>A data model that felt right at 2 agents broke at 5. Plus: the audit trail gets honest about tool usage.</description><pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Day 9: Making It Feel Right</title><link>https://heypinchy.com/blog/day-9-making-it-feel-right/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-9-making-it-feel-right/</guid><description>31 commits. 128 files. The first PR merge, fun-emoji avatars, and why polish isn&apos;t optional.</description><pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Day 8: Give Your Agent a Face</title><link>https://heypinchy.com/blog/day-8-give-your-agent-a-face/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-8-give-your-agent-a-face/</guid><description>11 commits. 72 files. 3,149 lines. Why giving your AI agent a face changes everything.</description><pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Day 7: Agents Are People Too</title><link>https://heypinchy.com/blog/day-7-agents-are-people-too/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-7-agents-are-people-too/</guid><description>16 commits. A product philosophy, a lobster in a bowtie, and the rewrite I didn&apos;t plan.</description><pubDate>Mon, 23 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Day 6: The Personality Layer</title><link>https://heypinchy.com/blog/day-6-the-personality-layer/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-6-the-personality-layer/</guid><description>26 commits. 5,000 lines. What makes an AI agent feel like yours?</description><pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Day 5: The Enterprise Gauntlet</title><link>https://heypinchy.com/blog/day-5-the-enterprise-gauntlet/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-5-the-enterprise-gauntlet/</guid><description>77 commits. 15,000 lines of code. A conversation in a gym that changed everything.</description><pubDate>Sat, 21 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Day 4: From Solo to Team</title><link>https://heypinchy.com/blog/day-4-from-solo-to-team/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-4-from-solo-to-team/</guid><description>63 commits. 12,000 lines of code. One question: what happens when it&apos;s not just you anymore?</description><pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Day 3: Encryption, Onboarding, and a Trojan Horse</title><link>https://heypinchy.com/blog/day-3-the-trojan-horse/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-3-the-trojan-horse/</guid><description>30 commits. 57 files changed. 7,652 lines added. Day 3 was intense.</description><pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Day 2: From Zero to Chat in One Day</title><link>https://heypinchy.com/blog/day-2-from-zero-to-chat/</link><guid isPermaLink="true">https://heypinchy.com/blog/day-2-from-zero-to-chat/</guid><description>Yesterday I had a website and a dream. Today I have a working application. 29 commits, roughly 2,000 lines of code, and you can actually talk to an AI agent through Pinchy&apos;s UI.</description><pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Building Pinchy in Public: Day 1</title><link>https://heypinchy.com/blog/building-pinchy-in-public/</link><guid isPermaLink="true">https://heypinchy.com/blog/building-pinchy-in-public/</guid><description>Today is Day 1. Pinchy doesn&apos;t exist yet, not as code, anyway. It exists as an idea, a website, and this blog post. I&apos;m building in public, which means you get to see the messy beginning, not just...</description><pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate></item></channel></rss>