Skip to content
Practitioner Notes
Prof Rod Avatar

Quick Thoughts

Short-form practitioner insights on zero employee organizations — written for sharing.

A difficult task benefits from a clear outcome and constraints. A long prompt full of instructions to “think harder” may add little useful information. For a practice planning task, give the OpenAI model the available…

openaiprompting

A saved prompt is not a complete experiment record. The model, relevant settings and test inputs can all affect the result. When comparing an OpenAI workflow, record the exact model identifier used, the prompt version…

openaievaluation

Prompt tuning is hard to assess when the definition of “better” changes after every answer. Freeze a small acceptance set first. For a document-routing task, define the allowed destinations and label a collection of…

openaievaluation

Structured output can make a model response easier to parse. It cannot tell you whether the invoice number or amount was extracted correctly. Try a synthetic invoice with a subtotal, tax and total. Ask an OpenAI model…

openaistructured-output

A model can handle ordinary support tickets well and still fail on the exceptions that consume most of your team's time. Build a small evaluation set from representative, appropriately sanitized cases. Include a missing…

openaievaluation

A handoff should let someone resume the work without replaying every exploratory turn. Give them the state they need to make the next decision. Ask for the working directory, branch, source revision, changed files…

codexworktrees

A generated file can look like the obvious place to fix a typo. The next build may overwrite that edit and bring the problem back. Ask Codex to trace the file to its generator or source collection before changing it…

codexcode-review

If you paste the same cleanup instructions every week, the reusable asset is the procedure and its examples, not the conversation history. Start with one narrow task such as checking the required columns in a synthetic…

codexskills

A command can print plausible output and still fail. Your next automation step should require successful completion and a valid artifact. For a Codex report job, capture the process status and validate the saved report…

codexautomation

Before applying a mechanical change across a repository, prove it on a file whose intended result you can inspect completely. Create an isolated worktree and choose a small example with one normal case and one…

codextesting

A skill can look excellent on the example it was written for. A nearby request outside its scope reveals whether its boundary is clear. For a skill that validates a sales CSV, add one accepted fixture and one request to…

codexskills

A useful answer can disappear from your working process if it exists only in the conversation. Save the result where the next step expects to find it. For an automated repository summary, use the documented…

codexautomation

A temporary instruction can outlive the problem it was meant to solve. Later, Codex appears to ignore the team's normal convention for no obvious reason. When you introduce an instruction override, record why it exists…

codexinstructions

A task may need to edit a local script while having no reason to contact a production service. Treat those permissions as separate decisions. Before automating with Codex, inspect the effective sandbox and approval…

codexpermissions

“Review carefully” gives a code reviewer little to prioritize. A business invariant tells it which mistakes matter. Suppose an import must preserve every valid order and put invalid rows in an exception file. Add that…

codexcode-review

A review comment becomes useful when another person can reproduce the problem. A confident severity label alone does not establish that the code is wrong. For each consequential Codex finding, ask for the triggering…

codexcode-review

A scheduled command may start somewhere different from your terminal. Relative paths that worked yesterday can then point at the wrong project. Put the task's working directory in the automation configuration and have…

codexautomation

A report that feeds another program needs stable fields. A heading that changes from “Risks” to “Things to watch” can break a fragile text parser. For a repository audit, define a small JSON Schema containing the file…

codexstructured-output

An automation should not mistake a progress update for its final report. Choose the output channel your parser actually needs. The documented codex exec flow sends progress to stderr and the final agent message to…

codexautomation

A correct change in the wrong checkout is still the wrong delivery. Before a Codex task starts, establish its directory, branch and base revision. After the task, inspect the diff and run the relevant checks in that…

codexworktrees

A reusable skill needs a clear reason to be selected. “Helps with documents” is too broad to distinguish an invoice check from a presentation rewrite. Write a description that names the job, the expected input and a…

codexskills

When Codex follows the wrong convention, first check which instruction files it loaded. Adding another instruction can make the conflict harder to see. Start from the directory where the task will run and ask for the…

codexinstructions

An agent can solve the named problem and also change behavior you meant to preserve. Read the diff with both questions in mind. For a formatting fix, ask Claude Code to identify any changed calculations, dependencies or…

claude-codecode-review

A blank sales figure can mean “not reported yet.” Zero can mean “reported, with no sales.” Combining them makes a complete-looking report less truthful. Before asking Claude Code to summarize a spreadsheet, write down…

claude-codedata-quality

The cheapest Claude Code session can be the expensive one if its output takes another hour to repair. Compare accepted results, not just token totals. Choose a repeatable task, such as adding a validation rule to a…

claude-codecost

Your machine's editor path should not become every colleague's setup problem. Separate shared project behavior from preferences that belong to one checkout. When Claude Code proposes a settings change, ask which…

claude-codeconfiguration

A hook that succeeds on good input may still let bad work through. Test its failure path before making it part of your workflow. Create a disposable example that violates the rule the hook is meant to enforce. Run the…

claude-codehooks

A connector can expose more operations than the task needs. A tool that reads a customer record may sit beside another that updates or deletes one. Before using an MCP server with Claude Code, inspect the actual tools…

claude-codemcp

A permission rule is easiest to assess with two small examples: one operation you intend to allow and one nearby operation you intend to deny. For a document-cleanup task, use a disposable workspace. Check whether…

claude-codepermissions

A development server passing its tests does not establish that a production bundle behaves the same way. Build tools can replace environment values, remove code and change asset paths. When Claude Code changes a…

claude-codeverification

A page can fail after three services have each logged something that looks successful. Start with one request identifier, not the loudest error message. Give Claude Code a redacted log sample and the time of one failed…

claude-codedebugging

Renaming two hundred client documents is easy to request and surprisingly hard to undo when two names collapse into one. Ask Claude Code to produce a proposed mapping first: current path, proposed path and reason. Use a…

claude-codefile-operations

A useful bug report contains an input that fails and the result you expected. That gives Claude Code something firmer than “the report looks wrong.” Suppose a weekly summary counts the same invoice twice. Build a tiny…

claude-codetesting

A customer number such as 00127 is an identifier. Turning it into 127 can break a perfectly tidy spreadsheet export. Give Claude Code a small synthetic CSV before asking it to clean the real file. Include an identifier…

claude-codedata-quality

You ask if it's done. It says yes. You check, and it isn't. A completion claim needs evidence you can inspect. A runnable check can help, provided it actually tests the requirement you care about. Give it something that…

claude-codeverification

The agent repeats the wrong approach after two corrections. My rule of thumb is to stop adding conversational patches and restate the task from the evidence. Two is a reminder, not a measured threshold. Before clearing…

claude-codecontext

Three hundred lines of instructions and it still breaks your conventions. So you add more rules. It gets worse. My working hypothesis is that a long instruction file may make important rules harder for the model to…

claude-codecontext

An authentication investigation can touch dozens of files before identifying the two interfaces that matter. Keeping all that exploration in the implementation conversation may leave less room for the actual change. A…

claude-codecontext

Before a refactor, decide what you would need to restore. Claude Code's rewind can recover tracked edits and conversation state; it cannot undo every effect of an experiment. Shell changes and external actions need…

claude-codepractice

The stakeholder asks for a useful assistant. Before choosing a framework, find out which result they would accept and which mistake they cannot tolerate. Ask Claude to interview you about the task: inputs, users, edge…

claude-codepractice

Your acceptance criteria say the linter must run after an edit. Putting that sentence in the agent's instructions still leaves execution to the model. A command hook attaches a script to a defined workflow event. Test…

claude-codeverification

The session says the feature is complete, but the build is red. A defined completion check gives you better evidence than that summary. A Stop hook can run a script and block stopping when its condition fails. Test the…

claude-codeverification

The session that wrote your rate limiter has already seen the argument for its design. For a useful second look, give a fresh session the diff, acceptance criteria and relevant middleware contracts. Ask it to identify a…

claude-codeverification

A review returns twelve plausible findings. Fixing all twelve can add more complexity than the original feature, especially when some describe states the system cannot reach. Treat each finding as a hypothesis. Ask…

claude-codeverification

A team is useful when separate investigations or implementations can proceed at the same time. A long dependency chain does not become parallel because you assign more agents to it. Anthropic's cost guide gives an…

claude-codeeconomics

A migration across two hundred files needs a task inventory and a way to check every result. One headless run per bounded change can make failures easier to isolate. A flag such as --allowedTools "Edit,Bash(git commit…

claude-codepractice

You keep asking for the same issue workflow: read the requirements, locate the change, implement it and run the relevant checks. A parameterized skill can save you from rewriting that brief. A manually invoked skill can…

claude-codepractice

Finding a filename and explaining a token-refresh failure are different tasks, even if both start by searching the same repository. The second can require careful reasoning about state, time and permissions. Custom…

claude-codeeconomics

After a long debugging session, the next turn remembers the proposed fix but loses the failing input. That is enough to make a plausible continuation go wrong. /compact focus on the API changes can guide a summary…

claude-codecontext

You want to refactor billing while fixing an unrelated UI problem. Separate Git worktrees give the two tasks different working directories and branches, so their file edits do not overwrite the same checkout. They still…

claude-codepractice

A second model can give you another view of a migration or payment change. That is useful only if its findings survive inspection. Different model families may fail differently, but they can also share assumptions…

claude-codeverification

The dashboard builds successfully, but a customer cannot read the mobile table. A compilation check did its job; it did not test that reading experience. Give the agent the intended design and ask it to capture the…

claude-codeverification

You know which authentication helper handles the failing request. Give the agent its path and the failing case instead of asking it to rediscover both. An @src/utils/auth.ts reference can supply the relevant file. Check…

claude-codecontext

Repeated permission prompts can become a reflex. Automating some of those decisions may reduce interruption, but it also changes which actions proceed without a person inspecting them. Claude Code's auto mode uses a…

claude-codesecurity

Your notebook has become a small application, and every new session needs the same explanation: where the tests live, how to run them and which generated files to leave alone. /init can draft a starter CLAUDE.md from…

claude-codesetup

A one-line change can alter authorization for every user. A hundred-line generated update can be routine. Diff length is a poor substitute for understanding consequences. Use Plan Mode when the approach, dependencies or…

claude-codepractice

You are packaging an application and want to know what --frozen-lockfile means before running the install. Ask the question; guessing at a build flag is a poor way to save context. Claude Code's /btw opens a side…

claude-codecontext

Your team needs the test command and branch convention. It does not need your scratch-directory preference in its shared instructions. Put each fact where its owner can maintain it. Keep project-wide instructions in…

claude-codesetup

A billing refactor and an onboarding fix have different requirements. Giving each a named session can make their decisions easier to follow than mixing both conversations. Use /rename to label the current session and…

claude-codepractice

When an integration fails, the exact error is more useful than your recollection of it. cat error.log | claude passes a file into the CLI without copying from terminal scrollback. Inspect and redact the input first…

claude-codepractice

A shell command starts your prototype. A scheduled service also needs lifecycle control, credentials, error handling and a way to inspect what happened after you left. That is a reason to evaluate an agent SDK. The…

claude-codepractice

Before building a review workflow, inspect the commands and plugins available in your installation. A command named /code-review may come from an installed plugin or a local skill; its name does not establish its…

claude-codeverification