cd /news/developer-tools/show-hn-promptctl-git-for-your-ai-pr… · home topics developer-tools article
[ARTICLE · art-38636] src=github.com ↗ pub= topic=developer-tools verified=true sentiment=↑ positive

Show HN: Promptctl – Git for your AI prompts

Promptctl, a new open-source tool from Naya AI, brings Git-like version control to AI prompts, enabling developers to track, diff, and rollback prompt changes. The tool addresses the common problem of prompts being scattered across files, documents, and chats, making it difficult to debug performance regressions. Written in Go, it stores prompt history locally and supports commands such as commit, log, diff, show, rollback, and search.

read5 min views7 publishedJun 25, 2026
Show HN: Promptctl – Git for your AI prompts
Image: source

Git for your AI prompts.

Track, version, diff, and rollback your LLM prompts — just like you version your code.

$ promptctl commit system --file prompts/system.txt -m "initial"
✓ Committed prompt "system" as v1

$ promptctl commit system --file prompts/system.txt -m "added citation rule"
✓ Committed prompt "system" as v2

$ promptctl diff system
--- system v1 (2026-06-01 09:12)
+++ system v2 (2026-06-03 14:47)

- You are a helpful assistant.
+ You are a helpful assistant. Always cite your sources.

$ promptctl rollback system 1 -m "reverting — citation hurt recall"
✓ Rolled back "system" to v1 → saved as v3

Your prompts live in random places — hardcoded in files, buried in Notion docs, copy-pasted in Slack. When something breaks or stops working well, you have no idea:

  • What the prompt looked like last week when it wasworking - What changed between versions
  • Which version performed best
  • How to get back to a specific point

promptctl solves this. It's git

for prompts.

Requires Go 1.22+.

go install github.com/naya-ai/promptctl/cmd/promptctl@latest

Or build from source:

git clone https://github.com/naya-ai/promptctl.git
cd promptctl
make build    # binary at bin/promptctl
promptctl init

echo "You are a helpful assistant." | promptctl commit system -m "initial"

echo "You are a helpful assistant. Always cite sources." | promptctl commit system -m "added citation rule" --model claude-3

promptctl log system --preview

promptctl diff system

promptctl rollback system 1 -m "reverting"

Initialize promptctl in the current directory. Creates .promptctl/store.json

.

promptctl init

Save a new version of a prompt.

echo "You are a helpful assistant." | promptctl commit system -m "initial"

promptctl commit system --file prompts/system.txt -m "from file"

promptctl commit classifier -m "optimized for speed" --model gpt-4o-mini --tag prod

promptctl commit system -m "manual entry"

Flags:

-m

/--message

— commit message (default:"add version N"

)--model

— tag with the model this prompt targets--tag

— add a label to this version-f

/--file

— read content from a file instead of stdin

Show version history.

promptctl log                          # all prompts
promptctl log system                   # one prompt
promptctl log system --preview         # show content snippets
promptctl log system --tag prod        # filter by tag
promptctl log system --json            # machine-readable output

Compare versions side by side with color highlighting.

promptctl diff system            # latest vs. previous
promptctl diff system 2          # v2 vs. latest
promptctl diff system 1 3        # v1 vs. v3

Show a prompt version.

promptctl show system            # latest version
promptctl show system 2          # specific version
promptctl show system --raw      # content only (good for piping)
promptctl show system --json     # full JSON
promptctl show system --copy     # copy to clipboard (macOS/Linux)
promptctl show system --version-at 2026-06-01   # version that was latest on that date

Restore a previous version. Creates a new version (non-destructive).

promptctl rollback system 1
promptctl rollback system 1 -m "reverting — citation hurt recall"

List all tracked prompts.

promptctl list
promptctl list --json       # JSON array with version counts
promptctl list --names      # one name per line (used by shell completions)

Search across content, commit messages, and tags.

promptctl search "helpful assistant"
promptctl search prod              # matches tag "prod"

Export all versions of a prompt to Markdown.

promptctl export system
promptctl export system > system-history.md

Fork a prompt with its full version history under a new name.

promptctl copy system system-experimental

Rename a prompt. All history moves with it.

promptctl rename system assistant

Delete a prompt and all its versions.

promptctl delete system

Auto-commit a file whenever it changes on disk. Great for editing prompts in your usual editor and automatically versioning every save.

promptctl watch prompts/system.txt --as system
promptctl watch prompts/system.txt --as system --model claude-3 --interval 2

Flags:

--as <name>

— the prompt name to commit under (required)--model

— tag new versions with this model--interval <seconds>

— polling interval (default: 1)

Commit timestamps match the file's modification time, not when promptctl ran.

Keep only the N most recent versions and discard the rest.

promptctl prune system --keep 10

Show a store-wide overview.

promptctl stats
Stats:
──────────────────────────────────────────────────
  Prompts:         4
  Total versions:  23
  Total content:   8432 chars
  First commit:    2026-06-01 09:12:00
  Last commit:     2026-06-24 15:30:44
  Most iterated:   system (12 versions)

Print a shell completion script.

source <(promptctl completion bash)

source <(promptctl completion zsh)

promptctl completion fish > ~/.config/fish/completions/promptctl.fish

Completions dynamically suggest prompt names for commands that take a <name>

argument.

promptctl stores everything in .promptctl/store.json

— similar to how .git/

works. The store is discovered from your current directory or any parent, so commands work from any subdirectory.

your-project/
├── .promptctl/
│   └── store.json     ← all prompt versions live here
├── src/
└── ...

Add .promptctl/

to your project's .gitignore

to keep prompt history local. If your team wants to share versions in git, track only the store file:

.promptctl/*
!.promptctl/store.json

Several commands support --json

or --raw

for scripting:

promptctl show system --raw

promptctl show system --raw | pbcopy

promptctl list --json

./generate-prompt.sh | promptctl commit system -m "generated"
promptctl commit system -m "production" --tag prod --model claude-opus-4-8

promptctl log system --tag prod

promptctl search prod

promptctl uses only Go's standard library — no external packages, no version conflicts, no go mod tidy

surprises. One binary, no runtime.

  • Remote sync (S3, GitHub Gist)
  • Side-by-side terminal diff view
  • VS Code extension

See CONTRIBUTING.md. PRs welcome — open an issue first for major changes.

git clone https://github.com/naya-ai/promptctl.git
cd promptctl
make test
make build

MIT © Shawnaya Williams

── more in #developer-tools 4 stories · sorted by recency
── more on @promptctl 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/show-hn-promptctl-gi…] indexed:0 read:5min 2026-06-25 ·