PM / DASHBOARD
CONNECTING
SYS: DASHBOARD
loading workspace...
TOTAL_PROMPTS
—
this environment
LIVE_IN_PROD
—
approved versions
PENDING_REVIEW
—
awaiting engineer
EST_SAVINGS
$0.00
lifetime token ROI
RECENT PROMPTS
PENDING APPROVALS
QUICK_START
✦
CREATE PROMPT
Name your prompt, write the content, save as draft
⌘
GET API KEY
Create a serve key for your agents and workflows
⊕
CONNECT AGENT
See integration code for n8n, Python, Node, curl
▦ PROMPT_REGISTRY
all prompts in this environment · click to open editor
✦ PROMPT_EDITOR
select a prompt from Registry
DETECTED VARIABLES
Write {{variable}} in your prompt to define dynamic values. They appear here automatically.
PROMPT INTELLIGENCE (V1)
COMPLEXITY
0.0
CHAR_COUNT
0
VAL_GRADE
A+
VERSION HISTORY
Select a prompt to see version history
◉ APPROVAL_QUEUE
versions awaiting your review · engineer+ role required to approve
◈ EVALUATIONS
LLM-as-judge · test your prompts before approving
RUN EVAL
SAVED LLM KEYS
No saved keys. Add one to run evals without pasting keys each time.
⑂ VERSION_HISTORY
complete audit trail · every version ever proposed
⌘ API_KEYS
serve keys for your agents · each key tied to one environment
HOW AGENTS USE THESE KEYS
# Python / any HTTP client
# Replace pm_live_xxxx with your actual key
r = requests.get(
"http://localhost:8000/pm/serve/your.prompt.key",
headers={"Authorization": "Bearer pm_live_xxxx"},
timeout=2
)
system_prompt = r.text # returns the approved content
◌ ENVIRONMENTS
dev → staging → production · each environment has its own prompts and keys
≡ AUDIT_LOG
every action · append-only · who did what and when
⊕ INTEGRATIONS
connect your agents · copy integration code
PYTHON
import requests
def get_prompt(key, vars={}):
url = f"http://localhost:8000/pm/serve/{key}"
if vars:
url += "?vars=" + ",".join(
f"{k}={v}" for k,v in vars.items()
)
r = requests.get(url, headers={
"Authorization": "Bearer YOUR_KEY"
}, timeout=2)
return r.text if r.ok else "[fallback prompt]"
# Usage
system = get_prompt("assistant.system")
system = get_prompt("email.writer", {"tone": "formal"})
n8n / MAKE / ZAPIER
Add an HTTP Request node before your AI node:
Method: GET
URL: http://localhost:8000
/pm/serve/{{$vars.promptKey}}
Headers:
Authorization: Bearer YOUR_KEY
# Output maps to system prompt input
# of your OpenAI / Claude / Gemini node
JAVASCRIPT / NODE
const getPrompt = async (key, vars={}) => {
const q = Object.entries(vars)
.map(([k,v]) => `${k}=${v}`).join(",")
const url = `http://localhost:8000
/pm/serve/${key}${q ? "?vars="+q : ""}`
const r = await fetch(url, {
headers: { Authorization: "Bearer YOUR_KEY" }
})
return r.ok ? r.text() : "[fallback]"
}
CURL
# Plain text response
curl http://localhost:8000 \
/pm/serve/assistant.system \
-H "Authorization: Bearer YOUR_KEY"
# JSON response (with metadata)
curl "...?format=json" \
-H "Authorization: Bearer YOUR_KEY"
# With variable substitution
curl "...?vars=tone=formal,name=Alex" \
-H "Authorization: Bearer YOUR_KEY"
⚙ SETTINGS
workspace · account · danger zone
WORKSPACE
Org: —
Plan: —
Slug: —
SERVE ENDPOINT
Your agents call this endpoint. Replace {key} with your prompt key.
loading...
ACCOUNT
DATA PORTABILITY
Export your entire registry (prompts, versions, environments) as a JSON file. Use this for backups or to migrate to a self-hosted instance.
DANGER ZONE