AI News HubLIVE
In-site rewrite4 min read

Show HN: Promptctl – Git for your AI prompts

Promptctl is a version control tool for AI prompts, similar to Git. It allows users to track, diff, and rollback LLM prompts via CLI. Features include commit, log, diff, show, rollback, search, export, watch, and more. Built with Go and zero external dependencies, it stores all prompt versions locally in a .promptctl/store.json file.

SourceHacker News AIAuthor: shawnaya101

Notifications You must be signed in to change notification settings

Fork 0

Star 1

BranchesTags

Open more actions menu

Folders and files

NameName

Last commit message

Last commit date

Latest commit

History

1 Commit

1 Commit

.github/workflows

.github/workflows

.vscode

.vscode

cmd/promptctl

cmd/promptctl

docs

docs

internal

internal

scripts

scripts

.gitignore

.gitignore

CONTRIBUTING.md

CONTRIBUTING.md

LICENSE

LICENSE

Makefile

Makefile

README.md

README.md

go.mod

go.mod

Repository files navigation

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

The Problem

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 was working

What changed between versions

Which version performed best

How to get back to a specific point

promptctl solves this. It's git for prompts.

Installation

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

or: go build -o bin/promptctl ./cmd/promptctl/

Demo

Quick Start

1. Initialize in your project (creates .promptctl/store.json)

promptctl init

2. Save your first prompt version

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

3. Make a change and save it

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

4. See the history

promptctl log system --preview

5. Compare latest vs. previous

promptctl diff system

6. Roll back

promptctl rollback system 1 -m "reverting"

Commands

init

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

promptctl init

commit

Save a new version of a prompt.

From stdin

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

From a file (recommended for longer prompts)

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

With metadata

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

Interactive — type END on its own line to finish

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

log

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

diff

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

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

rollback

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

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

list

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

Search across content, commit messages, and tags.

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

export

Export all versions of a prompt to Markdown.

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

copy

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

promptctl copy system system-experimental

rename

Rename a prompt. All history moves with it.

promptctl rename system assistant

delete

Delete a prompt and all its versions.

promptctl delete system

watch

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 — the prompt name to commit under (required)

--model — tag new versions with this model

--interval — polling interval (default: 1)

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

prune

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

promptctl prune system --keep 10

stats

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)

completion

Print a shell completion script.

Bash — add to ~/.bashrc

source ~/.config/fish/completions/promptctl.fish

Completions dynamically suggest prompt names for commands that take a argument.

How It Works

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

Reading & Writing Programmatically

Several commands support --json or --raw for scripting:

Read the latest version of a prompt

promptctl show system --raw

Pipe the latest content into another tool

promptctl show system --raw | pbcopy

List prompts as JSON

promptctl list --json

Ingest output from a script

./generate-prompt.sh | promptctl commit system -m "generated"

Tagging & Model Tracking

Tag a version for filtering

promptctl commit system -m "production" --tag prod --model claude-opus-4-8

View only tagged versions

promptctl log system --tag prod

Find all prompts referencing a tag

promptctl search prod

Why Zero Dependencies?

promptctl uses only Go's standard library — no external packages, no version conflicts, no go mod tidy surprises. One binary, no runtime.

Roadmap

Remote sync (S3, GitHub Gist)

Side-by-side terminal diff view

VS Code extension

Contributing

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

License

MIT © Shawnaya Williams

About

Git for your AI prompts — version, diff, and rollback LLM prompts from the CLI

github.com/naya-ai/promptctl

Topics

cli

golang

ai

version-control

devtools

developer-tools

gpt

claude

llm

prompt-engineering

Resources

Readme

License

MIT license

Contributing

Contributing

Uh oh!

There was an error while loading. Please reload this page.

Activity

Stars

1 star

Watchers

0 watching

Forks

0 forks

Report repository

Releases 1

v0.1.0 — Initial release

Latest

Jun 25, 2026

Packages 0

Uh oh!

There was an error while loading. Please reload this page.

Contributors

Uh oh!

There was an error while loading. Please reload this page.

Languages

Go 86.8%

Python 12.8%

Makefile 0.4%