Claude & Galaxy Development

Lab Talk - December 2025

The Bad

  • The number of half finished projects I have are higher than ever. I can abandon three a week.
  • I have serious moral reservations around all of this shit. I don’t know how I am going to eat in the future but I think I need to stay on top of this stuff to do that.
  • I don’t know how to make it do the “hard” stuff so I spend more time on easy stuff. I’ve got to work hard to resist this tendency.

Ask Claude to be concise.

At first the deluge of Claude is really fun but it is overwhelming quickly - the first line of my ~/.claude/CLAUDE.md is:

  • In all interactions and commit messages, be concise and sacrifice grammer for the sake of concision.

Plan, Plan, Plan

My whole career I’ve been a doer - I don’t write plans. I always start by starting, I do the thing by doing the thing.

Gotta give this up. Never ask Claude/Cursor/copilot to do something substantial without a Plan. Write out the plan and track things in the plan.


The Initial Prompt

You’re in Galaxy, I’d like you to give me a plan to implement the GA4GH WES stadnard (URL here). We already have an implementation of the GA4GH DRS standard (URL here) located at (path/to/drs.py). You will probably want to leverage the implementation behind the workflow API (code here and tests here). Below the API there is a service layer (here) and a manager layer (here).


The Initial Prompt - Tricks

  • The initial prompt is rarely “Do X” - instead “Research X for a plan” or “Develop a plan for X”.
  • In a small code base with good CLAUDE.md docs - pointing at things isn’t important - but for typical Galaxy development this is important.

Worktrees

A Git worktree is like a mirror of the repository with new physical files but the same Git backbone (shares branches, remotes, etc..)


ghwt

  • https://github.com/jmchilton/ghwt
  • npm install -g ghwt
  • Manage multiple worktree/branches.
  • Connects editors (code, cursor), agents (claude), CI (WIP), and notes (Obsidian).
  • (Planemo for worktrees?)

Create a Worktree (Branch)

% # ghwt clone git@github.com:galaxyproject/galaxy.git % ghwt create galaxy iwc-linking


What create does

  • Creates a worktree with a fixed known path and branch of the same name.
  • Create an Obsidian note for planning.
  • Opens VS Code in that worktree.
  • Creates a persistent development session (zellij, reattachable anytime).

Zellij

https://zellij.dev/

The call it “A terminal workspace with batteries included”, I call it “What if tmux but usable?”


Per-Repository Templates

The default just opens a terminal with two panes - one for CLI testing and such and one for Claude code.

I’ve configured Galaxy with bells and whistles in my configuration. Suspended windows that will quickly launch the client dev server and the Python backend the way I like it (test tools, etc.).


IWC Demo Prompt

Click out to Obsidian


WES Keyset Token Pagination Unification

Read e3ba62887de177a2f8a3d18970bfac576f7f77bd for context - we are using keyset based token for some pagination in these new APIs but still encoding pure offset tokens for the other. Can you verify this understand and come up with a plan for migrating all the pagination we’re implementing to use our keyset abstraction or a generalization of it please?

Full Planning Session (gist)


WES Keyset Token Pagination Unification

% ghwt attach % code .


Don’t Type the Same Prompt Twice

https://github.com/jmchilton/claude-commands

Clone into ~/.claude/commands


/jmchilton:dedup

Claude will duplicate code or write a lot of parallel code that could be abstracted without giving it a second thought. You’ve got to periodically ask it to establish and reuse abstractions.


/jmchilton:pyreview

ruff, mypy, black, isort - catch a lot in CI. This will catch some more.


/jmchilton:update-document

Claude will do a bunch of work and write a bunch of documents and then forget to update the documents as it does more work - this just prods it a bit as you see documentation stale in realtime.


Prompts - Get Meta

  • Ask it to launch a subagent to evaluate itself, ask it how it could have done that better.
  • Counter-intuitive for how one things about developer tools - but it really does do a better job when it has motivation. Explain why a lot, place subgoals in the context of larger goals.
  • Ask it to restate the problem.
  • Have it create issues - example

A Good (?) Prompt, Getting Meta

Building the Collection Transformation Command