fai-prompt-version-manage — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited fai-prompt-version-manage (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Version, deploy, and track prompts with rollback and A/B testing.
prompts/
rag-answer/
v1.0.md
v1.1.md
v2.0.md
config.json{
"name": "rag-answer",
"active": "v2.0",
"rollback": "v1.1",
"variants": {
"v1.0": {"status": "deprecated"},
"v1.1": {"status": "rollback-ready"},
"v2.0": {"status": "active", "deployed": "2026-04-15"}
}
}from pathlib import Path
import json
class PromptManager:
def __init__(self, prompts_dir: str = "prompts"):
self.dir = Path(prompts_dir)
def load(self, name: str, version: str = None) -> str:
config = json.loads((self.dir / name / "config.json").read_text())
version = version or config["active"]
return (self.dir / name / f"{version}.md").read_text()
def rollback(self, name: str):
config_path = self.dir / name / "config.json"
config = json.loads(config_path.read_text())
config["active"] = config["rollback"]
config_path.write_text(json.dumps(config, indent=2))
def list_versions(self, name: str) -> list[str]:
return sorted(p.stem for p in (self.dir / name).glob("v*.md"))
pm = PromptManager()
prompt = pm.load("rag-answer") # Gets active versionimport hashlib
def ab_select(name: str, user_id: str, variants: list[str]) -> str:
"""Deterministic variant selection based on user ID."""
hash_val = int(hashlib.md5(f"{name}:{user_id}".encode()).hexdigest(), 16)
return variants[hash_val % len(variants)]
# Usage
variant = ab_select("rag-answer", user_id, ["v1.1", "v2.0"])
prompt = pm.load("rag-answer", version=variant)def track_prompt_performance(name: str, version: str, metrics: dict):
"""Log prompt version + quality metrics for comparison."""
entry = {"prompt": name, "version": version,
"timestamp": datetime.now().isoformat(), **metrics}
with open("prompt-metrics.jsonl", "a") as f:
f.write(json.dumps(entry) + "\n")| Issue | Cause | Fix |
|---|---|---|
| Wrong version served | Config not updated | Check config.json active field |
| Rollback not working | No rollback version set | Always maintain rollback pointer |
| A/B results skewed | Non-deterministic selection | Use hash-based assignment |
| Metric comparison invalid | Different traffic mix | Ensure same user segments per variant |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.