{"@attributes":{"version":"2.0"},"channel":{"title":"Jerad Bitner","description":"Personal site and blog of Jerad Bitner, a developer, writer, and creative technologist exploring code, family, fiction, and the web.","link":"https:\/\/jeradbitner.com","item":[{"title":"Pinboard: Keeping the Things I Need to Act On in View","description":"<p>The longer a Claude Code session runs, the more things scroll away. Claude asks me a question, keeps working, and twenty tool calls later I\u2019ve forgotten it was ever asked. The PR it opened an hour ago is buried somewhere above a wall of diffs.<\/p>\n\n<p>So I built <a href=\"https:\/\/github.com\/sirkitree\/pinboard\">Pinboard<\/a>, a small mod that keeps those things in a sidebar pane.<\/p>\n\n<!--more-->\n\n<p><img src=\"\/img\/pinboard-post\/board-in-progress.png\" alt=\"Pinboard pane beside a Claude Code session, with one open decision and two of four todos done\" \/><\/p>\n\n<h2 id=\"whats-a-mod\">What\u2019s a mod?<\/h2>\n\n<p><a href=\"https:\/\/code.claude.com\/docs\/en\/plugins\/mods\/overview\">Mods<\/a> are a new kind of Claude Code plugin: JavaScript or TypeScript that runs inside Claude Code and reacts to events like tool calls, prompts, or parts of the interface being drawn. Settings hooks, skills and MCP servers can\u2019t draw anything. A mod can, which is what made a sidebar possible. One caveat from the docs worth repeating: mods run with your permissions and aren\u2019t sandboxed, so only install ones you trust.<\/p>\n\n<h2 id=\"what-it-does\">What it does<\/h2>\n\n<p>The board has three lists. Open decisions are questions waiting on me. Todos are the session\u2019s task list. Links are URLs from things Claude just made, like a PR, an issue or a push. I only capture links from commands that create something, because reads and test runs mention URLs constantly and I don\u2019t care about those.<\/p>\n\n<p>Claude updates the board through a tool, and each update shows up as one dim line in the transcript, like <code class=\"language-plaintext highlighter-rouge\">Pinboard: +4 todo, +1 decision<\/code>. The current board also gets appended to the system prompt on every request, so Claude always knows what\u2019s open without me reminding it. That also means Pinboard doesn\u2019t lean on <code class=\"language-plaintext highlighter-rouge\">TodoWrite<\/code> or the Task tools, which newer models don\u2019t get by default anyway. Claude Code\u2019s own task list isn\u2019t something I can count on being there, so the board brings its own.<\/p>\n\n<p>The pane opens on its own the first time something lands on the board, if the terminal is wide enough. Otherwise <code class=\"language-plaintext highlighter-rouge\">\/pinboard<\/code> opens it. Everything resets on <code class=\"language-plaintext highlighter-rouge\">\/clear<\/code>, which is how I want it. It\u2019s a whiteboard for this conversation, not a project tracker.<\/p>\n\n<h2 id=\"try-it\">Try it<\/h2>\n\n<div class=\"language-bash highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>claude plugin marketplace add sirkitree\/pinboard\nclaude plugin <span class=\"nb\">install <\/span>pinboard@pinboard\n<\/code><\/pre><\/div><\/div>\n\n<p>Mods are new, and the API is still moving between releases, so I expect to be patching this.<\/p>\n\n<p>What I keep noticing is how much of working with an agent is about attention, not capability. Claude could always keep track of my todos. I just couldn\u2019t see them.<\/p>\n","pubDate":"Sat, 03 Oct 2026 15:00:00 -0400","link":"https:\/\/jeradbitner.com\/blog\/pinboard-claude-code-mod","guid":"https:\/\/jeradbitner.com\/blog\/pinboard-claude-code-mod"},{"title":"A Defect or a Betrayal: What Jesus Actually Said About Sin","description":"<p>At our Bible study last Monday, someone in the group challenged my whole way of thinking with one sentence: \u201cI\u2019m not sure I believe in sin.\u201d<\/p>\n\n<!--more-->\n\n<p>I want to start by thanking him for that. Bringing up a core tenet and putting real pressure on it is harder than agreeing, and it got me thinking all week. I haven\u2019t been able to put the thought down. So here\u2019s where the study led me.<\/p>\n\n<p>I was trimming my grapes the other evening, listening to K-Love on Pandora, when the thought arrived: if there is no sin, then what did Jesus die for?<\/p>\n\n<p>That sent me looking at what the Bible actually says about sin, and what Jesus himself said about why he would die.<\/p>\n\n<p>In 1 Corinthians 15:3, Paul passes along what he calls received tradition:<\/p>\n\n<blockquote>\n  <p>\u201cFor I delivered unto you first of all that which I also received, how that Christ died for our sins according to the scriptures.\u201d<\/p>\n<\/blockquote>\n\n<p>So we learn this early in church and receive it as a core tenet. Fine. But received isn\u2019t the same as examined.<\/p>\n\n<p>The other central passages line up the same way. Romans 5:8, God shows his love in that Christ died for us while we were still sinners. 2 Corinthians 5:21, the one who knew no sin was made sin for our sake. 1 Peter 2:24, he bore our sins in his body on the cross. 1 John 2:2, he is the atoning sacrifice for our sins and for the whole world\u2019s. Hebrews 9 and 10 run an extended argument that his death was a single, final sacrifice replacing the temple system. And Isaiah 53 is the Old Testament passage the early church read as prefiguring all of it, where the servant is wounded for others\u2019 transgressions.<\/p>\n\n<p>Except those are all other people talking about sin. What did Jesus say?<\/p>\n\n<p>From Jesus himself the material is sparser, but pointed. Mark 10:45, he came to give his life as a ransom for many. And the words over the cup at the Last Supper, Mark 14:24, blood poured out for many.<\/p>\n\n<p>He says less about sin in the abstract than about specific people caught in it. But a few consistent moves run through the teaching.<\/p>\n\n<p>He relocates it from the act to the interior. The Sermon on the Mount keeps taking a command and driving it inward: you\u2019ve heard do not murder, but anger already belongs to the same family; you\u2019ve heard do not commit adultery, but the look that possesses someone has already done the thing (Matthew 5:21\u201328). In Mark 7 he makes it explicit. Nothing entering a person defiles them. What comes out of the heart does. That one saying dismantles a whole purity system. Sin is something you generate, not something you catch.<\/p>\n\n<p>He treats it as a condition producing symptoms rather than a tally of incidents. A tree is known by its fruit, and a good person brings good things out of the heart\u2019s storehouse (Matthew 7:17\u201320, 12:33\u201335). And in John 8:34, sharply: everyone who sins is a slave to sin. Not \u201chas done something wrong\u201d but \u201cis held by something.\u201d<\/p>\n\n<p>He inverts the expected ranking, and this is the most disruptive part. The people in genuine danger, in his telling, are not the notorious ones. They\u2019re the ones certain they\u2019re fine. The tax collector who won\u2019t lift his eyes goes home justified; the Pharisee reciting his virtues doesn\u2019t (Luke 18:9\u201314). Those who are well have no need of a physician (Mark 2:17). Take the log out of your own eye first (Matthew 7:3\u20135). In John 9:41 he tells people that claiming to see is precisely what keeps their guilt in place. Admitted sin is workable. Unadmitted sin is the trap.<\/p>\n\n<p>He isn\u2019t lenient about it, either. The same teacher who eats with the wrong people says it would be better to lose a hand or an eye than to be ruined whole (Matthew 5:29\u201330), and that anyone who trips up one of the little ones would be better off drowned (Mark 9:42). He takes it more seriously than his critics did, not less.<\/p>\n\n<p>And in practice, he forgives before anyone has earned it. He tells the paralytic his sins are forgiven before he heals him. The woman accused of adultery is sent off uncondemned but not unaddressed: go, and don\u2019t do this again.<\/p>\n\n<h2 id=\"but-what-is-it\">But what is it?<\/h2>\n\n<p>None of that actually defines the thing. It establishes why Christians believe Jesus died for our sins. It doesn\u2019t say what sin <em>is<\/em>.<\/p>\n\n<p>The word in the biblical languages is mostly an archery metaphor. <em>Chet<\/em> in Hebrew, <em>hamartia<\/em> in Greek, both carrying the sense of missing the mark. That\u2019s the base image. Aiming at something and falling short. Which already smuggles in a claim: there\u2019s a mark to miss, some intended shape for a human life.<\/p>\n\n<p>Past that, the tradition stacks several distinct ideas under the same word. There\u2019s transgression, the legal sense, breaking a command. There\u2019s rupture, sin as a broken relationship between a person and God and between people, which is what the prodigal son story runs on and what we spent most of Monday circling. There\u2019s sin as a condition rather than a set of acts, the way Paul writes about it in Romans 7 as a power inhabiting people so that he does what he doesn\u2019t want to do, and in Romans 5 as something that entered through one man and spread to everyone, which is the seedbed of what later got called original sin. And there\u2019s Augustine\u2019s framing, later developed by Aquinas, of disordered love: not desiring bad things, but desiring good things wrongly, too much, or in the wrong order.<\/p>\n\n<p>The archery image threads through all of them. The claim isn\u2019t primarily that you\u2019ve broken rules. It\u2019s that you\u2019re not yet what you could be.<\/p>\n\n<h2 id=\"where-that-leaves-the-original-challenge\">Where that leaves the original challenge<\/h2>\n\n<p>The texts establish that Jesus taught about sin coherently and at length. If his authority is granted, the case is closed. If it isn\u2019t, then what you\u2019ve established is what a first-century teacher believed, which is a different thing and a much smaller one.<\/p>\n\n<p>What\u2019s more interesting to me is that a good deal of what he describes doesn\u2019t need theology to be recognizable. The log in your own eye. The certainty that insulates you from seeing yourself. The gap between what you intend and what you actually do. The way harm keeps propagating when it isn\u2019t forgiven. Those are observable, and people with no religious commitment at all describe them constantly under other names. Someone can accept every bit of that and still resist the word \u201csin,\u201d because the word carries an extra claim: that the mark being missed was set by God, and that the failure is against a person rather than merely a standard.<\/p>\n\n<p>The diagnosis lands whether or not you accept the physician.<\/p>\n\n<p>Plainly, something is wrong with us. Not with circumstances, not with other people, but with us. Including me, and including you. Everyone who has looked honestly has found it. The thing I swore I\u2019d stop doing and did again. The ease of seeing another\u2019s fault against the difficulty of seeing my own. The way I can want to be good and still not manage it. Jesus described this more precisely than almost anyone, and he wasn\u2019t describing a doctrine. He was describing what he saw.<\/p>\n\n<p>Whether you call it sin depends on one thing: whether there\u2019s someone the failure is against. Sin isn\u2019t just wrongdoing. It means the mark was set, and you owe an answer for missing it. Drop God and you still have the wrongdoing, but you lose the mark and the one who set it. You\u2019re left with a very good description of the human condition and no one to take it to.<\/p>\n\n<p>That\u2019s the actual fork. Not whether the condition is real, because it plainly is. Whether it\u2019s a defect or a betrayal.<\/p>\n","pubDate":"Sat, 25 Jul 2026 00:00:00 -0400","link":"https:\/\/jeradbitner.com\/2026\/07\/a-defect-or-a-betrayal\/","guid":"https:\/\/jeradbitner.com\/2026\/07\/a-defect-or-a-betrayal\/"},{"title":"Showing my kids how phi and pi fit together","description":"<p>At dinner last night, I got into a conversation with the kids about pi, phi, and sacred geometry. Which is not where every family dinner goes, but ours wandered there, and I was happy to follow it.<\/p>\n\n<p>The hard part was that I could hear myself explaining something visual with too many words. Pi is easy enough to point at: circles, wheels, ripples in water, pizza if you need the obvious dinner-table example. Phi is stranger. It shows up as proportion, growth, spirals, pentagons, sunflowers, and that feeling certain shapes have where they seem balanced before you know why.<\/p>\n\n<!--more-->\n\n<p>Then comes the question I was trying to answer: how do those two numbers relate to each other?<\/p>\n\n<p>They feel like they belong in different drawers. Pi is the circle number. Phi is the golden ratio. One measures turning around a center. The other describes growth and proportion. But if you draw a regular pentagon and connect its corners into a five-pointed star, they suddenly show up in the same place.<\/p>\n\n<p>That was the part I wanted the kids to be able to see.<\/p>\n\n<p>So I made a small interactive page: <a href=\"\/phi-and-pi\/\">Phi &amp; Pi: Two Constants, One Geometry<\/a>. It walks through the golden ratio, circles, pentagrams, golden spirals, the Flower of Life, Metatron\u2019s Cube, and the Platonic solids. The goal is not to make a textbook. It\u2019s more like a little visual field trip.<\/p>\n\n<p>Here\u2019s the relationship that still gets me:<\/p>\n\n<div class=\"language-text highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>phi = 2 \u00d7 cos(pi \/ 5)\n<\/code><\/pre><\/div><\/div>\n\n<p>That\u2019s not a poetic almost-connection. It\u2019s exact. The golden ratio can be written using pi because the regular pentagon divides a circle into five equal angles. Draw the diagonals, and those lines cut each other in the golden ratio. The circle gives you the angles. The star gives you the proportion.<\/p>\n\n<p>Pi turns. Phi grows.<\/p>\n\n<p>The golden spiral makes that easier to feel. Each quarter turn is a slice of a circle, so pi is doing the turning. Each step grows by the golden ratio, so phi is doing the scaling. The curve only works because both ideas are taking turns.<\/p>\n\n<p>Sacred geometry sits in that same space for me. I don\u2019t think you need to treat every ancient diagram as a secret code for the universe. Some of that gets weird fast. But I do think there is something worth noticing when simple rules keep producing forms that humans across time have found beautiful, meaningful, and strangely familiar.<\/p>\n\n<p>Overlapping circles make the Flower of Life. Connect the right points and you get Metatron\u2019s Cube. From there you can start seeing the shadows of the Platonic solids, and some of those solids bring phi right back into the room through pentagons and golden rectangles.<\/p>\n\n<p>That\u2019s the thing I wanted to show the kids. Not \u201chere is a mystical proof,\u201d and not \u201chere is a dry math lesson,\u201d but: look at this. A circle, a five-pointed star, a spiral, a flower pattern. They are not random decorations. There is structure under them.<\/p>\n\n<p>I like when math does that. It stops being a worksheet and becomes a way to notice the world.<\/p>\n\n<p>And now, the next time dinner turns into a conversation about sacred geometry, I have something better than waving my hands around with a fork.<\/p>\n","pubDate":"Thu, 21 May 2026 00:00:00 -0400","link":"https:\/\/jeradbitner.com\/blog\/phi-and-pi","guid":"https:\/\/jeradbitner.com\/blog\/phi-and-pi"},{"title":"Forking My Claude Code Statusline","description":"<p>About six months ago I <a href=\"\/blog\/claude-code-statusline\">wrote about dropping in hell0github\u2019s statusline<\/a> and calling it done. That stuck for a while. Then I kept wanting to change small things \u2014 the model abbreviation, which sections showed up, what the weekly bar actually counted \u2014 and <code class=\"language-plaintext highlighter-rouge\">curl<\/code>-ing a fresh script into <code class=\"language-plaintext highlighter-rouge\">~\/.claude\/<\/code> every time I tweaked something got old fast.<\/p>\n\n<p>So I forked it into <a href=\"https:\/\/github.com\/sirkitree\/claude-statusline\">its own repo<\/a> and changed how I install it.<\/p>\n\n<!--more-->\n\n<h2 id=\"the-symlink-trick\">The symlink trick<\/h2>\n\n<p>The install script does one thing that matters: it symlinks <code class=\"language-plaintext highlighter-rouge\">statusline.sh<\/code> and <code class=\"language-plaintext highlighter-rouge\">statusline-config.json<\/code> from the repo into <code class=\"language-plaintext highlighter-rouge\">~\/.claude\/<\/code>, backing up whatever was there before. That means the file Claude Code runs is the file in my git checkout. Pull the repo, the statusline updates. No copy step. No \u201cwait, did I edit the right one?\u201d moment that I\u2019ve definitely had before with dotfiles.<\/p>\n\n<div class=\"language-bash highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>git clone git@github.com:sirkitree\/claude-statusline.git ~\/repos\/claude-statusline\n<span class=\"nb\">cd<\/span> ~\/repos\/claude-statusline <span class=\"o\">&amp;&amp;<\/span> .\/install.sh\n<\/code><\/pre><\/div><\/div>\n\n<p>If I\u2019m on a different machine I run the same two commands and I\u2019m done. The config lives next to the script, so it travels with the repo too.<\/p>\n\n<h2 id=\"what-i-actually-changed-in-the-script\">What I actually changed in the script<\/h2>\n\n<p>The original was already doing the heavy lifting with <code class=\"language-plaintext highlighter-rouge\">ccusage<\/code> and the multi-layer cost bar. The changes that mattered to me:<\/p>\n\n<p>The weekly percentage now reads from <code class=\"language-plaintext highlighter-rouge\">rate_limits.seven_day.used_percentage<\/code> in the JSON Claude Code pipes to the statusline. The previous approach divided ccusage\u2019s dollar cost by a hardcoded $500 weekly cap for max5x, which is just wrong \u2014 Claude Max limits are message-based quotas, not dollar quotas. So my old statusline was confidently telling me \u201cweekly 0%\u201d when claude.ai\/settings\/usage said something else entirely. Now they agree.<\/p>\n\n<p>I added a 5-hour session block from <code class=\"language-plaintext highlighter-rouge\">rate_limits.five_hour<\/code> that shows the percentage and time until reset, which is a more useful signal than the ccusage block timer when you\u2019re trying to figure out whether to keep going or wait it out.<\/p>\n\n<p>Model names are abbreviated \u2014 <code class=\"language-plaintext highlighter-rouge\">Claude Opus 4.7<\/code> becomes <code class=\"language-plaintext highlighter-rouge\">o4.7<\/code>, sonnet becomes <code class=\"language-plaintext highlighter-rouge\">s<\/code>, haiku <code class=\"language-plaintext highlighter-rouge\">h<\/code>. If the context window is 1M it tacks on <code class=\"language-plaintext highlighter-rouge\">(1m)<\/code>. Saves horizontal space, and at this point I recognize the shorthand faster than the full name.<\/p>\n\n<p>There\u2019s an <code class=\"language-plaintext highlighter-rouge\">effort<\/code> section now too, since some models expose <code class=\"language-plaintext highlighter-rouge\">\/effort<\/code> levels (low\/medium\/high\/xhigh\/max \u2192 <code class=\"language-plaintext highlighter-rouge\">lo<\/code>\/<code class=\"language-plaintext highlighter-rouge\">md<\/code>\/<code class=\"language-plaintext highlighter-rouge\">hi<\/code>\/<code class=\"language-plaintext highlighter-rouge\">xh<\/code>\/<code class=\"language-plaintext highlighter-rouge\">mx<\/code>). Useful for remembering what I set the dial to three hours ago.<\/p>\n\n<p>Every section is toggleable in <code class=\"language-plaintext highlighter-rouge\">statusline-config.json<\/code> under <code class=\"language-plaintext highlighter-rouge\">sections.*<\/code>. Colors live there too. The thresholds for the multi-layer cost bar (where it flips green\u2192orange\u2192red) are configurable instead of hardcoded.<\/p>\n\n<h2 id=\"what-it-looks-like-now\">What it looks like now<\/h2>\n\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>sirkitree.github.com | o4.7 | mx | master | 23k\/200k [\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] | $12\/$140 [\u2588\u2502\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] 9% | weekly 34% | session 18% \u2192 2h 14m | \u00d71\n<\/code><\/pre><\/div><\/div>\n\n<p>A lot of glanceable signal in one line. The pipe between the cost bar\u2019s filled portion and empty portion is the projection \u2014 where ccusage thinks I\u2019ll end up by the end of the 5-hour block \u2014 colored by which layer it lands in.<\/p>\n\n<h2 id=\"why-a-fork-instead-of-a-pr\">Why a fork instead of a PR<\/h2>\n\n<p>Honestly, because the changes are opinionated. The hardcoded weekly limit was a real bug, but the model-name abbreviation, the effort section, the rearrangement of what\u2019s a \u201csection\u201d \u2014 that\u2019s all personal taste. It\u2019s easier to maintain my own version than to argue every preference into someone else\u2019s repo. And the symlink workflow means my taste is one <code class=\"language-plaintext highlighter-rouge\">git pull<\/code> away on every machine I use.<\/p>\n\n<p>The repo is at <a href=\"https:\/\/github.com\/sirkitree\/claude-statusline\">sirkitree\/claude-statusline<\/a> if you want to grab it or rip pieces out. Credit where it\u2019s due \u2014 the bones are still hell0github\u2019s, and the cost data still flows through <a href=\"https:\/\/www.npmjs.com\/package\/ccusage\">ccusage<\/a>.<\/p>\n","pubDate":"Mon, 27 Apr 2026 10:00:00 -0400","link":"https:\/\/jeradbitner.com\/blog\/claude-statusline-fork","guid":"https:\/\/jeradbitner.com\/blog\/claude-statusline-fork"},{"title":"Meet the cast of Quantum Weave","description":"<p>The <a href=\"\/books\/quantum-weave\/\">Quantum Weave<\/a> site has had a magic-system page and a stack of short stories around it for months. What it didn\u2019t have was people.<\/p>\n\n<p>That bothered me. The <a href=\"\/books\/quantum-weave\/\">infographic<\/a> explained how the nine disciplines work, the <a href=\"\/tags\/quantum-weave\/\">narratives<\/a> showed reality fracturing in interesting ways, but if you landed on the page cold you couldn\u2019t tell who any of the stories were about, who they were trying to save, or who they were trying to stop. The world had nine sciences and zero faces.<\/p>\n\n<p>Now there are eight. <a href=\"\/books\/quantum-weave\/characters\/mira-caldwell\/\">Mira Caldwell<\/a>, the master healer who hums old songs out of Veras while she works. <a href=\"\/books\/quantum-weave\/characters\/silas-greythorne\/\">Silas Greythorne<\/a>, the rogue architect with a publicly disastrous expulsion behind him and a charisma that still pulls people in. <a href=\"\/books\/quantum-weave\/characters\/yara-venn\/\">Yara Venn<\/a>, nineteen and self-taught, with light that obeys her even though her form is wrong. <a href=\"\/books\/quantum-weave\/characters\/vex-mortain\/\">Vex Mortain<\/a>, the Whisper-rank operative whose mental signature changes color with the room. <a href=\"\/books\/quantum-weave\/characters\/thera-moss\/\">Thera Moss<\/a>, barefoot in the Highland Farmsteads with soil under her nails, slow and patient and immovable. <a href=\"\/books\/quantum-weave\/characters\/rowan-marrick\/\">Rowan Marrick<\/a>, late-awakened at twenty-six, asking questions of pre-collapse hinges that should not still hold. <a href=\"\/books\/quantum-weave\/characters\/torin-ashwright\/\">Torin Ashwright<\/a>, the ninth-generation forge master who sings when the work runs long. <a href=\"\/books\/quantum-weave\/characters\/kael-theron\/\">Kael Theron<\/a>, most-cited Weaver researcher alive, ink-stained, narrating his own hands.<\/p>\n\n<!--more-->\n\n<h2 id=\"writing-them\">Writing them<\/h2>\n\n<p>I\u2019d been keeping detailed character files in a separate worldbuilding repo for a while. Three or four hundred lines apiece, full of magical profile, signature techniques, motivations, fears, story potential. Useful for me, useless for anyone else. The files were a stat sheet wearing a story\u2019s clothes.<\/p>\n\n<p>So I tried something. What if the public page read like introducing the character to a close friend? Less D&amp;D-block, more \u201clet me tell you about this person.\u201d Not \u201cMira Caldwell, age 42, she\/her, primary disciplines Corpus and Luxomancy at master level,\u201d but instead, \u201cIf you walked into Mira\u2019s ward at the Restoration Academy on any given afternoon, you\u2019d find her humming.\u201d<\/p>\n\n<p>That second framing wants different things from the prose. It wants a present-tense scene to open. It wants specifics over abstractions \u2014 a Veras Market collapse, a particular braid, the way her phrasing falls in pitch when she\u2019s calming a patient who doesn\u2019t realize they\u2019re being calmed. It wants the writer to sound like they actually know the person.<\/p>\n\n<p>The tradeoff was harder than I expected. The first draft had spoilers all over it because the most compelling material I had was exactly the stuff a reader shouldn\u2019t see before chapter one \u2014 active investigations, hidden truths the character doesn\u2019t yet know, the names of antagonists who matter to a later arc, the specific traumas that drive each story. Each profile got revised to focus on who the person <em>is<\/em> publicly, what they <em>do<\/em> for a living, what their reputation says about them. Less story, more dossier-with-a-pulse.<\/p>\n\n<h2 id=\"the-wiring\">The wiring<\/h2>\n\n<p>Each profile has a full-size portrait on the left that stays visible as you scroll, with the narrative on the right. Discipline names in the prose get a small dotted underline; hover one and you get a tooltip with the discipline code, a one-line summary, and a link to the full discipline page. Other characters mentioned in a profile become links to their own profile, with a tiny hover card showing name and role.<\/p>\n\n<p>That cross-linking was a discovery. Once I had all eight profiles in front of me I noticed the characters mention each other constantly. Mira and Kael published together. Kael\u2019s peer review touched Silas\u2019s expulsion. Vex has worked the Forge Masters. Rowan trades custom tools with Torin. The character pages map onto each other the way disciplines do, and letting a reader click through that web feels right for a worldbuilding site.<\/p>\n\n<p>The whole pass was <a href=\"https:\/\/github.com\/sirkitree\/sirkitree.github.com\/commit\/1db3fba\">a single commit<\/a>, with a generous assist from parallel Claude Code agents \u2014 eight in parallel for the first draft of the profiles, then eight more for the spoiler-strip pass. I sat in the conductor seat, the agents handled the typing.<\/p>\n\n<h2 id=\"what-im-still-figuring-out\">What I\u2019m still figuring out<\/h2>\n\n<p>I don\u2019t know yet how the dossier voice will hold up across 100,000 words of finished novel. The profiles work as standalone introductions, the way an appendix sits at the back of a book, but the voice I used to write <em>about<\/em> the characters isn\u2019t the voice I\u2019ll use to write <em>with<\/em> them. Mira\u2019s dry humor on her profile page is a description. In a scene she\u2019ll have to do it.<\/p>\n\n<p>There\u2019s also the question of whether the portraits I\u2019m using are the ones I want to print. They were generated, refined, regenerated, and at some point I called them done because I had to call them something done. If I ever actually publish I\u2019ll probably commission proper art. For now the wiki has faces.<\/p>\n\n<p>The <a href=\"\/books\/quantum-weave\/characters\/\">character index<\/a> is the door if you want to poke around. Mira and Torin and Rowan are the <a href=\"\/books\/quantum-weave\/characters\/\">main cast<\/a> at the top; the other five orbit them. The <a href=\"\/books\/quantum-weave\/\">infographic<\/a> explains what the disciplines do, and the <a href=\"\/tags\/quantum-weave\/\">narratives tag<\/a> has the short stories that started this whole thing.<\/p>\n","pubDate":"Sun, 26 Apr 2026 00:00:00 -0400","link":"https:\/\/jeradbitner.com\/blog\/meet-the-cast-of-quantum-weave","guid":"https:\/\/jeradbitner.com\/blog\/meet-the-cast-of-quantum-weave"},{"title":"Jenney's Story Featured on the Cancer Research Institute","description":"<p>The Cancer Research Institute published <a href=\"https:\/\/www.cancerresearch.org\/stories\/patients\/jenney-bitner\">Jenney\u2019s patient story<\/a> on their site. It\u2019s strange seeing our worst year turned into someone else\u2019s summary.<\/p>\n\n<!--more-->\n\n<p>If you\u2019ve been reading here a while, you already know the broad strokes \u2014 headaches during pregnancy, two brain surgeries, stage 4 metastatic melanoma while we had a newborn and four other kids at home. The CRI piece covers the medical side well: the immunotherapy treatments, tumors disappearing after one infusion, the side effects that forced treatment to stop early, and the October 2020 scan that came back clean.<\/p>\n\n<p>What a patient profile can\u2019t really get at is the rest of it. The 3 AM conversations. The way our older kids stepped up in ways no child should have to. Watching Jenney relearn our children\u2019s names after brain surgery \u2014 not as a metaphor, but literally, one syllable at a time.<\/p>\n\n<p>That\u2019s what I wrote the memoir about. <a href=\"\/2025\/08\/title-reveal-learning-your-childrens-names-again\/\">Learning Your Children\u2019s Names Again<\/a> has the parts that don\u2019t fit in a medical profile \u2014 the fear, the dark humor, the weird mundane details that somehow matter more than the scans did.<\/p>\n\n<p>If you read Jenney\u2019s story on CRI and want the full picture, the book is available now:\n<a href=\"https:\/\/www.amazon.com\/dp\/B0FNPS91C2\" class=\"btn btn-primary\">Kindle eBook<\/a>\n<a href=\"https:\/\/www.amazon.com\/dp\/B0FPB63T63\" class=\"btn secondary\">Paperback<\/a><\/p>\n\n<p>Jenney\u2019s still in remission. The kids are getting big. Some weeks I forget any of it happened, which I think is its own kind of miracle.<\/p>\n","pubDate":"Thu, 16 Apr 2026 00:00:00 -0400","link":"https:\/\/jeradbitner.com\/2026\/04\/jenneys-story-on-cancer-research-institute\/","guid":"https:\/\/jeradbitner.com\/2026\/04\/jenneys-story-on-cancer-research-institute\/"},{"title":"Designing with Pencil and Claude Code","description":"<p>I\u2019ve been building two internal tools at Lullabot lately. OpptyNet finds government RFPs for us. Upstraker tracks upstream patches across our open source contributions. Both needed real UI design, not just \u201cmake it work\u201d design. And I found myself doing that design work almost entirely through conversation.<\/p>\n\n<!--more-->\n\n<p>The tool is called <a href=\"https:\/\/pencel.dev\">Pencil<\/a>. It\u2019s a design editor that integrates with Claude Code through MCP, so you can describe what you want, iterate on layouts, build component libraries, and screenshot your work without leaving the terminal. The <code class=\"language-plaintext highlighter-rouge\">.pen<\/code> files it produces are encrypted, only accessible through the Pencil tools themselves. You don\u2019t open them in Figma. You don\u2019t drag boxes around with a mouse. You talk about what you need and the design materializes.<\/p>\n\n<p>I was skeptical. But after running two projects through it, I\u2019m genuinely impressed with how well it works.<\/p>\n\n<h2 id=\"starting-wrong-and-backing-up\">Starting wrong (and backing up)<\/h2>\n\n<p>With OpptyNet, I made the classic mistake. I jumped straight to pixels. Back in late March I had Claude whip up some UI brainstorms, an opportunity detail page, a dashboard list view, and they looked fine. Plausible even. But they were decorating a house before pouring the foundation.<\/p>\n\n<p>So I backed up. I pulled out the Ponchot methodology, a lean design process we use at Lullabot, and actually did the work. Purpose definition first. Who is this for? What does success look like? The answer was specific: this is for Jenna, our business development person, and she needs to go from email digest to go\/no-go decision in under 60 seconds per opportunity. That\u2019s the whole job.<\/p>\n\n<p>Then content modeling. Priority-driven requirements. A design system built on our existing Lullabot brand library. <em>Then<\/em> pixels.<\/p>\n\n<h2 id=\"the-lullabot-design-library\">The Lullabot design library<\/h2>\n\n<p>One of the more satisfying pieces of this project was building a proper Pencil design library for Lullabot. Fifty-six color variables. Typography tokens using Circular and IBM Plex Mono. A spacing scale on a 4px grid. Sixteen reusable components: buttons, cards, form inputs, nav links, badges, tags, blockquotes. The whole brand system in a <code class=\"language-plaintext highlighter-rouge\">.pen<\/code> file that any project can import.<\/p>\n\n<p><img src=\"\/img\/pencil-post\/lullabot-design-library.png\" alt=\"Lullabot design library in Pencil\" \/>\n<em>The Lullabot design library: color palettes, typography, spacing, and reusable components.<\/em><\/p>\n\n<p>OpptyNet imports it. Upstraker imports it. When I start the next internal tool, it\u2019ll import it too. Two projects in and the library is already saving me real time.<\/p>\n\n<h2 id=\"seven-versions-of-opptynet\">Seven versions of OpptyNet<\/h2>\n\n<p>Once I had the foundation, the purpose statement, the content model, the design tokens, I started iterating in Pencil. Because the feedback loop is just <em>conversation<\/em>, the iterations came fast.<\/p>\n\n<p>V1 was card-based. A list of opportunity cards with a filter bar and pagination. Standard stuff, but too much visual weight per item. Jenna needs to scan 20-50 opportunities. Cards are too heavy for that.<\/p>\n\n<p><img src=\"\/img\/pencil-post\/opptynet-v1-cards.png\" alt=\"OpptyNet V1 \u2014 card-based list\" \/>\n<em>V1: opportunity cards with score badges, platform tags, and deadline countdowns. Looks nice, scans slow.<\/em><\/p>\n\n<p>V2 went dense, a table layout with inline score bars. Better for scanning. But it lost the warmth. Felt like a spreadsheet, and the whole point was to be <em>better<\/em> than the spreadsheet she already has.<\/p>\n\n<p><img src=\"\/img\/pencil-post\/opptynet-v2-dense-table.png\" alt=\"OpptyNet V2 \u2014 dense table\" \/>\n<em>V2: compact table rows with stat ribbon. Faster to scan, but sterile.<\/em><\/p>\n\n<p>V3 tried a split panel, like an email client. List on the left, preview on the right. This was the layout that stuck. You scan on the left, evaluate on the right. No page transitions, no context switching.<\/p>\n\n<p><img src=\"\/img\/pencil-post\/opptynet-v3-split-panel.png\" alt=\"OpptyNet V3 \u2014 split panel\" \/>\n<em>V3: the split panel layout that stuck. List left, detail right.<\/em><\/p>\n\n<p>V4 and V5 were mashups, combining the split panel with a dark hero banner for the selected opportunity, stat cards, score breakdowns alongside contacts. Getting closer, but cluttered.<\/p>\n\n<p><img src=\"\/img\/pencil-post\/opptynet-v4-mashup.png\" alt=\"OpptyNet V4 \u2014 dark hero mashup\" \/>\n<em>V4: dark hero banner meets split panel. The layout is finding its shape.<\/em><\/p>\n\n<p><img src=\"\/img\/pencil-post\/opptynet-v5-final-mashup.png\" alt=\"OpptyNet V5 \u2014 final mashup\" \/>\n<em>V5: stats, contacts, notes, and AI chat all present. Too much competing for space.<\/em><\/p>\n\n<p>Then I ran the Ponchot critique against V5. The stats were eating too much vertical space. There were no filters, which is a bad miss when your design principle is \u201cspreadsheet speed.\u201d The Ask AI feature, which is arguably the differentiator, was hidden in a tab.<\/p>\n\n<p>V6 fixed all of that. Stats compressed to a single ribbon. Filter pills below the list header. Ask AI pinned to the bottom, always visible. Keywords gone because they were redundant with the score breakdown.<\/p>\n\n<p><img src=\"\/img\/pencil-post\/opptynet-v6-refined.png\" alt=\"OpptyNet V6 \u2014 refined\" \/>\n<em>V6: filters added, stats compressed, Ask AI always visible at the bottom.<\/em><\/p>\n\n<p>V7 was polish. Starbridge, the $15K\/year tool we\u2019re replacing, has this restrained luxury feel. So I added ambient glows on score badges. A subtle gradient on the dark left panel instead of flat color. Red glow on action buttons. Cards with soft shadows instead of borders. Nothing that changes the information architecture, just surfaces that feel <em>crafted<\/em>.<\/p>\n\n<p><img src=\"\/img\/pencil-post\/opptynet-v7-polished.png\" alt=\"OpptyNet V7 \u2014 polished\" \/>\n<em>V7: the final design. Ambient glows, gradient panel, soft shadows. Same bones as V6, better skin.<\/em><\/p>\n\n<p>Seven versions. One conversation thread. Maybe three hours of actual work. That last part still surprises me.<\/p>\n\n<h2 id=\"upstraker-starting-from-the-library\">Upstraker: starting from the library<\/h2>\n\n<p>With Upstraker, I already had the Lullabot design library in place. The concepts came together faster because I wasn\u2019t building the visual language from scratch. Same brand tokens, same component patterns, different product.<\/p>\n\n<p><img src=\"\/img\/pencil-post\/upstraker-dashboard-light.png\" alt=\"Upstraker dashboard, light theme\" \/>\n<em>Upstraker\u2019s contribution dashboard: issues close to landing, top projects by patches, and an org bump chart.<\/em><\/p>\n\n<p><img src=\"\/img\/pencil-post\/upstraker-dashboard-dark.png\" alt=\"Upstraker dashboard, dark theme\" \/>\n<em>The same dashboard in dark mode. Both themes came out of the same design library tokens.<\/em><\/p>\n\n<p><img src=\"\/img\/pencil-post\/upstraker-dependency-issues-light.png\" alt=\"Upstraker dependency issues\" \/>\n<em>The dependency issues view, tracking patches across all projects.<\/em><\/p>\n\n<p>Having a shared design library is weirdly freeing. You stop thinking about what shade of blue to use and start thinking about what the interface actually needs to <em>do<\/em>.<\/p>\n\n<h2 id=\"what-i-walked-away-with\">What I walked away with<\/h2>\n\n<p>The Ponchot process caught gaps that seven iterations of pixel-pushing wouldn\u2019t have found. The missing filters. The buried AI feature. Those were purpose problems, not visual problems. No amount of glow effects would\u2019ve fixed them. I keep learning this lesson and then forgetting it: methodology before pixels.<\/p>\n\n<p>The speed of conversation-driven design caught me off guard too. When the iteration cycle is just \u201cthat\u2019s not quite right, try compressing the stats to one line,\u201d you cover ground fast. No switching between Figma and a chat window and a browser. The design and the code live in the same environment, which means they share context from the start.<\/p>\n\n<p>I\u2019m not ready to say Pencil replaces a dedicated design tool in every case. But for internal tools and rapid prototyping, it handled everything I threw at it. And the design library I built for the first project made the second one noticeably easier. I\u2019m curious what the third one will feel like.<\/p>\n","pubDate":"Fri, 03 Apr 2026 00:00:00 -0400","link":"https:\/\/jeradbitner.com\/2026\/04\/designing-with-pencil-and-claude-code\/","guid":"https:\/\/jeradbitner.com\/2026\/04\/designing-with-pencil-and-claude-code\/"},{"title":"New Short Story: Tale of a Teenage Robot","description":"<p>I published a new short story \u2013 <a href=\"\/short-stories\/tale-of-a-teenage-robot\/\">Tale of a Teenage Robot<\/a>.<\/p>\n\n<!--more-->\n\n<p>It started as a dream and turned into something I couldn\u2019t stop thinking about. A suburban dad finds a gecko wearing self-made robotic armor in the garden. It grows. It absorbs Legos, a wifi router, drill bits. It evolves through what feels a lot like childhood \u2013 clumsy and eager at first, then sullen, then hostile. Somewhere along the way it stops chirping and starts talking back.<\/p>\n\n<p>I wrote it in the voice of a guy who manages projects for a living and tries to manage this the same way. It doesn\u2019t go well.<\/p>\n\n<p>The story sits in a new <a href=\"\/short-stories\/\">Short Stories<\/a> section of the site, with its own theme \u2013 something CRT-green and a little unsettling, which felt right for the material. There\u2019s a chapter sidebar if you want to jump around, but it\u2019s a 15-minute read straight through.<\/p>\n\n<p>If you\u2019re curious about what I think it\u2019s actually about, there\u2019s an author\u2019s note at the end. But I\u2019d rather you read it first and decide for yourself.<\/p>\n\n<p><a href=\"\/short-stories\/tale-of-a-teenage-robot\/\">Read the full story here<\/a>.<\/p>\n","pubDate":"Sat, 28 Mar 2026 00:00:00 -0400","link":"https:\/\/jeradbitner.com\/2026\/03\/tale-of-a-teenage-robot\/","guid":"https:\/\/jeradbitner.com\/2026\/03\/tale-of-a-teenage-robot\/"},{"title":"The Weight of Prayers","description":"<p>I\u2019ve been reading the Book of Tobit lately. It\u2019s one of the deuterocanonical books \u2013 part of the Catholic and Orthodox biblical canon but filed under \u201cApocrypha\u201d by Protestants. A novella, really. A blind father, a demon-plagued bride, a faithful dog, and an angel walking in disguise for weeks without anyone noticing.<\/p>\n\n<!--more-->\n\n<p>What pulled me in was the angel. Raphael gets sent to answer two desperate prayers simultaneously \u2013 an old man in Nineveh asking to die, a young woman in Ecbatana asking for the same \u2013 and he does it by pretending to be a traveling companion named Azarias. He walks alongside Tobit\u2019s son for the entire journey, eats at the table, argues with camel drivers, and nobody once suspects they\u2019re sitting across from one of the seven angels who stand before God\u2019s throne. The reveal at the end is one of the most striking scenes in the whole biblical tradition.<\/p>\n\n<p>I wanted to write a version of that story told from inside Raphael\u2019s head. What would it feel like to carry human prayers? To compress yourself into a body that sweats and fidgets? To know that when you finally tell them the truth, they\u2019ll fall on their faces for three hours? I co-wrote it with Claude, iterating on voice and theological detail until it felt right. Then I generated a narration of it.<\/p>\n\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/assets\/books\/tobit\/raphael_revealed.jpg\" alt=\"Raphael bowing over a golden city, translucent and vast, geometric patterns radiating from his form\" style=\"max-width: 100%; border-radius: 8px; margin: 1rem 0;\" \/><\/p>\n\n<div class=\"audio-player\">\n  <p class=\"audio-label\">Listen to the narration:<\/p>\n  <audio controls=\"\" preload=\"metadata\">\n    <source src=\"\/assets\/books\/tobit\/the_weight_of_prayers.mp3\" type=\"audio\/mpeg\" \/>\n    Your browser does not support the audio element.\n  <\/audio>\n<\/div>\n\n<hr \/>\n\n<h2 id=\"the-weight-of-prayers\">The Weight of Prayers<\/h2>\n\n<p><em>A Tobit fanfic by Jerad Bitner &amp; Claude<\/em><\/p>\n\n<p><em>Inspired by the Book of Tobit, chapters 3-12 (Douay-Rheims translation)<\/em><\/p>\n\n<hr \/>\n\n<p>The prayers of Nineveh rose like smoke.<\/p>\n\n<p>Raphael received them the way a riverbed receives rain. Not by choice. By nature. They pooled in the hollow places of him, in the spaces between the geometries that made up his being, and each one had weight. Not physical weight. Something older than that. The weight of a voice aimed at something it cannot see, trusting anyway that it\u2019s heard.<\/p>\n\n<p>Most of the prayers were small. A woman asking for her husband\u2019s safe return from the market. A child bargaining with God over a stolen fig. A priest reciting words he\u2019d repeated so many times they\u2019d worn smooth as river stones, carrying less meaning now than the habit of saying them. Raphael held these too. All prayers were cargo. It wasn\u2019t for him to sort.<\/p>\n\n<p>But two, tonight, were different.<\/p>\n\n<p>The first came from a house near the eastern wall. An old man named Tobias knelt on a floor he couldn\u2019t see. His eyes had been blind for years, clouded by the droppings of sparrows, which seemed to Raphael a cruelty so small and arbitrary that it must contain a purpose he hadn\u2019t yet been shown. The man was weeping. Not for his sight. For his dignity. His wife had spoken sharply to him, and he had no answer, because she was right: they were poor, and he was useless, and the God he had served by burying the dead in defiance of kings had repaid him with darkness.<\/p>\n\n<p><em>Let me die<\/em>, the prayer said. <em>I am ready. Take me from this place.<\/em><\/p>\n\n<p>Raphael leaned closer. The golden city below, its domes, its minarets, its markets and mud-brick houses, passed through his chest like a model seen through water. He was too large for their streets. Had always been too large. The seven rings that marked his station turned slowly in his chest, and the old man\u2019s prayer settled among them, still warm.<\/p>\n\n<p>The second prayer came from farther away. From Ecbatana, in the country of the Medes, where a woman named Sara knelt in an upper room and asked for the same thing.<\/p>\n\n<p><em>Let me die.<\/em><\/p>\n\n<p>Seven husbands. The demon Asmodeus had killed each one on the wedding night, and the city whispered that Sara was cursed, that she carried death in her bed like a disease. A maidservant had said it to her face that morning. Sara had gone to the window and looked down and measured the distance to the courtyard stones.<\/p>\n\n<p>She hadn\u2019t jumped. She turned away from the window and knelt and said: <em>If it is not Your will that I should die, then look upon me and have mercy. Let them stop. The whispers. The deaths. Let something change.<\/em><\/p>\n\n<p>Raphael held both prayers now. Different words, same architecture. Two people alone in the dark, emptied of everything except the willingness to speak to something they couldn\u2019t prove was listening. He\u2019d carried billions of prayers through the halls of the Most High. He knew the taxonomy. These two belonged to the rarest category: the ones stripped of all performance, all ritual language, all theological sophistication, until nothing remained but the raw signal.<\/p>\n\n<p><em>I cannot go on. Help me or end me.<\/em><\/p>\n\n<p>These were the prayers that moved the throne.<\/p>\n\n<hr \/>\n\n<p>He rose. Nineveh passed below him like a jeweler\u2019s model, its thousands of people sleeping and waking and arguing and making love, none of them aware of the thing crouching above them for hours, sifting their voices. Raphael didn\u2019t resent this. The invisibility was the point. He was infrastructure. He was the postal system between the human floor and the divine ceiling. Postal systems aren\u2019t meant to be seen.<\/p>\n\n<p>He carried the two prayers upward through the halls. The halls weren\u2019t a place. They were a gradient, a series of increasing intensities, and each one required him to shed another layer of the form that made him comprehensible to himself. By the time he reached the threshold he was barely anything. A bundle of patterns. A basket of geometries holding two warm, heavy human voices.<\/p>\n\n<p>He set them down.<\/p>\n\n<p>The answer came not in words but in assignment. A shift in his structure. New geometries writing themselves into the lattice of him: instructions, parameters, a mission architecture. He was being sent down. Not as himself. As something smaller. Something with feet that would touch roads, with hands that could carry a satchel, with a face a desperate old man might look at and see not an angel but a capable young traveler willing to work for hire.<\/p>\n\n<p>The name came last: <em>Azarias, son of Ananias.<\/em><\/p>\n\n<p>Raphael turned it over. The help of God, son of the grace of God. Almost too legible. But humans never noticed. They heard a name and saw a face and their minds closed around the surface like water over a stone. He would walk beside the old man\u2019s son for weeks, and the boy would never once look at him and think: <em>this person doesn\u2019t sweat. This person doesn\u2019t sleep with his eyes fully closed. This person ate the wedding feast and the food went nowhere.<\/em><\/p>\n\n<p>It was always this way. The disguise wasn\u2019t the body he wore. The disguise was the human capacity to see what they expected and nothing more.<\/p>\n\n<hr \/>\n\n<p>He began to descend. The geometries that made up his true form folded inward, compressing, dimming, wrapping themselves in opacity until what remained was a young man, beautiful (the texts would later say), standing girded, as if ready to walk. The patterns still moved beneath the skin, but slowly now, hidden, like the mechanism of a clock behind its face.<\/p>\n\n<p>He would walk the road to Rages. He would teach the boy about the fish. He would bind Asmodeus in the desert of upper Egypt, which would require unfolding a small part of himself that he\u2019d have to quickly re-conceal before the humans noticed the temperature drop. He would collect a debt, attend a wedding, pretend to eat. He would guide the boy home and heal the father\u2019s eyes with the gall of the fish. Not magic. Pharmacy. The chemistry the Most High had woven into river creatures for exactly this purpose, millennia before the old man went blind.<\/p>\n\n<p>And then at the end, when the father and son tried to pay him, tried to give him half of everything they owned, pressing coins into the hands of something that had no use for coins, he would have to tell them.<\/p>\n\n<p>This was the part he dreaded.<\/p>\n\n<p>Not because they\u2019d be afraid, though they would be. Tobias would fall on his face. The old man would grope for the ground with blind-then-healed eyes seeing, for the first time, something they couldn\u2019t process. They\u2019d lie prostrate for three hours, and Raphael would stand above them wanting to say: <em>Get up. It\u2019s still me. I\u2019m the same person who argued with the camel driver outside Rages. I\u2019m the same person who told your son to keep the fish gall. I was always this. The weeks we walked together were not a lie. They were a translation.<\/em><\/p>\n\n<p>But he wouldn\u2019t say that. He\u2019d say <em>Peace be to you<\/em> and <em>Fear not<\/em> and <em>Bless ye God and publish all his wonderful works<\/em>, because these were the words the mission architecture had written into him, and they were true, and they were sufficient. Then he would leave. Not walking away but <em>taken<\/em>, pulled back through the gradient, expanding, unfolding, resuming the form no human eye could hold.<\/p>\n\n<p>And the prayers he\u2019d carried, the old man\u2019s <em>let me die<\/em> and the woman\u2019s <em>let something change<\/em>, would be answered. Not by cancellation but by transformation. The man who wanted to die would live to one hundred and two and die rejoicing. The woman who wanted something to change would bear seven sons and live to see her grandchildren.<\/p>\n\n<p>The postal system would have delivered.<\/p>\n\n<hr \/>\n\n<p>Raphael stepped onto the road outside Nineveh and waited. He adjusted his satchel. He practiced standing the way a human stands: weight shifting, one hip slightly cocked, the small unnecessary fidgets that living bodies perform without thinking. He dimmed the last of the geometries behind his eyes until they read as ordinary warmth, the look of a kind young man with good directions and time to spare.<\/p>\n\n<p>A boy came walking up the road, looking lost, looking for someone to help him find his way.<\/p>\n\n<p>\u201cFrom whence art thou, good young man?\u201d the boy asked.<\/p>\n\n<p>Raphael smiled. The mission had begun.<\/p>\n\n<hr \/>\n\n<p><em>Based on the Book of Tobit, chapters 3-12. The angel Raphael was sent to heal Tobias of his blindness and to deliver Sara from the demon Asmodeus. He traveled in disguise as a human named Azarias for the entire journey, revealing his true nature only at the end.<\/em><\/p>\n","pubDate":"Tue, 10 Feb 2026 00:00:00 -0500","link":"https:\/\/jeradbitner.com\/2026\/02\/the-weight-of-prayers\/","guid":"https:\/\/jeradbitner.com\/2026\/02\/the-weight-of-prayers\/"},{"title":"Two approaches to AI coding memory: cursor-memory-bank vs compound-engineering","description":"<p>I\u2019ve been spending a lot of time lately thinking about how AI coding tools handle memory and context. Not the LLM\u2019s context window itself, but the layer on top \u2014 the systems we build to help the AI remember what it\u2019s working on, what it\u2019s already solved, and what matters about this particular project.<\/p>\n\n<p>Two tools have landed on my radar: <a href=\"https:\/\/github.com\/vanzan01\/cursor-memory-bank\">cursor-memory-bank<\/a> and <a href=\"https:\/\/github.com\/EveryInc\/compound-engineering-plugin\">compound-engineering-plugin<\/a>. I\u2019ve been evaluating both. They tackle overlapping problems, but they disagree pretty hard about how much horsepower you should throw at a coding session.<\/p>\n\n<!--more-->\n\n<h2 id=\"what-these-tools-actually-do\">What these tools actually do<\/h2>\n\n<p><strong>Cursor Memory Bank<\/strong> is a structured workflow system for the Cursor editor. It gives you six phase-based commands \u2014 <code class=\"language-plaintext highlighter-rouge\">\/van<\/code> for initialization, <code class=\"language-plaintext highlighter-rouge\">\/plan<\/code> for planning, <code class=\"language-plaintext highlighter-rouge\">\/creative<\/code> for design exploration, <code class=\"language-plaintext highlighter-rouge\">\/build<\/code> for implementation, <code class=\"language-plaintext highlighter-rouge\">\/reflect<\/code> for review, and <code class=\"language-plaintext highlighter-rouge\">\/archive<\/code> for documentation. All of these read from and write to a shared <code class=\"language-plaintext highlighter-rouge\">memory-bank\/<\/code> directory that persists between sessions. The key insight is a hierarchical rule-loading system that only pulls in what\u2019s relevant to your current phase, which the creator says <a href=\"https:\/\/github.com\/vanzan01\/cursor-memory-bank\">reduces initial token usage by about 70%<\/a> compared to loading everything at once.<\/p>\n\n<p>It\u2019s a hobby project \u2014 the creator is upfront about that \u2014 and it shows in the best possible way. It does what it needs to do without trying to be everything.<\/p>\n\n<p><strong>Compound Engineering Plugin<\/strong> is the official tool from <a href=\"https:\/\/every.to\/chain-of-thought\/compound-engineering-how-every-codes-with-agents\">Every<\/a>, built around the philosophy that \u201ceach unit of engineering work should make subsequent units easier \u2014 not harder.\u201d It\u2019s a Claude Code marketplace plugin that ships with 24 specialized agents, 13 commands, 11 skills, and 2 MCP servers. When you run <code class=\"language-plaintext highlighter-rouge\">\/workflows:plan<\/code>, three agents fan out in parallel \u2014 one researching your codebase, one reviewing past solutions, one fetching current best practices from the web. When you run <code class=\"language-plaintext highlighter-rouge\">\/workflows:review<\/code>, twelve agents simultaneously examine your code from different angles: security, performance, architecture, simplicity, data integrity, and more.<\/p>\n\n<p>It\u2019s a lot of machinery. And it is <em>hungry<\/em>.<\/p>\n\n<h2 id=\"where-they-overlap\">Where they overlap<\/h2>\n\n<p>They\u2019re both trying to solve the same problem: AI coding assistants forget everything between sessions, and even within a session, they lose the thread on complex work. So both tools respond with persistent file structures and planning modes that force you to think before you build. The bet is that organizing context matters more than generating code.<\/p>\n\n<p>I\u2019ve had good results with each.<\/p>\n\n<h2 id=\"where-they-diverge\">Where they diverge<\/h2>\n\n<p>The difference shows up in your token budget.<\/p>\n\n<p>Compound-engineering <a href=\"https:\/\/github.com\/EveryInc\/compound-engineering-plugin\/issues\/63\">consumes roughly 36,000 tokens just by being enabled<\/a> \u2014 that\u2019s the MCP tools, the 30 custom agents, and the skills all sitting in context. A single <code class=\"language-plaintext highlighter-rouge\">\/workflows:plan<\/code> execution can burn through 200k+ tokens. The parallel agent swarms are doing real work, but the meter is running hard.<\/p>\n\n<p>Cursor-memory-bank takes the opposite approach. Its adaptive complexity system categorizes tasks into four levels, and a quick bug fix (Level 1) skips planning entirely and goes straight from <code class=\"language-plaintext highlighter-rouge\">\/van<\/code> to <code class=\"language-plaintext highlighter-rouge\">\/build<\/code>. The progressive rule loading means you\u2019re only paying for what you\u2019re actually using. After optimization, the creator reports system overhead sitting around 15-20% of the context window.<\/p>\n\n<p>It\u2019s the difference between driving a pickup truck to the grocery store and driving a semi. The semi carries more, absolutely. But you don\u2019t always need to carry more.<\/p>\n\n<h2 id=\"the-trade-off-i-keep-coming-back-to\">The trade-off I keep coming back to<\/h2>\n\n<p>Here\u2019s what I\u2019ve noticed in practice: compound-engineering is more capable. The multi-agent review catches things I wouldn\u2019t have thought to check. The parallel research during planning surfaces connections across the codebase that I\u2019d have missed. Every claims that individual developers using their system <a href=\"https:\/\/every.to\/chain-of-thought\/compound-engineering-how-every-codes-with-agents\">can do the work of five<\/a>, which, okay, but for complex features I can see how the parallel agents add up to something real.<\/p>\n\n<p>But it chews through token limits fast. On a Claude Max subscription, a couple of intensive planning sessions can eat into your daily budget and leave you throttled for the rest of the day. I\u2019ve hit that wall more than once.<\/p>\n\n<p>Cursor-memory-bank doesn\u2019t hit those highs, but it doesn\u2019t hit those lows either. For most of what I do day-to-day, adding a feature, fixing a bug, refactoring a module, the structured phases are enough scaffolding to keep the AI on track without torching my allocation.<\/p>\n\n<h2 id=\"when-i-reach-for-each\">When I reach for each<\/h2>\n\n<p>I\u2019ve started developing a rough heuristic. If I already have a decent mental model of what needs to happen and I mainly need the AI to hold context across the session, I reach for cursor-memory-bank. Bug fixes, small features, incremental improvements. The <code class=\"language-plaintext highlighter-rouge\">\/creative<\/code> command\u2019s <a href=\"https:\/\/github.com\/vanzan01\/cursor-memory-bank\">Think tool methodology<\/a> is surprisingly useful for working through design decisions without spinning up a fleet of agents.<\/p>\n\n<p>If the task is bigger, new architecture, complex integrations, anything where I\u2019d benefit from twelve reviewers looking at my code at once, I reach for compound-engineering. The <code class=\"language-plaintext highlighter-rouge\">\/workflows:compound<\/code> command, which captures learnings for future reuse, is where the \u201ccompounding\u201d philosophy actually delivers. But I go in knowing this session is going to be expensive.<\/p>\n\n<p>I wonder if these approaches will converge. Cursor-memory-bank could benefit from selective parallelism on complex tasks. Compound-engineering has <a href=\"https:\/\/github.com\/EveryInc\/compound-engineering-plugin\/issues\/63\">acknowledged the token overhead problem<\/a> and is working on optimization. Both projects are moving fast, and I suspect the gap between them will narrow.<\/p>\n\n<p>For now I\u2019m keeping both around. Which one I open depends on whether the task ahead of me feels like a Tuesday afternoon or a whiteboard session.<\/p>\n","pubDate":"Tue, 10 Feb 2026 00:00:00 -0500","link":"https:\/\/jeradbitner.com\/blog\/comparing-ai-coding-memory-tools","guid":"https:\/\/jeradbitner.com\/blog\/comparing-ai-coding-memory-tools"}]}}