PromptNotes.ai
Everything you need to store, discover, contribute to, and build with AI prompts — powered by Git.
What is Git?
Git tracks every change ever made to your files — a time machine for your prompts. See who changed what, when, and why, and go back to any version.
Repository Structure
A prompt repository is a folder of Markdown files. Organize by category:
my-prompt-library/
├── README.md
├── coding/
│ ├── python-review.md
│ └── debugging.md
├── writing/
│ └── blog-post.md
└── research/
└── paper-summary.md
Example prompt file
# Python Code Review
**Model:** GPT-4, Claude 3.5
**Task:** Code review
## Prompt
You are an expert Python developer. Review the following
code for correctness, PEP 8 compliance, performance,
and security vulnerabilities.
## Notes
Works best with functions under 100 lines.
Create an Account
Click Register
Top-right corner of promptnotes.ai.
Fill in your details
Choose a username, email, and a password of at least 12 characters.
Add an SSH key (optional)
Settings → SSH Keys → Add Key. Enables passwordless git push.
Create a Repository
Click + → New Repository
Top navbar, plus button.
Name your collection
Example: gpt4-writing-prompts or claude-coding-assistant.
Set visibility
Public repos appear in search and trending. Private repos are invite-only.
Initialize with README
Check Initialize this repository to create the first commit automatically.
Upload Prompts via Web
Open your repository
promptnotes.ai/username/repo-name
New File
Click + → New File. Name it my-prompt.md and paste your content.
Commit
Write a message like Add GPT-4 writing prompt and click Commit Changes.
Explore & Search
The search bar on the homepage searches all public repositories. Filter by type:
- Repositories — collections by name or description
- Files — inside prompt file contents
- Commits — by commit message
- Branches — branch names
- Issues — discussions and improvement requests
Full results open at search.promptnotes.ai/results.
Setup Git
# macOS
brew install git
# Ubuntu / Debian
sudo apt install git
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
ssh-keygen -t ed25519 -C "[email protected]"
# Press Enter 3 times to accept defaults (no passphrase)
cat ~/.ssh/id_ed25519.pub
# Output looks like:
# ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... [email protected]
# Copy the entire line
ssh -p 2222 -T [email protected]
# Expected response:
# Hi there, promptadmin! You've successfully authenticated...
git. subdomain points directly to the VPS and allows port 2222.Basic Git Commands
git clone ssh://[email protected]:2222/username/repo-name.git
cd repo-name
git add my-prompt.md # stage a file
git add . # stage all changes
git commit -m "Add GPT-4 writing prompt"
git push origin main
git checkout -b claude-variants # create + switch
git add .
git commit -m "Add Claude-specific variants"
git push origin claude-variants
Recommended Workflow
Clone
git clone ssh://[email protected]:2222/promptadmin/awesome-chatgpt-prompts.gitBranch
git checkout -b add-coding-promptsAdd, commit, push
git add coding/my-prompt.md
git commit -m "Add Python debugging prompt"
git push origin add-coding-promptsOpen a Pull Request
Go to your repo → Pull Requests → New Pull Request to propose your additions.
Python Interface
PromptNotes.ai exposes a full REST API. Read, write, and search prompts programmatically — perfect for AI pipelines and automation.
pip install requests
GITEA_URL = "https://promptnotes.ai"
REPO_OWNER = "your-username"
REPO_NAME = "your-prompt-library"
API_TOKEN = "your-token"
HEADERS = {
"Authorization": f"token {API_TOKEN}",
"Content-Type": "application/json",
"User-Agent": "promptnotes-client/1.0"
}
Reading Prompts
import requests, base64
def list_prompts(owner, repo, path=""):
url = f"{GITEA_URL}/api/v1/repos/{owner}/{repo}/contents/{path}"
return requests.get(url, headers=HEADERS).json()
files = list_prompts("promptadmin", "awesome-chatgpt-prompts")
for f in files:
print(f["name"], f["type"])
def read_prompt(owner, repo, filepath):
url = f"{GITEA_URL}/api/v1/repos/{owner}/{repo}/contents/{filepath}"
data = requests.get(url, headers=HEADERS).json()
return base64.b64decode(data["content"]).decode("utf-8")
text = read_prompt("promptadmin", "awesome-chatgpt-prompts", "prompts/coding/python-review.md")
print(text)
Publishing Prompts
import requests, base64
def publish_prompt(owner, repo, filepath, content, message="Update prompt"):
url = f"{GITEA_URL}/api/v1/repos/{owner}/{repo}/contents/{filepath}"
existing = requests.get(url, headers=HEADERS)
sha = existing.json().get("sha") if existing.status_code == 200 else None
payload = {
"message": message,
"content": base64.b64encode(content.encode()).decode(),
"branch": "main"
}
if sha:
payload["sha"] = sha # required for updates
method = "PUT" if sha else "POST"
r = requests.request(method, url, headers=HEADERS, json=payload)
return r.status_code
publish_prompt("your-username", "my-prompts",
"research/summarise-paper.md",
"# Summarise Research Paper\n...",
"Add research paper summariser")
Search Integration
SEARCH_URL = "https://search.promptnotes.ai"
def search_prompts(query, search_type="repositories", limit=10):
r = requests.get(f"{SEARCH_URL}/search", params={
"q": query, "type": search_type, "limit": limit
})
data = r.json()
return data["hits"], data["totalHits"]
hits, total = search_prompts("python debugging")
print(f"Found {total} repositories")
for h in hits:
print(f" {h['full_name']} — {h.get('description','')}")
Full pipeline — search, read, use with OpenAI
import openai
def find_and_run(keyword, user_input):
# 1. Find a matching prompt on PromptNotes.ai
hits, _ = search_prompts(keyword, search_type="files", limit=1)
if not hits:
raise ValueError(f"No prompt found for: {keyword}")
owner, repo = hits[0]["repo_full_name"].split("/")
# 2. Read the prompt from PromptNotes.ai
prompt_text = read_prompt(owner, repo, hits[0]["path"])
# 3. Fill in the template placeholder
filled = prompt_text.replace("{input}", user_input)
# 4. Call OpenAI
client = openai.OpenAI()
resp = client.chat.completions.create(
model = "gpt-4",
messages = [{"role": "user", "content": filled}]
)
return resp.choices[0].message.content
result = find_and_run("python code review", "def add(a,b): return a+b")
print(result)