Skip to content

Instantly share code, notes, and snippets.

@realgenekim
realgenekim / codex-sbek-public.md
Last active August 14, 2026 16:56
How we made Mike Lay’s excellent SBEK evaluation harness executor-selectable and defaulted an autonomous fleet to subscription-authenticated Codex CLI

Switching an autonomous SBEK evaluation fleet from Claude Opus to Codex CLI

Credit where it is due

This work builds on Mike Lay’s amazing SessionBoard Eval Kit (sbek).

SBEK does the hard and important work: it defines the evaluation scenarios and rubrics, drives a browser through MCP, records evidence, separates browsing from fresh-context judging, validates judgements, and produces the final score. It is thoughtfully designed, unusually rigorous, and was a joy to build on.

The adapter described here does not replace SBEK and should not be mistaken for its original implementation. SBEK already documents a harness path for both Claude Code and Codex. Our narrower contribution is automating that path as an unattended fleet: one fresh codex exec process per worker and judge, selected behind a rollback-safe executor flag.

@realgenekim
realgenekim / 2026-08-10-kill-my-saas-weekend-activity.md
Last active August 10, 2026 21:11
Kill My SaaS weekend: the coding activity report

Kill My SaaS weekend: the coding activity report

Window: 2026-08-08T18:08:26.995000Z through 2026-08-10T19:01:04.372221Z Anchor: Gene's first recorded Kill My SaaS strategy prompt, Saturday at 11:08:26 AM PDT. Evidence: Codex rollouts, Claude Code project JSONL, 19 real Git repositories observed in agent tool paths, Git, Director telemetry, and Live Dictation delivery receipts.

BLUF

In roughly 48.9 hours, Gene operated 38 main coding conversations plus 25 Claude subagents. Their traces touched 19 real Git repositories. Nine recorded in-window commits. The agents consumed 3,838,765,007 model-usage tokens: 1,837,756,831 in Codex and 2,001,008,176 in Claude Code. Git records 307 commits touching 627 repository-relative files, with +149,059 / −19,992 lines169,051 lines of textual churn—in those repositories.

@realgenekim
realgenekim / README.md
Created May 31, 2026 17:56
Datastar + HTTP Basic Auth: making fetch()-based @get/@post work behind credentialed URLs (a fix found while migrating off HTMX)

Thank you so much for writing DataStar. It has been life-changing in reducing JavaScript client-side issues. Here is a fix for something I stumbled upon as I was migrating away from HTMX.

The remainder of this post is written by Claude Code.


TL;DR

fetch() refuses to use a URL that contains credentials (https://user:pass@host/…). Because Datastar's @get/@post are built on fetch(), opening a page with credentials in the URL — e.g. behind HTTP Basic Auth — makes every Datastar request fail. HTMX never hit this because it uses XMLHttpRequest, which tolerates credentialed URLs. The small script below restores parity, so Datastar "just works" behind Basic Auth.

@realgenekim
realgenekim / gist:fdba49fafca08689009f9992ed0347eb
Last active May 17, 2026 19:33
Using Codex Subscription in KiloClaw

KiloClaw is amazing.

Using a ChatGPT Subscription with KiloClaw via the openai-codex Provider

A practical field guide for routing KiloClaw/OpenClaw model calls through a ChatGPT Plus/Pro Codex OAuth session instead of a traditional OpenAI API key.

Why this matters

KiloClaw normally makes model calls through configured model providers. The regular openai provider expects an OpenAI API key and bills through the OpenAI API platform.

@realgenekim
realgenekim / chromium-michael-feathers.md
Created April 5, 2026 04:24
Chromium Seam Analysis: A Michael Feathers-Style Claude Code Reading

Chromium Seam Analysis: A Feathers-Style Reading

Someone asked me about using Claude Code for huge codebases, including legacy systems in Ada. I had mentioned that the key seems to be able to make these large code bases modular enough so that both LLMs and humans can reason about them.

You had mentioned experiments you had done with LLMs making changes to Chromium, a code base that is similar in size to this particular code base.

I had made the claim that LLMs seem to do an amazing job understanding large code bases, and suspected they could do the equivalent of summoning Michael Feathers (author of "Working Effectively With Legacy Code") — if it could advise on how to split a large system into two smaller systems, it could recursively be able to partition large systems into manageable smaller systems.

Here is the output of a quick experiment. Literally a handful of prompts: "clone the Chromium repo," "summon your inner Michael Feathers and find natural seams where we can further modularize the codeba

@realgenekim
realgenekim / cclsp-setup.md
Last active April 12, 2026 14:11
Setting up clojure-lsp (cclsp) and clojure-mcp for Claude Code — Clojure developer tooling

After watching the Clojure/conj 2025 talk on ECA, I was inspired to try using the clojure-lsp plugin. I stumbled upon the cclsp MCP server, which seemed like the ideal way to use this with Claude Code.

Enclosed below are all the instructions necessary to get them both up and running.

My high-level impressions:

  • Claude Code seems to love having cclsp around when doing large refactorings -- having done several, some with and some without, those with cclsp and clojure-lsp seem to go more smoothly

I'd love to hear your thoughts!

@realgenekim
realgenekim / MUSINGS.md
Last active November 6, 2025 20:19
S-Expression Balancing MCP Server: A Thought Experiment

S-Expression Guard MCP Server

Problem Statement

LLMs frequently emit malformed S-expressions (unbalanced ()[]{}) when generating Clojure/EDN/Lisp code. Post-hoc “repair” is surprisingly difficult. Saving source code files with balancing errors, or streaming them to nREPL/compilers, wastes time and relies on imbalance detection after the tokens are generated.

What if we could prevent these types of error by creating a tool (stateless, stack-based, cursor-aware) for LLMs to use to help them write perfectly balanced S-expression. Ideally while minimizing latency, round-trips, total time required to generate code, and without any MCP server-side state.

Current LLMs are inherently auto-regressive auto-completers, which makes them inherently bad at the problem of closing S-expressions -- they don’t have anything resemblig a “stack” for them to store state (e.g., I just emitted an open parenthesis, and here’s an open bracket. I want to close the form — now what?). Nor does it have an equivalent of a “find

@realgenekim
realgenekim / open-map-key-errors.md
Last active November 4, 2025 04:45
LLMs have problems with Clojure open maps -- and so does Python

Map Key Errors in Clojure and Python: A Silent Bug Category

Why This Matters

I've been compiling this document for a couple of weeks, with the intent of publishing it, to at least advertise this problem I've been struggling with. One that has been bothering me enough where I've done a ton of little experiments to see if I can ameliorate it, even by a little!

Then just now, I was talking with my friend Scott Prugh who was just complaining about something in Python, and he was lamenting how he wanted to do things in C#. I asked him why, and he was complaining about the same problem that I've been having!

The problem: LLMs will often hallucinate map keys that don't exist. He and I commiserated about how we both spent hours trying to hunt down a problem that would have been solved if there were a data structure more like a class or a struct in C, where you could generate an immediate error if trying to get or set a value that doesn't actually exist.

@realgenekim
realgenekim / .proxy-java-shim.env
Last active October 31, 2025 19:02
Fix Maven/Gradle 401 errors in Claude Code web environment
# Java proxy configuration for local proxy shim
# Source this file before running Maven/Gradle/Clojure builds
#
# Usage: . ./.proxy-java-shim.env && mvn test
export JAVA_TOOL_OPTIONS="-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=15080 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=15080"
export MAVEN_OPTS="$JAVA_TOOL_OPTIONS"
@realgenekim
realgenekim / datasets.md
Created September 22, 2025 20:06
Data sets for Vibe Coding Workshop for Leaders

Fantastic—here’s a compact, copy‑pasteable doc you can hand to tech‑leader participants. Every dataset below is (a) free, (b) downloadable for local/offline analysis on a dev‑class laptop, and (c) has a clear “what it’s good for.” I include at least one option for each topic you asked for, plus a bonus section with public backlogs/tickets/incident datasets.


Vibe‑Coding Workshop Datasets (Local/Offline Friendly)

1) Jira / Backlog Data

Primary (recommended): The Public Jira Dataset (anonymized, 2025 release)