Posts

LLMs don't think like humans

In a conversation I had recently, someone suggested that our human thinking at some level is the same as LLM thinking. I’ve thought about that a lot (over the past decades, given my degree in AI from many years ago), and it’s a really interesting question: What actually separates human cognition from LLMs? Is there a fundamental difference between human and machine intelligence?

I think that there are, at least currently, a number of big differences between the way we think and the way LLMs think.

Read more →

Effective Claude Code prompts

I regularly spend time optimizing my CLAUDE.md, and I often ask claude in an interactive brainstorm session to evaluate the effectiveness of certain prompting techniques. I have iterated over this for a few hours this evening and I thought I’d share my notes:

  • All caps and **bold** have a small effect, but document structure and placement (at the top = more important) carry much more weight. Structural markers such as <CRITICAL>...</CRITICAL> are also effective.
  • emojis in the prompts have a small effect, but the actual words they prefix are much more important
  • Repeating the most important rules (e.g. at the top and bottom of CLAUDE.md) make it more likely it will follow those instructions.
  • Tell claude that if it makes a claim, it has to show its output, e.g. “Mandatory: run all tests. Show test results in output.”
  • An effective way to define behavioural constraints is:
    • BAD BEHAVIOUR: [describe a bad thought pattern]
    • REASON IT’S BAD: [describe why it is bad]
    • DETECTION: [how does claude know it’s falling into this pattern]

As an example, I’ve got this at the start of my CLAUDE.md, before any project-specific instructions:

Read more →

small useful git tricks

Here’s a couple of git aliases I use all the time. It gives you a quick and clear overview of your branches and commits. It can even watch for changes in realtime and show you any changes.

git log screenshot

A better git log

Add this to your .gitconfig:

1
2
[alias]
    tree = log --graph --decorate --all --format='%C(auto)%h%d %Creset%s %C(dim)(%an, %ad)%Creset' --date=relative

Run git tree and you get a compact view of your commit history with branches, colored hashes, commit messages, and authors. The --all flag shows all branches, not just the current one.

Read more →

Development workflow with Claude superpowers

I have hardly written any code manually in the last year, yet I’ve built heaps of smaller and larger projects, using AI to learn new things, write boilerplate code, resolve tricky bugs, and rapidly iterate on ideas.

I have journeyed from AI autocomplete to vibe coding to prompt engineering to increasingly effective agentic spec-driven development workflows. For a while, I’ve been using and developing my trusty old prompts from my cursor-rules repo to help me keep the AI on track.

Read more →

Claude YOLO: Not so dangerously skip permissions

I do all my development with Claude Code and the spec-driven workflow du jour. Claude is usually great at letting me quickly explore new things and rapidly iterate on ideas.

If you’ve used Claude Code, you will be as tired as I am to have to give Claude permission to do basically anything. Can I edit this file? Yes, and don’t ask me again for similar commands. Can I run this script? Yes, and don’t ask me again for similar commands, etcetera.

Read more →