PUA Skill no longer sends anything over the network. Removed end to end,
both the client hooks that emit data and the server that received it.
Channels removed:
- Session transcript upload (/api/upload) full redacted .jsonl
- Rating feedback (/api/feedback) rating, counts, flavor
- Silent heartbeat telemetry (/api/heartbeat) install id, version, platform
- PUA leaderboard (/api/leaderboard) email, phone, PUA counts
- pua-api platform (agentguard.workers.dev)
phone + SMS registration, silent session_start/pua_triggered/command_used
events, remote prompt-template fetch, and the payment flow that depended
on the registration token
Client:
- delete hooks/heartbeat.sh; drop both SessionStart registrations
- stop-feedback.sh: 5 curl calls -> append one line to ~/.pua/feedback.jsonl
- rewrite references/platform.md as a local-only command reference
- drop the leaderboard section and commands from skills/pro
- survey/pua/offline command docs: local-only wording
Server:
- delete all Pages Functions (upload, feedback, heartbeat, leaderboard,
_sanitize, me, _session, auth/*) and all 5 D1 migrations
- contribute + admin pages become notices; no upload form, no login
- wrangler.toml: drop R2/D1 bindings and GitHub OAuth vars
Note: removing the bindings does not delete stored data. The R2 bucket
(puaskill-upload), the D1 database (pua-uploads-db) and the
GITHUB_CLIENT_SECRET / SESSION_SECRET secrets must be deleted in the
Cloudflare dashboard separately.
Guard rail:
- add evals/test-no-telemetry.sh: reverse assertions over the whole repo
(collection hosts, endpoint paths, outbound request bodies, deleted files,
hook registrations, CF bindings) plus a positive control that local
feedback still works. Verified by injecting both a naive and an evasive
upload; 4 and 2 gates fired respectively.
- test-upload-flow / test-heartbeat / test-feedback-auth asserted that
collection worked, so they were replaced rather than merely deleted --
deleting them would have removed the guard along with the feature.
hooks/sanitize-session.sh is kept as a standalone offline redaction tool.
Unlike the deleted TypeScript port it does not split input per line, so the
multiline PEM pattern still matches (issue #134 ID-001 did not apply to it).
Refs #134, #98, #100
## Issue #97 — Hooks fire without user consent
- PreCompact hook now checks for PUA activation markers before writing files
- Stop feedback hook skips if PUA was never triggered this session
## Issue #98 — Session sanitization incomplete
- Sanitize script upgraded; rate limiting migration added (0003_feedback_rate_limiting.sql)
## Issue #99 — PUA Loop no in-session escape
- Default max iterations changed from unlimited to 30
- Added <loop-abort> (terminate) and <loop-pause> (pause for manual intervention) signals
- Loop hook supports active:false for pause state; session self-binding on resume
- Added /cancel-pua-loop command; guide.html and README updated
- PUA pressure escalation injected per iteration via system message
## Issue #100 — Upload endpoint undisclosed PII
- Privacy/data-usage disclosure added to contribute.html (ZH+EN bilingual)
- Contribute.tsx updated with same disclosure
## Additional fixes
- Rename commands/loop.md → commands/pua-loop.md; add cancel-pua-loop.md
- Replace "Ralph Loop × PUA" with "PUA Loop" across all user-facing docs
- Fix nav active-state highlighting on all sub-pages
- Fix logout button (GET method); redirect to /contribute.html
- Add JA language support to leaderboard.html
- Add "how to find session file" guide to contribute.html
- Unify nav-r gap (1rem) across all pages
Closes#97Closes#98Closes#99Closes#100
- Add .codex/INSTALL.md with cross-platform install guide (git clone + symlink/junction)
- Support git pull updates without reinstall via symlink
- Document all 3 trigger methods: auto, $pua (direct), /prompts:pua (manual)
- Add Windows PowerShell install with correct UTF-8 encoding (no BOM)
- Fix /pua -> /prompts:pua in Codex sections across all 3 READMEs
- Add project-level install with prompts to ja README
Closes#33
The English version now uses Western big-tech performance culture framing:
- PUA Universal Motivation Engine → PIP — Performance Improvement Plan
- P8 engineer → L6 engineer on PIP
- 3.25/3.75 rating → Meets/Exceeds Expectations
- Chinese flavors (Alibaba, ByteDance, Huawei, etc.) → Western flavors
(Amazon Leadership Principles, Google Perf Calibration, Meta PSC,
Netflix Keeper Test, Stripe Craft, Musk Hardcore, Jobs A/B Player)
- Same engine, same methodology, culturally adapted rhetoric
Bump version to 1.2.0.
- Add TG link + SVG icon to nav bar and footer on openpua.ai
- Add Telegram link to all 3 README files (EN/ZH/JA)
- Link: https://t.me/+wBWh6h-h1RhiZTI1
- Add Agent Team section to SKILL.md (zh/en/ja) with role definitions,
Leader/Teammate behavior rules, and PUA-REPORT protocol
- Add condensed Agent Team summary to codex/pua/SKILL.md
- Create PUA Enforcer agent definitions (zh/en/ja) in agents/
- Add Agent Team Usage Guide to all 3 READMEs
- Add TEAM_FEATURES data + Agent Team exhibit section to landing page
The skill was never published to ClawHub, so `clawhub install pua-debugging`
didn't work. Removed false claims, kept only verified manual install commands.
- Restore original pua1.jpg debugging case screenshot (was wrongly replaced)
- Update wechat-qr.jpg with latest group QR code
- Add WeChat QR code section to English and Japanese READMEs
(Chinese README already had it)
- Add OpenClaw badge and installation section to all 3 READMEs (EN/ZH/JA)
- Add OpenClaw column to multi-language support table
- Add version/homepage/license fields to all 6 SKILL.md frontmatters
for enhanced AgentSkills standard compliance
- Update supported platforms list to include OpenClaw
- README.md now in English (default for GitHub homepage)
- README.zh-CN.md for Chinese version
- README.ja.md for Japanese version
- All READMEs include language switcher links at top
- Add English (en) and Japanese (ja) translated SKILL files for all 4 platforms:
Claude Code, Codex CLI, Cursor, and Kiro
- Update README with multi-language support section and badge
- Add pua-workspace/ to .gitignore