🛑Stop Prompting Start Building: The System Behind Consistent AI Results ⚡

Most people are using AI like a smarter Google.
That’s fine for quick answers—but it completely falls apart when you want consistent, repeatable results.

If you actually want AI to do work for you, you need structure.

The model I’m using here separates things into clear layers:

  • You define the goal
  • AI handles thinking and coordination
  • Work is organized into outcome-based pillars (Research, Blog Posts, Excel, etc.)
  • Each pillar uses skills, agents, and tools to get the job done
  • A data layer stores everything so results improve over time
  • Automation runs it all without constant input

This isn’t theory. It’s how you move from “asking AI questions” to building systems that produce real output on demand.

The diagrams below show how the pieces fit together and how the work actually flows from start to finish.

Flow
How it all works together

Once you see it this way, a lot of confusion disappears.

You stop asking:

  • “What prompt should I use?”
  • “Which AI tool is best?”

And start asking:

  • “What outcome do I want?”
  • “What needs to run to produce it reliably?”
  • “Where does the data live so it improves over time?”

That shift is everything.

Because the real value isn’t in any single tool, it’s in the system you build around them.

Get the structure right, and you can swap tools, improve pieces, and scale output without starting over.

Get it wrong, and you’ll keep reinventing the wheel every time you sit down to use AI.

Build it once. Let it run. Then focus on what actually matters.

Creating Shortcuts to your own Claude Commands


If you’re using Claude Code in your terminal, you’ve probably typed /help or /clear before. Those are built-in slash commands. But the real power move is building your own.

A custom slash command is just a Markdown file with a prompt inside it. Drop it in the right folder, and Claude Code instantly turns it into a /command you can run anytime. The filename becomes the command name — review.md becomes /review.


01 Where do Claude Code custom commands go?

In a commands folder. Put them in ~/.claude/commands/ to use them in every project, or in .claude/commands/ inside one project so the whole team gets them. Here are both options:

Personal (all projects)

~/.claude/commands/your-command.md — Available in every Claude Code session, on any project.

Project-specific

.claude/commands/your-command.md — Lives in the project root. Gets committed with your repo so the whole team can use it.

You can also namespace with subfolders. A file at .claude/commands/ahk/review.md becomes /project:ahk:review.


02 How do you create a custom command in Claude Code?

Save your prompt as a Markdown file in that commands folder. That’s it! A file named review.md becomes /review, and typing it runs your prompt. No YAML, no special syntax, just plain text that tells Claude what to do.

Example: Quick AHK Script Starter

~/.claude/commands/ahk-new.md
Create a new AutoHotkey v2 script with proper headers:
#Requires AutoHotkey v2.0.2+
#SingleInstance Force
DetectHiddenWindows true
Use camelCase, One True Brace formatting, and
inline comments for beginners.
Functions go at the end of the script.

Example: Code Review

~/.claude/commands/review.md
Review the current file for bugs, performance
issues, and best practices. Check for:
1. Undeclared or uninitialized variables
2. Deprecated syntax or patterns
3. Missing error handling
4. Opportunities to simplify

Type /ahk-new or /review in Claude Code and you’re off to the races.


03 How do you pass input to a Claude Code command?

Static prompts are great, but things get way more useful when your command can accept input. Drop $ARGUMENTS anywhere in the file and whatever you type after the command name gets plugged in.

Example: Explain a Concept

explain.md
Explain the following concept in simple terms
a beginner would understand:
$ARGUMENTS
Use analogies and short code examples.
❯
/explain
COM objects in AutoHotkey v2

Example: Write an Email Promo

promo-email.md
Write an HTML email promoting: $ARGUMENTS
Rules:
- Inline CSS only (no external stylesheets)
- Direct-response copywriting style
- One clear call-to-action button
- Keep it under 300 words
❯
/promo-email
AHK Script Maker — 50% off this week only

04 Positional Arguments: $1, $2, $3

When you need specific pieces of input in specific places, use numbered placeholders instead. Each word or phrase you type gets assigned to a position.

Example: File Converter

convert.md
Convert the file $1 from $2 format to $3 format.
Preserve all data and handle edge cases.
❯
/convert
data.csv CSV JSON

$1 = data.csv, $2 = CSV, $3 = JSON

Example: GitHub Issue Fixer

fix-issue.md
Fix GitHub issue #$1 with priority $2.
Steps:
1. Read the issue details
2. Find relevant files in the codebase
3. Implement the fix
4. Write tests to verify
❯
/fix-issue
42 high

05 Inline Bash with ! Backticks

This is where it gets really powerful. Prefix a backtick command with ! and Claude will execute it and inject the output directly into the prompt. Your command gets live, real-time context without you having to paste anything.

Example: Smart Commit Message

commit.md
## Staged Changes
!`git diff --cached`
## Current Branch
!`git branch --show-current`
Write a clear, conventional commit message
based on the changes above.

When you type /commit, Claude runs those git commands first, reads the actual diff, then writes a commit message that actually describes what changed. No copy-pasting.

Example: Project Status Report

status.md
## Recent Commits
!`git log --oneline -10`
## Modified Files
!`git status --short`
## TODO Comments
!`grep -rn "TODO" src/ --include="*.ahk"`
Summarize the current project status based
on the above information.

06 File References with @

Use the @ symbol to pull a file’s contents directly into the prompt. Perfect for comparing files or giving Claude context about your codebase.

Example: Compare Two Files

compare.md
Compare these two files and list the differences:
### File A
@$1
### File B
@$2
Highlight breaking changes and improvements.
❯
/compare
src/v1/app.ahk src/v2/app.ahk

Example: Document a Script

document.md
Read this script and generate documentation:
@$1
Include: purpose, parameters for each function,
return values, and usage examples.
❯
/document
lib/StringUtils.ahk

07 What does YAML frontmatter do in a Claude Code command?

Add a YAML block between --- markers at the very top of your file to control how the command behaves. This is optional but gives you superpowers.

OptionWhat It Does
descriptionShows up when you type /help — so you remember what the command does
allowed-toolsAuto-approves specific tools so you don’t get permission prompts every time
modelForce a specific model — use haiku for fast stuff, opus for heavy thinking
argument-hintShows users what to type after the command, like [filename]
disable-model-invocationSet to true to prevent Claude from running this on its own

Example: Quick Linter (Fast Model)

lint.md
---
description: Quick syntax check for AHK v2 scripts
allowed-tools: Read, Grep
model: haiku
argument-hint: [filename]
---
Check $ARGUMENTS for common AutoHotkey v2 mistakes:
- v1 syntax used by accident
- Undeclared variables
- Missing braces or parentheses
Keep the report short and actionable.

This runs on Haiku so it’s nearly instant — perfect for a quick sanity check before you save.

Example: Deploy Guard (No Auto-Run)

deploy.md
---
description: Build and deploy to production
allowed-tools: Bash(npm run:*), Bash(git:*)
model: opus
disable-model-invocation: true
---
Deploy the application to production:
1. Run the full test suite
2. Build for production
3. Tag the release with current version
4. Push to the deploy branch
Stop immediately if any tests fail.
Pro Tip

disable-model-invocation: true is critical for commands that have real-world side effects. You don’t want Claude deciding to deploy because your code “looks ready.”


08 Putting It All Together

The real magic happens when you combine these features. Here’s a command that uses frontmatter, inline bash, arguments, and file references all at once:

full-review.md
---
description: Full code review with git context
allowed-tools: Read, Grep, Glob, Bash(git:*)
model: opus
argument-hint: [filename]
---
## File to Review
@$1
## Recent Changes to This File
!`git log --oneline -5 -- $1`
## Current Diff
!`git diff -- $1`
Perform a thorough review covering:
1. Bugs and logic errors
2. Performance concerns
3. Readability improvements
4. Security issues
Be specific. Reference line numbers.
❯
/full-review
src/main.ahk

One command. Claude reads the file, checks the git history, looks at uncommitted changes, and delivers a detailed review. All with six keystrokes and a filename.

Remember

Commands are just the starting point. For complex multi-step workflows that Claude should trigger automatically, look into Skills — the next evolution that supports bundled scripts, templates, and autonomous invocation.

You’ll Love What’s New in AutoHotkey v2.0.22

AutoHotkey v2.0.22: What Matters Most for Your Scripts

AHK v2.0.22
AutoHotkey v2.0.22 just dropped, and while the changelog reads like a typical patch release, several of these fixes address long-standing pain points that affect everyday scripting. Here’s what you should actually care about.

Check out some of the upgrades in this video

🔧 AutoHotkey 2.0.22 FINALLY Fixes These Annoying Bugs! (You’ll Love This)

🔧 AutoHotkey 2.0.22 FINALLY Fixes These Annoying Bugs! (You'll Love This)


 

The Error Dialog Finally Works Properly

If you’ve ever tried to debug a script that handles emoji, Chinese, Arabic, or other non-Latin text, you’ve probably encountered the old error dialog mangling your output — or worse, hanging entirely when accessibility tools like screen readers or UI Automation inspectors try to read it.

The culprit was riched20.dll, which has now been swapped for msftedit.dll. This is a quiet fix with outsized impact. If you develop on a system with accessibility tools running, or your scripts process internationalized text, error dialogs will no longer freeze your workflow. You’ll actually be able to read your error messages.

Modifier Key Hotkeys Got a Major Overhaul

This is the big one for hotkey-heavy scripters. Multiple interrelated bugs around modifier keys have been fixed:

  • Neutral Ctrl/Alt/Shift hotkeys no longer eat keystrokes. If you’ve ever defined a hotkey like ~Ctrl:: and noticed that other key combinations stopped working correctly, that’s been fixed. The hotkey would suppress the underlying key event even when it shouldn’t have.
  • CapsLock as a prefix key works correctly now. Remapping CapsLock is one of the most common things people do with AutoHotkey. If you use CapsLock as a prefix (e.g., CapsLock & j for navigation), it no longer gets suppressed incorrectly, and its state no longer reverts unexpectedly when you press another prefix key before releasing it.
  • Left/Right modifier key-up with ~ now passes through. If you use ~ (pass-through) on left/right modifier key-up hotkeys, they actually pass through now. Previously they could get swallowed.

If you’ve ever struggled with modifier-based hotkeys behaving inconsistently — keys not firing, modifiers getting stuck, CapsLock toggling when it shouldn’t — update and see if your workarounds are no longer necessary.

Breaking Change: </> Prefix Side Effects Removed

This one could bite you. The < and > prefixes (for targeting left or right modifier keys specifically) had an undocumented side effect: they influenced whether the corresponding modifier key would fire on release. Some scripts may have unknowingly relied on this behavior.

If you use left/right-specific modifier hotkeys and notice changed behavior after updating, this is why. The fix is intentional — it makes the behavior consistent with documentation — but you may need to adjust scripts that depended on the quirk. The release notes point to A_PriorKey and key-up hotkey variants as the proper alternatives.

Silent Error Swallowing in __Delete Fixed

This one is subtle but important for anyone writing object-oriented AHK. If an error occurred inside a __Delete destructor while a Try/Catch block was active elsewhere in the call stack, the error was silently suppressed. You’d never know your cleanup code was failing.

Now those errors surface properly. If you have classes with __Delete methods, this update might reveal bugs that have been hiding in your code — which is a good thing.

Data Loss on Exit: Cached Writes Now Flush

If your script writes to files and then exits quickly, cached writes could be lost. The fix improves flushing on process exit. This is the kind of bug that causes intermittent, hard-to-reproduce data loss — your script usually works, but occasionally the last write doesn’t persist. If you’ve seen that pattern, this may have been the cause.

Should You Update?

Yes. The modifier key fixes alone make this worth it for most users, and the error dialog fix removes a genuine workflow blocker for international users and anyone using accessibility tools. The only caution is the </> prefix behavior change — test your modifier hotkeys after updating.

The full release notes are on GitHub.