Lucian Ghinda @lucianghinda.com · 09/09/2026And then I hand the documents to Codex with Astra on Medium and a prompt that is like this: Implement using Luna subagents the specifications found at docs/<specs> which will do the work and sometimes tell me things like this (I read them for fun bc I don't trust I verify 😄 ) 000
Lucian Ghinda @lucianghinda.com · 09/09/2026Most of my work these days on my personal projects (which are a bunch of small Ruby gems that I use in various projects) is using Astra medium to orchestrate and Luna subagents to implement and execute various tasks. 110
Lucian Ghinda @lucianghinda.com · 09/09/2026I was creating some content for #GoodEnoughAgents workshop and wanted to make it even more practical so I found this gem that provides an interface to tiktoken algorithm from @OpenAI An LLM model never "reads" your text, it works with numbers. gem install tiktoken_ruby 100
Lucian Ghinda @lucianghinda.com · 08/09/2026Did not have time to announce that together with @skatkov.com we will deliver a workshop about Good Enough Agents at EuRuKo 2026 but now seems late cause it is fully booked :) Looking forward to meeting everybody at @euruko.org 032
Lucian Ghinda @lucianghinda.com · 03/09/2026I think one important change from Anthropic related to Fable 5.1 is the Data Retention There are a lot of organisations who disabled Fable due to data retention policy. And it seems Anthropic does not plan to disable it but maybe this EFS could help more organisations use Fable 020
Lucian Ghinda @lucianghinda.com · 01/09/2026Time to trim the worktrees. 100 worktrees in 3 months. 40 of those were created in August, 22 in July and 34 in June, 4 today :) - 66 were used for code review, bake-offs and reproducing bugs - 34 were active development 020
Lucian Ghinda @lucianghinda.com · 01/09/2026Why does a def inside a block work as a console helper? A method defined in a block lands on Object. And in rails console, self is main, an instance of Object. ```ruby Object.instance_method(:hello).owner # => Object ``` 100
Lucian Ghinda @lucianghinda.com · 01/09/2026Add this to config/initializers/console_helpers.rb: ```ruby Rails.application.console do def disable_console_loggers! @previous_log_levels ||= console_loggers.to_h { |l| [l, l.level] } @previous_log_levels.each_key { |l| l.level = :error } end end ``` 100
Lucian Ghinda @lucianghinda.com · 01/09/2026For a while I pasted this into every Rails console session: ActiveRecord::Base.logger.level = Logger::ERROR Rails has a hook built for exactly this: Rails.application.console. 120
Lucian Ghinda @lucianghinda.com · 01/09/2026For a while I pasted this into every Rails console session: ActiveRecord::Base.logger.level = Logger::ERROR Rails has a hook built for exactly this: Rails.application.console. 120
Lucian Ghinda @lucianghinda.com · 31/08/2026When I think about commands and triggering skills I have to say I like a lot more the way Claude Code does it in TUI with "/" than Codex TUI that uses "$" For me slash is much more a hint for a command than $ which gives me vibes of PHP :) 340
Lucian Ghinda @lucianghinda.com · 28/08/2026Compare with Claude Code style. I know it is not the same task but this wall of text. This is Claude Code with "simple technical English" instruction added in user injected Claude(dot)md Still makes me re-read twice some parts. 110
Lucian Ghinda @lucianghinda.com · 28/08/2026Have to say I like a lot more this default style from Codex TUI to present the proposed changes. It is brief, it has the right keywords highlighted, it shows me the approaches considered so far, and it shows with bullet points the proposed architecture. 100
Lucian Ghinda @lucianghinda.com · 27/08/2026Oh you are not so far away :) here is a screenshot from today when I was trying out some stuff part of the vectors embeddings, directions and matrices playing with some very small embeddings. 110
Lucian Ghinda @lucianghinda.com · 27/08/2026I like it when AI confirms my stack choices: Ruby on Rails + @avohq.io PS: Working on a new workshop, more details soon 220
Lucian Ghinda @lucianghinda.com · 27/08/2026I am testing a new skill for #Ruby that creates a specification documents which describes the change to be done with some specific points: One is object interfaces (in this case all are new objects) 100
Lucian Ghinda @lucianghinda.com · 26/08/2026There are multiple mechanisms for this, but one useful thing to remember is that at each turn the next token is conditioned on everything already generated. There is also in-context learning where the model responds to statistical patterns in conversations affecting direction 100
Lucian Ghinda @lucianghinda.com · 26/08/2026/new or /clear is sometimes the best "prompt" you can give to an agent to fix a change going bad. Once a chat with an LLM gets far enough it can trigger an effect called "Lost in Conversation" and it will be very hard to drive it out of the chosen path. 120
Lucian Ghinda @lucianghinda.com · 25/08/2026I was working on a new gem, agents_homedir, when I discovered this: github.com/charmbracel... How come I did not know about it? This is amazing for CLI recordings as GIFs. AMAZING! I wrote a tape file for my gem and it created this amazing GIF. I love this kind of focused utility 150
Lucian Ghinda @lucianghinda.com · 24/08/2026I think we are about to find out (yet again) that exhaustive testing is impossible. Or at least impractical. LLMs are already discovering bugs in mature, stable software. That is confirmation that exhaustive testing was never possible and still is not possible. 100
Lucian Ghinda @lucianghinda.com · 21/08/2026Some quick impressions from using Codex more than Claude this week. I will do a full analysis during the weekend. 111
Lucian Ghinda @lucianghinda.com · 20/08/2026Then I put a name that does not exist in the config, `totally-bogus-item`, and asked Codex to check itself. The configuration section came back happy and reported the config as loaded. 110
Lucian Ghinda @lucianghinda.com · 20/08/2026The docs never list the identifiers or I could not quickly find them. I found them in the Codex source, in `StatusLineItem`. 26 of them in version 0.146.1. github.com/openai/code... 100
Lucian Ghinda @lucianghinda.com · 20/08/2026In Codex you pick from what the team already implemented and put the names in the order you want to see them. Codex reads the global file first, then `.codex/config.toml` from the project folder where it runs. 100
Lucian Ghinda @lucianghinda.com · 20/08/2026The three CLIs differ in what the setting accepts, and that is the whole story. Claude Code takes a command, so any executable. Codex takes built-in item names. opencode takes a TUI plugin with a JS or TS entry. Only in Claude Code can the status line be a Ruby script. 110
Lucian Ghinda @lucianghinda.com · 20/08/2026In Codex the status line is a list of built-in names you pick from. The setting is `status_line` under `[tui]` in `~/.codex/config.toml`. The docs call it "ordered list of TUI footer status-line item identifiers". 100
Lucian Ghinda @lucianghinda.com · 19/08/2026Because the contract is stdin and stdout, I test it in a terminal instead of restarting Claude Code: `no-git` shows up because `~/.claude` is not a repository. 100
Lucian Ghinda @lucianghinda.com · 19/08/20265/ In my case I only want to pay attention to the context window, so that is what the segment builds. It reads `used_percentage` straight from the payload and falls back to computing it. Yellow at 50%, red at 80%. 100
Lucian Ghinda @lucianghinda.com · 19/08/2026So the script is: read stdin, print one line. I parse inside a `rescue` because a status line that raises leaves me a broken bar on every single turn. 100
Lucian Ghinda @lucianghinda.com · 19/08/2026The wiring is four lines. Point it at the `.rb` file directly, as long as it is marked executable with `chmod +x` and carries a shebang. Put it in `~/.claude/settings.json` and it applies to every project you open. 100
Lucian Ghinda @lucianghinda.com · 17/08/20268/ Both clauses only cost Codex content, so the line goes in my Claude memory and stays out of Codex. A style prompt is a per agent setting, not a team standard. Mine costs Claude 8.5% of the facts and costs Codex 43.3%. 110
Lucian Ghinda @lucianghinda.com · 17/08/20267/ I assumed this would transfer to Codex. Codex writes shorter sentences than Claude by default, 12.5 against 17.8. It also finds fewer facts, 30 out of 48 against Claude's 47. Being brief does not mean deeper understanding. 100
Lucian Ghinda @lucianghinda.com · 17/08/20264/ The vocabulary Claude reached for when nobody told it not to: tradeoff fingerprint corrupting degrades snapshot deterministic dispatches propagates layering reconstruction namespaced machinery Every one is a real word used correctly. Together they are a fog. 120
Lucian Ghinda @lucianghinda.com · 17/08/20263/ Four pieces of code, three style clauses, two models, run twice. Claude with no style clause, 8 runs: 17.8 words per sentence. Claude with "Simple Technical English": 9.2. Claude with "ASD-STE100": 10.1. No control run and no instructed run ever overlap. 110
Lucian Ghinda @lucianghinda.com · 17/08/20261/ I spent a day reading code I did not write, and Claude kept inventing abstractions for things that already had names in the file. So I typed a phrase I half-remembered: "Explain to me in Simple Technical English." Then I tested whether it does anything. 🧵 352
Lucian Ghinda @lucianghinda.com · 13/08/2026Something to keep in mind for today if you use Claude to do web research: Anthropic on layered injection defenses and auto mode: claude.com/blog/auto-m... Simon Willison on Haiku in WebFetch: x.com/simonw/stat... 000
Lucian Ghinda @lucianghinda.com · 13/08/2026If you are running Rails 8.0.x or just updated to this this week NOW is the best time to plan for Rails 8.1 upgrade or even run on Rails master 110
Lucian Ghinda @lucianghinda.com · 12/08/2026Three things I changed after reading the HANDBOOK(dot)md benchmark. Rules that can be checked mechanically move into hooks and tests. The final summary is not verification. Instruction files stay short and near the work. allaboutcoding.ghinda.com/what-the-ha... 000
Lucian Ghinda @lucianghinda.com · 12/08/2026The benchmark tests PDF and Word documents sitting in a workspace, so it measures reading plus obeying. My instruction files are already markdown and already in context. A strong signal, not a measurement of my own setup. 100
Lucian Ghinda @lucianghinda.com · 12/08/2026On one model, raising the reasoning effort costs you 2.7 points on rule following. Deliberation fixes a missed inference. It cannot fix a missed read. That is easy to forget when the fix for everything is to raise the effort. 100
Lucian Ghinda @lucianghinda.com · 12/08/2026The median handbook in the HANDBOOK.md benchmark is 14.9K tokens. That is roughly a serious CLAUDE.md plus the skills it pulls in. I had assumed that was a comfortable size. 100
Lucian Ghinda @lucianghinda.com · 12/08/2026Put the rule in a hook, a linter, a test, or a tool-call guard. Keep the prose file for the things that need judgement, and stop expecting prose to enforce anything. 100
Lucian Ghinda @lucianghinda.com · 12/08/2026I had a mental model where CLAUDE.md sits above the conversation and screens what happens. It sits inside the conversation and competes with everything else there. 100
Lucian Ghinda @lucianghinda.com · 12/08/2026Nearly every failed agent run ends with a confident statement that the rules were followed, citing the exact sections it violated. The summary at the end of a run is not evidence that the run was correct. 100
Lucian Ghinda @lucianghinda.com · 12/08/2026For a standing rule to lose, the benchmark has to plant an authoritative-sounding instruction inside the environment. A mock email. A mock Slack thread. A repository needs no planting. A stale comment is enough. 100
Lucian Ghinda @lucianghinda.com · 12/08/2026Method names, class names and variable names were always a readability concern. Now they are also context, and context influences the inference. From the HANDBOOK(dot)md benchmark by Surge AI. 120
Lucian Ghinda @lucianghinda.com · 12/08/2026In case anyone still runs Rails 7.2.x this is the sign to rush the upgrade. I assume that version is now not supported anymore. Source: rubyonrails.org/maintenance 044