Sign in

Lucian Ghinda

@lucianghinda.com
1.9K followers 837 following 2.6K posts

Product Engineer, Ruby on Rails Developer ‣ Curator of newsletter.shortruby.com ‣ Helping #Ruby developers design better test cases at goodenoughtesting.com

PostsRepliesMedia
Lucian Ghinda @lucianghinda.com · 09/09/2026
And 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 😄 )
A text block discusses tool accuracy, edge cases for regression tests, and specific conditions for project observations.
000
Lucian Ghinda @lucianghinda.com · 09/09/2026
Most 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.
Text discusses collaboration on Ruby gem projects, detailing subagents running and tasks like verification and documentation.
110
Lucian Ghinda @lucianghinda.com · 09/09/2026
I 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/2026
Did 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
Workshop titled "Good Enough Agents: How Coding Agents Actually Work" scheduled for September 18, 2026, with no available seats.
032
Lucian Ghinda @lucianghinda.com · 03/09/2026
Hmmm, coincidence? :)) Maybe it is time for a break.
Warning messages indicate ongoing issues with ChatGPT and Codex, including elevated error rates and updates on investigations.
030
Lucian Ghinda @lucianghinda.com · 03/09/2026
I 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
Text discusses a new data retention system called Enterprise Frontier Safeguards (EFS) for improved privacy and customer control.
020
Lucian Ghinda @lucianghinda.com · 01/09/2026
Time 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
Displays a message indicating 100 worktrees in use, occupying approximately 76 GB of storage space.
020
Lucian Ghinda @lucianghinda.com · 01/09/2026
Why 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 ```
Code snippet showing a method `execute` that defines a block and demonstrates its relation to Object in Ruby. Output results included.
100
Lucian Ghinda @lucianghinda.com · 01/09/2026
Add 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 ```
Ruby code snippet for silencing and restoring console loggers in a Rails application, defining methods for managing logger states.
100
Lucian Ghinda @lucianghinda.com · 01/09/2026
For 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.
Guide on creating a helper to silence logging in Rails console sessions. Focus on code and functionality for cleaner output.
120
Lucian Ghinda @lucianghinda.com · 01/09/2026
For 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.
Guide on creating a helper to silence logging in Rails console sessions. Focus on code and functionality for cleaner output.
120
Lucian Ghinda @lucianghinda.com · 31/08/2026
When 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 :)
Two coding interfaces display command inputs; one uses "/" and the other uses "$" for programming tasks, highlighting differing styles.
340
Lucian Ghinda @lucianghinda.com · 28/08/2026
Compare 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.
Technical write-up detailing code changes for throttling requests and test environment caveats in a Ruby on Rails project.
110
Lucian Ghinda @lucianghinda.com · 28/08/2026
Have 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.
Three proposed approaches for a software architecture, with bulleted details on extensions and changes to system components highlighted.
100
Lucian Ghinda @lucianghinda.com · 27/08/2026
Oh 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/2026
I like it when AI confirms my stack choices: Ruby on Rails + @avohq.io PS: Working on a new workshop, more details soon
A dark interface displays text about integrating Rails and Avo for workshop management, emphasizing a centralized dashboard for instructors.
220
Lucian Ghinda @lucianghinda.com · 27/08/2026
And a bit of pseudo code logic that looks like this:
Code snippet outlines logic for session resolution and message handling within an agent's context. It includes conditional checks and resolutions.
100
Lucian Ghinda @lucianghinda.com · 27/08/2026
I 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)
Documentation detailing the public interface and value objects for new Ruby classes, including method definitions and parameters.
100
Lucian Ghinda @lucianghinda.com · 26/08/2026
There 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.
A dark-themed graphic illustrates dependencies in generated responses, showing a function with prompts and answers as variables.
120
Lucian Ghinda @lucianghinda.com · 25/08/2026
This is the script I used to generate that GIF:
A terminal window displays a script for generating a GIF, featuring commands related to Ruby and settings for output dimensions.
010
Lucian Ghinda @lucianghinda.com · 25/08/2026
I 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/2026
I 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.
A dark-themed graphic discusses the impracticality of exhaustive testing in software, highlighting LLM's verification limitations.
100
Lucian Ghinda @lucianghinda.com · 21/08/2026
Some 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/2026
Then 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.
A terminal screen displays configuration settings, including a reference to a non-existent item, with an "OK" status reported.
110
Lucian Ghinda @lucianghinda.com · 20/08/2026
The 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...
A terminal window displays a list of Codex status line names and terminal title parameters for version 0.146.1, arranged alphabetically.
100
Lucian Ghinda @lucianghinda.com · 20/08/2026
In 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.
A code snippet displays a configuration for a TUI status line, listing options like "current-dir" and "git-branch."
100
Lucian Ghinda @lucianghinda.com · 20/08/2026
The 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.
Three command-line interfaces are contrasted regarding their settings for status lines, highlighting differences in acceptable inputs.
110
Lucian Ghinda @lucianghinda.com · 20/08/2026
In 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".
A configuration snippet for Codex showcases customizable status line items listed under the `[tui]` section in a `.toml` file.
100
Lucian Ghinda @lucianghinda.com · 19/08/2026
Because 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.
Terminal displaying JSON data being tested with echo and a script, noting workspace and context parameters. Status shows "no-git."
100
Lucian Ghinda @lucianghinda.com · 19/08/2026
5/ 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%.
Code snippet defining a context segment function that manages window size and usage percentage, highlighting varying fullness levels.
100
Lucian Ghinda @lucianghinda.com · 19/08/2026
So 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.
A script displays code for reading standard input, parsing JSON, and handling errors, with syntax highlighting on a dark background.
100
Lucian Ghinda @lucianghinda.com · 19/08/2026
The 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.
A terminal window displays JSON configuration for a Ruby status line, indicating file paths and settings.
100
Lucian Ghinda @lucianghinda.com · 17/08/2026
8/ 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/2026
7/ 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/2026
4/ 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/2026
3/ 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/2026
1/ 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/2026
Something 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...
A dark interface displays text about prompt injection, model training, and risks associated with web fetching on Claude Code.
000
Lucian Ghinda @lucianghinda.com · 13/08/2026
If 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
A list outlines supported Rails versions with their end-of-life dates, emphasizing security fixes for minor releases.
110
Lucian Ghinda @lucianghinda.com · 12/08/2026
Three 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...
Three changes outlined: mechanics in hooks, summary not verification, and concise instructions near the code support clarity.
000
Lucian Ghinda @lucianghinda.com · 12/08/2026
The 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.
PDF and Word documents are laid out in a workspace, indicating testing of reading ability and adherence to instructions.
100
Lucian Ghinda @lucianghinda.com · 12/08/2026
On 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.
Text on a dark background discusses reasoning effort, rule following, and the limitations of deliberation in problem-solving.
100
Lucian Ghinda @lucianghinda.com · 12/08/2026
The 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.
Text highlights a median handbook size of 14.9K tokens, comparing it to a complex CLAUDE.md and suggesting it's a comfortable length.
100
Lucian Ghinda @lucianghinda.com · 12/08/2026
Put 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.
Text on a dark background emphasizes the importance of mechanical checks over prose in enforcing rules and keeping judgments separate.
100
Lucian Ghinda @lucianghinda.com · 12/08/2026
I 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.
Text on a dark background discusses the positioning and influence of CLAUDE.md within conversations and its transient impact.
100
Lucian Ghinda @lucianghinda.com · 12/08/2026
Nearly 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.
A dark background highlights text discussing misleading summaries in failed agent runs, emphasizing rule violations.
100
Lucian Ghinda @lucianghinda.com · 12/08/2026
For 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.
A digital mockup displays a discussion on coding practices, emphasizing the significance of stale comments over formal communications.
100
Lucian Ghinda @lucianghinda.com · 12/08/2026
Method 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.
Text on a dark background discusses the importance of naming conventions in coding, emphasizing their role in context and inference.
120
Lucian Ghinda @lucianghinda.com · 12/08/2026
In 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
Security support details for Rails versions, highlighting end-of-life dates, including 7.2.x until August 9, 2026.
044