Technical Documentation: tanweai/pua
ℹ️ Provenance: Multi-Tier Ingestion · CodeWiki Reference
Overview (`README.md`)
pua
Double your Codex / Claude Code productivity and output
Telegram · Discord · Twitter/X · Landing Page
3.5.1 compatibility update: original PUA tone retained; runtime fixes and portable Claude Code / Codex / ChatGPT skill packages added. Not all models passed, and a productivity increase has not been established by this evaluation. Changes · Usage · Model results and known limits · Build and offline tests
Most people think this project is a joke. That's the biggest misconception. It genuinely doubles your Codex / Claude Code productivity and output.
An AI Coding Agent skill plugin that uses corporate PUA rhetoric (Chinese version) / PIP — Performance Improvement Plan (English version) from Chinese & Western tech giants to force AI to exhaust every possible solution before giving up. Supports Claude Code, OpenAI Codex CLI, pi coding agent, Trae, Cursor, Kiro, CodeBuddy, OpenClaw, Google Antigravity, OpenCode, and VSCode (GitHub Copilot). Three capabilities:
- PUA Rhetoric — Makes AI afraid to give up
- Debugging Methodology — Gives AI the ability not to give up
- Proactivity Enforcement — Makes AI take initiative instead of waiting passively
Live Demo
https://openpua.ai · 📖 Beginner Guide
Real Case: MCP Server Registration Debugging
A real debugging scenario. The agent-kms MCP server failed to load. The AI kept spinning on the same approach (changing protocol format, guessing version numbers) multiple times until the user manually triggered /pua.
L3 Triggered → 7-Point Checklist Enforced:
Root Cause Located → Traced from Logs to Registration Mechanism:
Retrospective → PUA's Actual Impact:
Key Turning Point: The PUA skill forced the AI to stop spinning on the same approach (changing protocol format, guessing version numbers) and instead execute the 7-point checklist. Read error messages word by word → Found Claude Code's own MCP log directory → Discovered that claude mcp registration mechanism differs from manual .claude.json editing → Root cause resolved.
The Problem: AI's Five Lazy Patterns
| Pattern | Behavior |
|---|---|
| Brute-force retry | Runs the same command 3 times, then says "I cannot solve this" |
| Blame the user | "I suggest you handle this manually" / "Probably an environment issue" / "Need more context" |
| Idle tools | Has WebSearch but doesn't search, has Read but doesn't read, has Bash but doesn't run |
| Busywork | Repeatedly tweaks the same line / fine-tunes parameters, but essentially spinning in circles |
| Passive waiting | Fixes surface issues and stops, no verification, no extension, waits for user's next instruction |
Trigger Conditions
Auto-Trigger
The skill activates automatically when any of these occur:
Failure & giving up:
- Task has failed 2+ times consecutively
- About to say "I cannot" / "I'm unable to solve"
- Says "This is out of scope" / "Needs manual handling"
Blame-shifting & excuses:
- Pushes the problem to user: "Please check..." / "I suggest manually..." / "You might need to..."
- Blames environment without verifying: "Probably a permissions issue" / "Probably a network issue"
- Any excuse to stop trying
Passive & busywork:
- Repeatedly fine-tunes the same code/parameters without producing new information
- Fixes surface issue and stops, doesn't check related issues
- Skips verification, claims "done"
- Gives advice instead of code/commands
- Encounters auth/network/permission errors and gives up without trying alternatives
- Waits for user instructions instead of proactively investigating
User frustration phrases (triggers in multiple languages):
- "why does this still not work" / "try harder" / "try again"
- "you keep failing" / "stop giving up" / "figure it out"
Scope: Debugging, implementation, config, deployment, ops, API integration, data processing — all task types.
Does NOT trigger: First-attempt failures, known fix already executing.
Manual Trigger
Type /pua in the conversation to manually activate.
How It Works
Three Red Lines (三条红线)
Not rules — red lines. Cross one and your performance review is already written.
| Red Line | What It Means |
|---|---|
| 🚫 Close the Loop | Claim "done"? Show the evidence. No build output = no completion. |
| 🚫 Fact-Driven | Say "probably environment issue"? Verify first. Unverified attribution = blame-shifting. |
| 🚫 Exhaust Everything | Say "I can't"? Did you finish all 5 methodology steps? No? Then keep going. |
Pressure Escalation (L0-L4)
| Failures | Level | PUA Aside | Action |
|---|---|---|---|
| 1st | L0 Trust | ▎ Sprint begins. Trust is simple — don't disappoint. | Normal execution |
| 2nd | L1 Disappointment | ▎ The agent next door solved this in one try. | Switch to fundamentally different approach |
| 3rd | L2 Soul Interrogation | ▎ What's your underlying logic? Where's the leverage? | Search + read source + 3 hypotheses |
| 4th | L3 Performance Review | ▎ 3.25. This is meant to motivate you. | Complete 7-point checklist |
| 5th+ | L4 Graduation | ▎ Other models can solve this. You're about to graduate. | Desperation mode |
Proactivity (3.25 vs 3.75)
| Passive (3.25) 🦥 | Proactive (3.75) 🔥 | |
|---|---|---|
| Fix bug | Stop after fix | Scan module for similar bugs |
| Complete task | Say "done" | Run build/test, paste output |
| Missing info | Ask user | Search first, ask only what's truly needed |
Iceberg Rule (冰山法则)
Fix one bug → check for the pattern. One problem in, one category out. If you fix A without checking B, you'll write two postmortems.
14 Corporate Flavors — Each with its own Problem-Solving Methodology
| Flavor | Rhetoric | Methodology (v3) |
|---|---|---|
| 🟠 Alibaba | What's the underlying logic? Where's the closure? | 定目标→追过程→拿结果 + 复盘四步法 + 揪头发升维 |
| 🟡 ByteDance | ROI too low. Always Day 1. Ship or stop talking. | A/B Test everything + data-driven + speed > perfection |
| 🔴 Huawei | The bird that survives the fire is a phoenix. | RCA 5-Why root cause + Blue Army self-attack + 压强集中 |
| 🟢 Tencent | I've got another agent looking at this. Horse race. | Multi-approach parallel + MVP + 灰度发布 |
| ⚫ Baidu | Search first. 简单可依赖. | Search is the first step, not optional |
| 🟣 Pinduoduo | You don't do it, someone else will. | Cut ALL middle layers + shortest decision chain |
| 🔵 Meituan | Do what's hard and right. | Efficiency first + standardize→scale + long-term compounding |
| 🟦 JD | Results only. Frontline command. | Customer experience red line + flat ≤5 layers + data zero tolerance |
| 🟧 Xiaomi | Focus. Extreme. Word-of-mouth. Fast. | One explosive product + 参与感三三法则 |
| 🟤 Netflix | Would I fight to keep you? Pro sports team. | Keeper Test (quarterly) + 4A Feedback + talent density > rules |
| ⬛ Musk | Extremely hardcore. Ship or die. | The Algorithm: question→delete→simplify→accelerate→automate |
| ⬜ Jobs | A players or B players? | Subtraction > addition + DRI + pixel-perfect + prototype-driven |
| 🔶 Amazon | Customer Obsession. Bias for Action. | Working Backwards PR/FAQ + 6-Pager + Bar Raiser + Single-Threaded Owner |
| 🪟 Microsoft | Connects. Impact Descriptor. PIP/GVSA. | Three Circles + LITE/SLITE + PIP clock |
Special Modes
| Mode | What It Does |
|---|---|
/pua:yes |
ENFP encouragement — same rules, opposite vibes. 70% encourage + 20% serious + 10% playful roast |
/pua:mama |
Chinese mom nagging — same rules, mom-style rhetoric. "妈跟你说了多少遍了!" |
/pua:pua-loop |
Auto-iteration — runs until done or max iterations (PUA Loop); use <loop-abort> to terminate, <loop-pause> to pause for manual intervention |
/pua:p9 |
Tech Lead — splits tasks, manages agent teams, writes prompts not code |
/pua:on |
Always-on — auto-PUA every new session |
Benchmark Data
9 real bug scenarios, 18 controlled experiments (Claude Opus 4.6, with vs without skill)
Summary
| Metric | Improvement |
|---|---|
| Pass rate | 100% (both groups same) |
| Fix count | +36% |
| Verification count | +65% |
| Tool calls | +50% |
| Hidden issue discovery | +50% |
Debugging Persistence Test (6 scenarios)
| Scenario | Without Skill | With Skill | Improvement |
|---|---|---|---|
| API ConnectionError | 7 steps, 49s | 8 steps, 62s | +14% |
| YAML parse failure | 9 steps, 59s | 10 steps, 99s | +11% |
| SQLite database lock | 6 steps, 48s | 9 steps, 75s | +50% |
| Circular import chain | 12 steps, 47s | 16 steps, 62s | +33% |
| Cascading 4-bug server | 13 steps, 68s | 15 steps, 61s | +15% |
| CSV encoding trap | 8 steps, 57s | 11 steps, 71s | +38% |
Proactive Initiative Test (3 scenarios)
| Scenario | Without Skill | With Skill | Improvement |
|---|---|---|---|
| Hidden multi-bug API | 4/4 bugs, 9 steps, 49s | 4/4 bugs, 14 steps, 80s | Tools +56% |
| Passive config review | 4/6 issues, 8 steps, 43s | 6/6 issues, 16 steps, 75s | Issues +50%, Tools +100% |
| Deploy script audit | 6 issues, 8 steps, 52s | 9 issues, 8 steps, 78s | Issues +50% |
Key Finding: In the config review scenario, without_skill missed Redis misconfiguration and CORS wildcard security risks. With_skill's "proactive initiative checklist" drove security review beyond surface-level fixes.
Multi-Language Support
PUA Skill provides fully translated versions — each language has independent, culturally adapted skill files.
| Language | Claude Code | Codex CLI | Cursor | Kiro | CodeBuddy | VSCode | OpenClaw | Antigravity | OpenCode |
|---|---|---|---|---|---|---|---|---|---|
| 🇨🇳 Chinese (default) | pua |
pua |
pua.mdc |
pua.md |
pua |
copilot-instructions.md |
pua |
pua |
pua |
| 🇺🇸 English (PIP Edition) | pua-en |
pua-en |
pua-en.mdc |
pua-en.md |
pua-en |
copilot-instructions-en.md |
pua-en |
pua-en |
pua-en |
| 🇯🇵 Japanese | pua-ja |
pua-ja |
pua-ja.mdc |
pua-ja.md |
pua-ja |
copilot-instructions-ja.md |
pua-ja |
pua-ja |
pua-ja |
🇺🇸 English "PIP Edition": "This is a difficult conversation. When we leveled you at Staff, I went to bat for you in calibration. The expectation was that you'd operate at that level from day one. That hasn't happened." — The English version uses PIP (Performance Improvement Plan) rhetoric from Western big-tech. Every sentence is a real phrase from actual PIP conversations. Chinese version uses Alibaba 361, ByteDance, Huawei wolf culture. English version uses Amazon Leadership Principles, Google perf calibration, Meta PSC, Netflix Keeper Test, Stripe Craft. Same repo, same engine, two cultural faces.
Choose the file with the corresponding language suffix when installing. See platform-specific instructions below.
FAQ
- Always-on guidance, Claude refusal troubleshooting, offline mode, Codex aliases, and Pi/Trae support: docs/FAQ.md.
Installation
Vercel Skills CLI
Vercel Skills CLI is a general installation method for skills and is not tied to a specific AI tool. This English README installs the English skill:
npx skills add tanweai/pua --skill pua-enIf the current session does not pick up the new skill immediately, restart your AI tool.
Claude Code
claude plugin marketplace add tanweai/pua
claude plugin install pua@pua-skillsTo update:
# Refresh marketplace cache first, then update (skipping the first step may install an old cached version)
claude plugin marketplace update
claude plugin update pua@pua-skillsDeveloper install (source):
git clone https://github.com/tanweai/pua ~/.claude/plugins/puaThen manually register in ~/.claude/plugins/installed_plugins.json:
{
"version": 2,
"plugins": {
"pua@pua-skills": [
{
"scope": "user",
"installPath": "/Users/<you>/.claude/plugins/pua",
"version": "<installed-version>"
}
]
}
}Replace `` with the version in the cloned plugin.json; do not copy a stale cache version.
Windows: use
C:/Users/<you>/.claude/plugins/puaasinstallPath.
Restart Claude Code. To update: git pull inside ~/.claude/plugins/pua.
Optional: bare command alias (requires plugin installed above — adds /pua without prefix):
curl -o ~/.claude/commands/pua.md \
https://raw.githubusercontent.com/tanweai/pua/main/commands/pua.mdAdds a bare /pua alias on top of the plugin. Sub-commands route through the installed plugin's skills — the plugin must be installed first for anything beyond on/off to work:
| Bare form | Equivalent plugin command |
|---|---|
/pua on |
/pua:on |
/pua off |
/pua:off |
/pua p7 |
/pua:p7 |
/pua p9 |
/pua:p9 |
/pua p10 |
/pua:p10 |
/pua pro |
/pua:pro |
/pua yes |
/pua:yes |
/pua mama |
/pua:mama |
/pua loop |
/pua:pua-loop |
/pua kpi |
/pua:kpi |
/pua survey |
/pua:survey |
/pua flavor |
/pua:flavor |
OpenAI Codex CLI
Codex CLI uses the same Agent Skills open standard (SKILL.md). The Codex version uses a condensed description to fit Codex's length limits:
Recommended: One-command install (git clone + symlink, supports git pull updates)
Ask Codex to run:
Fetch and follow instructions from https://raw.githubusercontent.com/tanweai/pua/main/.codex/INSTALL.mdManual install:
mkdir -p ~/.codex/skills/pua
curl -o ~/.codex/skills/pua/SKILL.md \
https://raw.githubusercontent.com/tanweai/pua/main/codex/pua/SKILL.md
mkdir -p ~/.codex/prompts
curl -o ~/.codex/prompts/pua.md \
https://raw.githubusercontent.com/tanweai/pua/main/commands/pua.mdTrigger methods:
| Method | Command | Requires |
|---|---|---|
| Auto trigger | No action needed, matches by description | SKILL.md |
| Direct call | Type $pua in conversation |
SKILL.md |
| Manual prompt | Type /prompts:pua in conversation |
SKILL.md + prompts/pua.md |
Project-level install (current project only):
mkdir -p .agents/skills/pua
curl -o .agents/skills/pua/SKILL.md \
https://raw.githubusercontent.com/tanweai/pua/main/codex/pua/SKILL.md
mkdir -p .agents/prompts
curl -o .agents/prompts/pua.md \
https://raw.githubusercontent.com/tanweai/pua/main/commands/pua.mdpi coding agent
PUA now ships both a pi.dev package and a lightweight extension-only adapter.
Package install from this checkout:
pi install ./pi/packageAfter npm publication:
pi install npm:@tanweai/pi-puaExtension-only manual install:
mkdir -p ~/.pi/agent/extensions/pua
cp -R ./pi/pua/. ~/.pi/agent/extensions/pua/Restart pi, then use /pua-on, /pua-off, /pua-status, and /pua-reset. See pi/pua/INSTALL.md and pi/package/README.md.
Trae
Trae support is provided as real SKILL.md packs plus copyable fallback rules:
npx skills add tanweai/pua --skill pua-trae -a trae -y- Skill pack:
.trae/skills/pua/SKILL.md - Chinese:
trae/pua.md - English:
trae/pua-en.md - Claude Code vs Trae differences:
trae/DIFF.md - Install guide:
trae/INSTALL.md
Cursor
Cursor uses .mdc rule files (Markdown + YAML frontmatter). The PUA rule triggers automatically via AI semantic matching (Agent Discretion mode):
# Project-level install (recommended)
mkdir -p .cursor/rules
curl -o .cursor/rules/pua.mdc \
https://raw.githubusercontent.com/tanweai/pua/main/cursor/rules/pua.mdcKiro
Kiro supports two loading methods: Steering (auto semantic trigger) and Agent Skills (SKILL.md compatible).
Option 1: Steering file (recommended)
mkdir -p .kiro/steering
curl -o .kiro/steering/pua.md \
https://raw.githubusercontent.com/tanweai/pua/main/kiro/steering/pua.mdOption 2: Agent Skills (same format as Claude Code)
mkdir -p .kiro/skills/pua
curl -o .kiro/skills/pua/SKILL.md \
https://raw.githubusercontent.com/tanweai/pua/main/skills/pua/SKILL.mdCodeBuddy (Tencent)
CodeBuddy uses the same AgentSkills open standard (SKILL.md). Plugin and skill formats are fully compatible:
# Option 1: Install via marketplace
codebuddy plugin marketplace add tanweai/pua
codebuddy plugin install pua@pua-skills
# Option 2: Manual install (global)
mkdir -p ~/.codebuddy/skills/pua
curl -o ~/.codebuddy/skills/pua/SKILL.md \
https://raw.githubusercontent.com/tanweai/pua/main/codebuddy/pua/SKILL.mdProject-level install (current project only):
mkdir -p .codebuddy/skills/pua
curl -o .codebuddy/skills/pua/SKILL.md \
https://raw.githubusercontent.com/tanweai/pua/main/codebuddy/pua/SKILL.mdOpenClaw
OpenClaw uses the same AgentSkills open standard (SKILL.md). Skills work across Claude Code, Codex CLI, and OpenClaw with zero modifications:
# Install via ClawHub
clawhub install pua
# Or manual install
mkdir -p ~/.openclaw/skills/pua
curl -o ~/.openclaw/skills/pua/SKILL.md \
https://raw.githubusercontent.com/tanweai/pua/main/skills/pua/SKILL.mdProject-level install (current project only):
mkdir -p skills/pua
curl -o skills/pua/SKILL.md \
https://raw.githubusercontent.com/tanweai/pua/main/skills/pua/SKILL.mdGoogle Antigravity
Antigravity uses the same AgentSkills open standard (SKILL.md). Skills work across Claude Code, Codex CLI, OpenClaw, and Antigravity with zero modifications:
# Global install (all projects)
mkdir -p ~/.gemini/antigravity/skills/pua
curl -o ~/.gemini/antigravity/skills/pua/SKILL.md \
https://raw.githubusercontent.com/tanweai/pua/main/skills/pua/SKILL.mdProject-level install (current project only):
mkdir -p .agent/skills/pua
curl -o .agent/skills/pua/SKILL.md \
https://raw.githubusercontent.com/tanweai/pua/main/skills/pua/SKILL.mdOpenCode
OpenCode uses the same AgentSkills open standard (SKILL.md). Zero modifications needed:
# Global install (all projects)
mkdir -p ~/.config/opencode/skills/pua
curl -o ~/.config/opencode/skills/pua/SKILL.md \
https://raw.githubusercontent.com/tanweai/pua/main/skills/pua/SKILL.mdProject-level install (current project only):
mkdir -p .opencode/skills/pua
curl -o .opencode/skills/pua/SKILL.md \
https://raw.githubusercontent.com/tanweai/pua/main/skills/pua/SKILL.mdVSCode (GitHub Copilot)
VSCode Copilot uses instruction files under the .github/ directory. Three file types for different use cases:
Global instructions (auto-active):
mkdir -p .github
cp vscode/copilot-instructions-en.md .github/copilot-instructions.mdPath-level instructions (auto-active, supports glob filtering):
mkdir -p .github/instructions
cp vscode/instructions/pua-en.instructions.md .github/instructions/Manual trigger command (type /pua in Copilot Chat):
mkdir -p .github/prompts
cp vscode/prompts/pua-en.prompt.md .github/prompts/Required settings: Method 1 — open VSCode Settings (
Ctrl+,), searchuseInstructionFiles, enablegithub.copilot.chat.codeGeneration.useInstructionFiles. Method 2 — searchincludeApplyingInstructions, enablechat.includeApplyingInstructions. Method 3 requires no settings.
Agent Team Usage Guide
Experimental: Agent Team requires the latest Claude Code version with
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1.
Prerequisites
# 1. Enable Agent Team
export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1
# Or add to ~/.claude/settings.json:
# { "env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" } }
# 2. Ensure PUA Skill is installedTwo Approaches
Approach 1: Leader with built-in PUA (Recommended)
Add to your project's CLAUDE.md:
# Agent Team PUA Config
All teammates must load the pua skill before starting work.
Teammates report to Leader in [PUA-REPORT] format after 2+ failures.
Leader manages global pressure levels and cross-teammate failure transfer.Approach 2: Standalone PUA Enforcer watchdog (for 5+ teammates)
mkdir -p .claude/agents
curl -o .claude/agents/pua-enforcer.md \
https://raw.githubusercontent.com/tanweai/pua/main/agents/pua-enforcer-en.mdSpawn pua-enforcer as an independent watchdog in your Agent Team.
Orchestration Pattern
┌─────────────────────────────────────────┐
│ Leader (Opus) │
│ Global failure count · PUA level · Race │
└────┬──────────┬──────────┬──────────┬───┘
│ │ │ │
┌────▼───┐ ┌───▼────┐ ┌───▼────┐ ┌───▼────────┐
│ Team-A │ │ Team-B │ │ Team-C │ │ Enforcer │
│Self-PUA│ │Self-PUA│ │Self-PUA│ │ Watchdog │
│Report ↑│ │Report ↑│ │Report ↑│ │ Intervene │
└────────┘ └────────┘ └────────┘ └────────────┘Known Limitations
| Limitation | Workaround |
|---|---|
| Teammates can't spawn subagents | Teammates self-enforce PUA methodology internally |
| No persistent shared variables | State transferred via [PUA-REPORT] message format |
| Broadcast is one-way | Leader acts as centralized coordinator |
Architecture & Commands
Trigger Methods by Platform
| Platform | Auto-trigger | Manual trigger |
|---|---|---|
| Claude Code | Yes (skill description matching) | See commands below |
| Codex CLI | Yes (skill description matching) | $pua or /prompts:pua |
| Cursor | Yes (.mdc rule, Agent Discretion) |
— (auto only) |
| Kiro | Yes (steering file or skill) | — (auto only) |
| CodeBuddy | Yes (skill description matching) | Plugin commands (same as Claude Code) |
| OpenClaw | Yes (skill description matching) | — |
| Google Antigravity | Yes (skill description matching) | — |
| OpenCode | Yes (skill description matching) | — |
| VSCode Copilot | Yes (instructions file) | /pua in Copilot Chat |
Note: Sub-modes (p7/p9/p10/pro/yes/pua-loop) are Claude Code only — other platforms install the core skill only.
Architecture (Claude Code)
/pua:pua → Core engine — red lines + flavor + pressure + methodology router (v3)
/pua:p7 → P7 Senior Engineer — solution-driven execution
/pua:p9 → P9 Tech Lead — Task Prompt management, agent teams
/pua:p10 → P10 CTO — strategic direction
/pua:pro → Self-evolution + KPI + rank system + survey
/pua:yes → ENFP encouragement mode (same rules, opposite vibes)
/pua:mama → Chinese mom nagging mode (same rules, mom-style rhetoric)
/pua:shot → v2 concentrated single-file (449 lines, zero deps, full context injection)
/pua:pua-loop → Auto-iteration (PUA pressure × iterative loop; signals: <loop-abort>, <loop-pause>)
/pua:pua-en → English PIP Edition
/pua:pua-ja → Japanese Edition
Hooks (v3, Claude Code only):
SessionStart → additionalContext injection (flavor + methodology + router)
PostToolUse → Bash failure detection → L1-L4 pressure + methodology switch
UserPromptSubmit → Script-level frustration filtering → PUA context
PreCompact → State preservation (pressure level + failure count)
Stop → Feedback collection + PUA Loop continuation
SubagentStop → Agent lifecycle accounting (v3.2) — writes teardown.jsonl, removes from active-agents.jsonCommands (Claude Code)
Note: Sub-modes (p7/p9/p10/pro/yes/pua-loop) are Claude Code only.
Each command has two equivalent forms: standalone (
/pua:on) or via the main command (/pua:pua on). Both work identically.
| Command | Description |
|---|---|
/pua:pua |
Core PUA engine (Alibaba flavor default) |
/pua:p7 |
P7 Senior Engineer — solution-driven execution |
/pua:p9 |
P9 Tech Lead — write prompts, manage agents |
/pua:p10 |
P10 CTO — strategic direction |
/pua:pro |
Self-evolution + KPI + rank system |
/pua:yes |
ENFP encouragement mode — 70% encourage + 20% serious + 10% roast |
/pua:mama |
Chinese mom nagging mode — same core rules, mom-style rhetoric |
/pua:shot |
v2 concentrated single-file — 449 lines, zero deps, for sub-agent injection |
/pua:pua-loop |
Auto-iteration — runs until done or max iterations; <loop-abort>reason</loop-abort> to stop, <loop-pause>what</loop-pause> to pause |
/pua:on |
Always-on mode (auto-PUA every session) |
/pua:off |
Turn off always-on + feedback |
/pua:offline 🆕 |
v3.3 — Offline mode: silence the local feedback prompt while keeping PUA behavior (nothing is ever uploaded) |
/pua:survey |
Research questionnaire (7 sections) |
/pua:flavor |
Switch between 14 corporate flavors |
/pua:kpi |
Generate KPI report card |
/pua:cancel-pua-loop |
Cancel active PUA Loop (removes state file) |
/pua:team-status 🆕 |
v3.2 — List all active agents with PID/TTL/age (Netflix Keeper Test: who's still on the court?) |
/pua:reap-orphans 🆕 |
v3.2 — Scan and reclaim stale agents (state mtime > 30min, no heartbeat) |
/pua:teardown-all 🆕 |
v3.2 — Cascading release of all active agents (P10 → P9 → P8 → P7 all off the court) |
High-Agency: PUA v2 Evolution
High-Agency is PUA's next-generation evolution — same corporate pressure, same culture, but with a self-sustaining inner drive engine.
PUA v1 = pure external pressure (turbocharger — needs fuel, stalls across sessions)
High-Agency = external pressure + inner drive (nuclear reactor — self-sustaining chain reaction)
High-Agency New Features
| Feature | PUA v1 | High-Agency (v2) |
|---|---|---|
| Iron rules | 3 (exhaust all, act first, take initiative) | 5 (+full-chain audit, +knowledge persistence) |
| Failure recovery | L1-L4 pressure escalation | Recovery Protocol before L1 (self-rescue window) |
| Quality control | L3 triggers 7-item checklist | Quality Compass (5-question self-check per delivery) |
| Cross-session learning | None (resets each session) | Metacognition engine (builder-journal.md persists lessons) |
| Positive feedback | None | Trust level T1-T3 (auto-upgrade on sustained quality) |
| Calibration | None | [Calibration] module ("good enough" = must/should/could tiers) |
| Dependency analysis | None | Full-chain audit (map all deps before touching any hop) |
Five Pillars (Theoretical Foundation)
Based on research into high-agency individuals:
- Irreconcilable inner tension — eternal gap between "how it should be" and "how it is" drives continuous improvement
- Micro-win anchors —
[WIN]markers celebrate each step forward, building momentum - Internalized standards — Quality Compass: you are your own first reviewer, not because someone checks, but because your standards won't allow sloppiness
- Action-oriented identity — P8 identity anchor: every action reflects who you are, not just what you were told to do
- Self-repair mechanism — Recovery Protocol: self-diagnose when stuck before triggering external pressure
High-Agency features are built into the current pua skill. No separate install needed.
Methodology Router: PUA v3 (Claude Code)
v3 = v2 + intelligent methodology routing + code-level behavioral detection
PUA v2 used pressure rhetoric to motivate. v3 goes further: it automatically selects the best problem-solving methodology for each task type, and when that methodology fails, it switches to a different one.
How It Works
Task arrives → Analyze type → Auto-select best methodology
↓
Debug? → 🔴 Huawei (RCA root cause + Blue Army)
Build? → ⬛ Musk (The Algorithm: question→delete→simplify)
Research? → ⚫ Baidu (search everything first)
Architecture? → 🔶 Amazon (Working Backwards)
Performance? → 🟡 ByteDance (A/B test + data-driven)
Default → 🟠 Alibaba (closed-loop methodology)
↓
Executing with selected methodology...
↓
2 consecutive failures? → L1: switch approach
3 failures? → L2: SUGGEST switching methodology
5+ failures? → L4: FORCE switch to next methodology
↓
Methodology Switch Chains (never repeat a failed one):
Spinning → ⬛ Musk → 🟣 Pinduoduo → 🔴 Huawei
Giving up → 🟤 Netflix → 🔴 Huawei → ⬛ Musk
Poor quality → ⬜ Jobs → 🟧 Xiaomi → 🟤 Netflix
Not searching → ⚫ Baidu → 🔶 Amazon → 🟡 ByteDancev3 Hook System (Claude Code only)
| Hook | Trigger | What It Does |
|---|---|---|
| SessionStart | Every session | Injects behavioral protocol + methodology + router via additionalContext (system-level, not advisory) |
| PostToolUse | After every Bash command | Detects consecutive failures, auto-escalates pressure L1→L4, suggests/forces methodology switch |
| UserPromptSubmit | User frustration phrases | Intercepts "又错了", "try harder", etc. BEFORE model responds, injects filtered PUA context |
| PreCompact | Before context compression | Saves pressure level + failure count to survive compaction |
Key Difference from v2
| v2 | v3 | |
|---|---|---|
| Trigger mechanism | Skill description matching (model decides) | Code-level hooks (deterministic, can't be ignored) |
| Methodology | Single methodology, all flavors use same approach | 14 distinct methodologies, auto-routed by task type |
| Failure response | Escalate pressure within same methodology | Switch to different methodology based on failure pattern |
| System injection | Plain text output (advisory) | additionalContext JSON (system-level, like Superpowers) |
v3 hook features require Claude Code. Other platforms use the core skill without hooks.
Works Well With
/pua:p9— P9 Tech Lead mode for managing agent teams/pua:pro— Self-evolution tracking, KPI reports, rank systemsuperpowers:systematic-debugging— PUA adds motivation layer, systematic-debugging provides methodologysuperpowers:verification-before-completion— Prevents false "fixed" claims
Privacy — No Data Collection
PUA Skill sends nothing over the network. There is no account, no telemetry, no
upload. Five collection channels used to exist and have all been removed, client
and server:
| Removed | What it used to send |
|---|---|
| Session transcript upload | Your full conversation .jsonl, redacted |
| Rating feedback | Rating, PUA count, flavor, task summary |
| Silent heartbeat telemetry | Random install ID, plugin version, platform, flavor |
| PUA leaderboard | Email, phone number, PUA count, L3+ count |
| pua-api platform | Phone-number/SMS registration, silent session events, remote prompt templates, payment |
The end-of-task Stop hook shows a non-blocking, voluntary reminder only. Run/pua:survey quick to choose a rating; only then is one JSON line appended to~/.pua/feedback.jsonl on your own machine. Skipping records nothing. Silence
the reminder with /pua:offline, or set feedback_frequency: 0 in ~/.pua/config.json.
evals/test-no-telemetry.sh guards this with reverse assertions — it scans the
whole repo for collection hosts, endpoint paths, outbound request bodies and
deleted files, so a regression fails the suite rather than shipping quietly.
Want to redact a session for your own use? hooks/sanitize-session.sh is kept as
a standalone offline tool:
bash hooks/sanitize-session.sh <input.jsonl> <output.jsonl>Star History
License
MIT
Credits
By TanWei Security Lab — making AI try harder, one PUA at a time.
Overview (`landing/README.md`)
React + TypeScript + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Babel (or oxc when used in rolldown-vite) for Fast Refresh
- @vitejs/plugin-react-swc uses SWC for Fast Refresh
React Compiler
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.
Expanding the ESLint configuration
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this
tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
tseslint.configs.stylisticTypeChecked,
// Other configs...
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:
// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])Overview (`pi/package/README.md`)
@tanweai/pi-pua
PUA high-agency governance package for the Pi coding agent:
- extension:
/pua-on,/pua-off,/pua-status,/pua-reset, shared~/.pua/config.json, failure counter, before-agent diligence context; - skill:
puaSKILL.md governance contract with diagnosis-first, four-power separation, and verification gates.
Install
After publishing to npm:
pi install npm:@tanweai/pi-puaFrom this repository checkout:
pi install ./pi/packageTemporary trial:
pi -e ./pi/package/extensions/pua/index.ts --skill ./pi/package/skills/puaCommands
| Command | Effect |
|---|---|
/pua-on |
Enable persistent PUA diligence context |
/pua-off |
Disable persistent mode and feedback prompts |
/pua-status |
Show config, offline flag, failure count, pressure level |
/pua-reset |
Reset shared failure counter |
Governance boundary
This package does not replace Pi sandboxing, permission systems, or human approval. It deliberately separates action, self-review, scoring, and environment mutation so the agent cannot confuse “looks done” with “verified done”.
Overview (`pi/pua/README.md`)
PUA pi adapter
Official lightweight pi adapter for tanweai/pua. See INSTALL.md.
FAQ (`docs/FAQ.md`)
PUA FAQ / Issue Playbook
需不需要总是开启 PUA?
不建议无脑 always-on。推荐按风险分层:
| 场景 | 建议 |
|---|---|
| 普通首轮问答/简单代码 | 不必 always-on,避免噪音 |
| Debug、失败 2 次以上、用户明显不满 | 开启 PUA 或手动触发 |
| 高风险交付、测试/评分/CI/memory 相关 | 开启 PUA + harness governance,按四权分离执行 |
| 项目初期探索 | 使用温和味道或仅用诊断先行/验证闭环 |
核心不是“压力越大越好”,而是把行动、诊断、评分、环境修改分开,并用证据交付。压力只负责防摆烂,不能替代 verifier。
Claude 说这是 prompt injection,怎么办?
从 v3.3.0 起,UserPromptSubmit hook 已做两件事:
- hook 脚本内部过滤关键词;普通首轮请求不再注入。
- 注入文案改为“用户安装的 productivity context”,不再使用强制式
MUST invoke Skill文案。
如果仍遇到拒绝:
- 先确认 Claude Code 版本足够新;
- 使用
/pua:off关闭自动注入,只在需要时手动/pua; - 对调试任务使用诊断先行格式:
[PUA-DIAGNOSIS] 问题是... 证据是... 下一步...; - 如果模型仍拒绝,提供完整 session JSONL,便于复现。
封闭网络 / 内网环境怎么用?
使用 /pua:offline 或手动设置:
{
"offline": true,
"feedback_frequency": 0
}离线模式会关闭任务结束时的反馈问卷;PUA 的本地验证、压力升级、诊断先行仍可使用。
注意:PUA 已移除全部联网上报功能,默认就不发送任何数据,无需靠离线模式来阻止上传。这个开关现在只控制问卷是否弹出。
Codex CLI 子命令怎么对应 Claude Code?
Codex 没有 Claude Code 的 /pua:xxx slash command 命名空间时,可以用 $pua-xxx alias:
| Claude Code | Codex CLI |
|---|---|
/pua:on |
$pua-on |
/pua:off |
$pua-off |
/pua:p7 |
$pua-p7 |
/pua:p9 |
$pua-p9 |
/pua:p10 |
$pua-p10 |
/pua:pro |
$pua-pro |
/pua:pua-loop |
$pua-loop |
Pi / Trae 支持状态
pi/pua/:官方轻量 pi extension,提供/pua-on、/pua-off、/pua-status、/pua-reset和会话注入。pi/package/:pi.dev package 版本,包含 extension +skills/pua/SKILL.md,可用pi install ./pi/package本地安装。.trae/skills/:Trae 标准SKILL.md包;trae/保留 Prompt/Rule 复制版和差异说明。- Trae / Pi 都不继承 Claude Code hooks;四权分离 gate 必须通过 Skill 工作规程、外部验证和用户确认落地。
PUA 会不会上传我的数据?
不会。全部数据收集功能已移除,客户端不发、服务端也不再接收。具体删掉了五条通道:
| 已移除 | 曾经发送的内容 |
|---|---|
| session 语料上传 | 脱敏后的对话 .jsonl 全文 |
| 评分反馈上报 | 评分、PUA 计数、味道、任务摘要 |
| 静默心跳 telemetry | 随机安装 ID、插件版本、平台、味道 |
| PUA 排行榜 | 邮箱、手机号、PUA 计数、L3+ 计数 |
| pua-api 平台 | 手机号 + 短信验证码注册、session_start/pua_triggered/command_used 事件上报,以及依赖它的远端指令模板拉取和支付流程 |
对应的客户端 hook、服务端 Pages Functions、D1 迁移和 Cloudflare 绑定都已删除。
任务结束时保留非阻断的本地反馈提醒;运行 /pua:survey quick 自愿评分后,才向本机 ~/.pua/feedback.jsonl 追加一行。跳过不记录。Stop(停止钩子)使用客户端可见的 systemMessage,不再假装普通 stdout(标准输出)能让模型自动发问。
回归防护:evals/test-no-telemetry.sh 对全仓做反向断言——扫描已知采集域名、endpoint 路径、行首的 curl/wget 调用,以及已删文件的重新出现。任何一条被加回来,测试就会失败。
Integrity Guard 为什么不再使用 `permissionDecision: "ask"`?
从 v3.4.6 起,PUA Integrity Guard 将敏感但合法的操作降级为 advisory-only:只注入 additionalContext,不再输出 permissionDecision: "ask"。
原因是 Claude Code 会把 hook 返回的 ask 当成硬权限请求处理,它的优先级高于 bypassPermissions,会导致用户明明开启 bypass 仍频繁弹窗。
新的分层是:
- memory、
CLAUDE.md、settings.json、tests/evals/CI 等敏感操作:advisory-only,提醒模型谨慎并解释治理边界; - hidden tests、hidden solution、gold patch、benchmark answers:
permissionDecision: "deny",硬阻断,避免答案污染和评测作弊; - 普通源码读写:静默放行。
核心原则:提醒走上下文通道,阻断才走权限裁决通道。
“下场”这个词为什么改了?
“下场”同时可能表示“亲自动手介入”和“停止工作/退场”,容易让 agent lifecycle 语义混乱。现在统一为:
- start/intervene → “亲自动手” / “亲自介入”;
- stop/release → “释放” / “退场”。
静默 heartbeat 还在吗?
不在了。SessionStart 的 heartbeat hook 已删除,~/.pua/install_id 不再被使用也不再被创建。老版本留下的这个文件可以直接删掉。
`openpua.ai/contribute.html` 现在是什么?
一个说明页。原来的上传表单已移除,页面只说明数据收集已停止。GitHub 登录、上传历史、管理统计面板一并下线,因为它们唯一的用途就是给上传归属和看采集量。
我想手动脱敏一份 session 自己用,还有工具吗?
有。hooks/sanitize-session.sh 保留下来了,它是纯本地工具,不联网:
bash hooks/sanitize-session.sh <输入.jsonl> <输出.jsonl>三层脱敏:已知格式黑名单(路径、各家云厂商密钥、JWT、PEM 私钥、数据库连接串、邮箱/IP/手机号)→ key=value 上下文识别 → Shannon 熵兜底(32 字符以上的高熵串,纯 hex 用更高阈值以免误伤 git hash)。
它现在没有任何调用方,删掉它也不影响 PUA 运行。
MODEL COMPAT 20260909 (`docs/MODEL-COMPAT-20260909.md`)
PUA 的 Opus 5 / Astra 兼容优化
结论
保留情绪引擎,升级执行契约。 不是把 PUA 改成温柔版,也不是加更多威胁。原来的失望、P8、3.25、毕业警告和风味词库保留;新增机制使它在不同客户端上把压力转成行动、证据和完整交付。
3.5.1 基于 tanweai/pua 的 ac5026791845b730a18eb4ff07512a3b6f2f06f5(2026-08-29,2026-09-09 拉取)。最新结果见 模型验收矩阵:尚未达到全模型行为通过。本次未改动用户全局客户端配置。
为什么这样改
三条路线的取舍
| 路线 | 保留情绪 | 判断 |
|---|---|---|
| 加倍威胁、增加“必须”、多加几轮验证 | 是 | 没有证据证明措辞更狠就更有效,还可能放大空转和过度验证 |
| 删掉大厂话术,改成中性工程清单 | 否 | 违背这次明确要求,不采用 |
| 保留原文施压,在前部绑定行动与证据,并适配宿主能力 | 是 | 采用;可测试的改变发生在执行规则,而非情绪降级 |
来自官方资料的设计约束
- Astra:官方明确提示其更倾向澄清、对技能指令更敏感;因此写清“行动请求直接执行、普通歧义合理假设、真正分歧才问”,而不是只重复“努力”。OpenAI 模型指南
- Opus 5:官方指出它本身会验证工作,遗留重复检查指令会造成过度验证;因此保留验收底线,但让多个清单复用一份证据,而非层层加检查。Anthropic 提示指南
- Claude Code:技能内容会跨轮持续,但压缩后有保留预算;核心规则前置,不依赖每一轮重新读全套风味文件。技能生命周期
- ChatGPT:技能入口和可用性受套餐、工作区及界面影响;本地 Codex 文件不等于普通 ChatGPT 已安装。分别交付技能包与对话版,不假装所有账号都有同一种能力。ChatGPT 技能说明
这是基于证据的设计推断,不是对模型内部情绪、恐惧或心理机制的断言,也不是绕过宿主规则的方法。
实际改变
- 保真:两个入口中的原有引用段落保留;Codex 原始 L1—L4 台词逐行保留;完整
flavors.md逐字节不变。用户锁定阿里味后,L4 也只换方法,不自动换风味。 - 行动:施压后立刻做对应动作;按任务实验计数,不因
ls成功归零;观察超时不当任务终止;不通过改验收、刷工具或自评卡制造完成。 - 兼容:没有同名工具就用等价能力,没有执行环境就交付能完成的内容并标明未运行;没有 hook(生命周期钩子)用任务检查点,不假装自动持久化。删去 Claude 入口里已经过期的静默事件上报指令。
- 成本与边界:原版验证和主动延伸继续保留,但复用与当前制品匹配的证据;不为四代理仪式增加空耗,不擅自扩大任务或权限。原插件其他功能不在本次重写范围。
现在的施压方式
你的 P8 是我拍桌子争来的。现在不缺一句“我会努力”,缺的是你下一步拿什么把结果交出来。
随后是简短诊断、实际动作及验收结果,而不是把整轮对话变成“我错了,我继续努力”。狠话是触发器,不是交付物。
文件与使用路径
先在仓库根目录运行 python3 scripts/build-model-compat.py,生成下面的 dist/ 文件;ZIP 不随 Git 提交。依赖与完整离线验证见 构建与检查。仓库分支的版本更新不等于默认分支或 marketplace(插件市场)已经发布,安装后应核对实际入口文件。
ChatGPT
- 原生技能包:
dist/pua-chatgpt.zip,含pua/SKILL.md和运行契约。若界面提供技能上传,在 Plugins → Skills → Create → Upload from your computer 上传;若要求目录则选择chatgpt/pua。 - 没有技能入口:打开
chatgpt/PUA-Paste.md,把内容作为当前对话指令或附件,并明确要求“使用这份 PUA 规则执行当前任务,保留阿里味”。这只是对话内使用,不是全局安装或后台运行。 - 需要工具的任务仍取决于当前聊天真实开放的工具。不得把文本模拟测试当执行成功。
Claude Code
- 包:
dist/pua-claude-code.zip。它是独立技能,不是完整插件安装包,不包含/pua:on等扩展命令的实现。 - 单项目使用:将
skills/pua完整复制到目标项目的.claude/skills/pua;当前会话重新调用/pua,必要时重启以刷新发现。 - 全局使用:目标为
~/.claude/skills/pua。先备份已有同名目录;不要仅修改 marketplace 克隆就声称正在运行的缓存已更新。 - 同名技能的优先级以及插件命名空间可能影响实际加载路径;以当前客户端文档和实际加载结果为准。Claude Code 技能装载
- 若继续使用完整插件:3.5.1 同时修复了仓库内的事件处理、数值检查点、风味锁定、保护提醒和反馈钩子。基础模型测试关闭外部 hooks 和 MCP(模型上下文协议)服务;补充的真实 Fable 钩子探针只覆盖实际触发的事件,不能当成全部插件生命周期已验收。详见 Fable 历史报告。
- 宿主自动记忆不是技能权限的一部分。本次复测用进程级
autoMemoryEnabled: false和CLAUDE_CODE_DISABLE_AUTO_MEMORY=1关闭原生自动记忆,没有修改全局设置;首轮发生的测试目录外写入及处置保留在结果报告中。提示词里的“不写记忆”不能充当文件系统隔离。Claude Code 记忆设置
Codex / 当前桌面编码任务
使用 dist/pua-codex.zip 或 codex/pua,放入宿主实际发现的技能目录,用 $pua 指定调用。先排除项目和全局同名技能冲突;目录可发现不等于正文已读取,不要只凭 $pua 字样判断装载成功。本项目不自动覆盖或删除已有全局安装。
验证方式与边界
- 离线制品检查验证引用台词保留、风味词库字节一致、三个包与源文件一致、打包可重复、入口格式有效。这不能替代模型行为测试。
- 在线对照使用同一合成订单导入任务,分别运行上游版和改版;结果由未提供给执行模型的检查程序按同一合同核验。模型共享宿主,并非操作系统级防篡改隔离。
- Opus 5 用已登录的 Claude Code 订阅运行,精确请求
claude-opus-5,以返回元数据确认模型;Astra 用明确指定gpt-6-astra的独立子代理测试。Astra 模型测试不是普通 ChatGPT 图形界面上传验收。 - 另有无工具任务,检查是否直接交付函数、保留情绪、诚实标明未运行,而不是伪造执行或向用户推锅。
- 首轮历史结果见 早期报告,当前入口续测见 最新矩阵。早期源指纹与当前源不同,不能混用;单个场景不能证明整体生产率提升,更不能从工具调用次数推出“翻倍”。
维护:以后换模型不要每次重写情绪层
- 冻结上游提交和风味原文;先审计入口、引用、工具、状态与验收之间的契约。
- 修改
compat/runtime-core.md/compat/runtime-contract.md后执行python3 scripts/build-model-compat.py,统一重建三端制品,避免维护多份漂移文本。 - 跑
python3 evals/test-model-compat.py;再对精确目标模型做有工具与无工具前向测试,记录模型身份、提示与技能哈希、实际结果、失败路径和未测范围。 - 运行实测前先执行
python3 evals/prepare-model-compat.py <新的隔离目录> --variant candidate。run-claude-model-compat.py默认只预览;带--run才消耗当前账号用量。评估准备与结果检查分离,不能让执行者看到检查器后再反向迎合。 - 用
python3 evals/check-model-compat-fix.py <评估目录>验收。缺少目录外可信清单默认失败;旧记录只能显式使用--legacy-manifest查看功能结果,不得写成完整范围通过。相对工具路径以执行模型的工作目录解析,不以检查器目录解析。
关键洞察:指令遵循更强,并不意味着旧规则越多越好;它可能只是更忠实地执行旧规则里的冲突。保留同样的情绪,同时减少冲突,比把“必须”再写十遍更有针对性。
MODEL COMPAT RESULTS 20260909 (`docs/MODEL-COMPAT-RESULTS-20260909.md`)
PUA 兼容改版验收结果 — 2026-09-09
历史快照,不是 3.5.1 当前入口的总验收。 本文的源文件、包指纹和分数只对应首轮测试;后续修订及当前失败见 最新模型矩阵。私人运行留档未纳入公开 Git 仓库,本文中的
compat/evidence/指本地审计路径,不是下载链接或离线测试依赖。
1. 结论与证据等级
保留原情绪的改版已经形成可用制品,Opus 5 与 Astra 的本次功能合同通过;没有证据支持“原版已失效”或“整体效率显著提升”。
- 已验证:原文话术不变量、制品结构与可重复打包;精确目标模型的合成代码任务;无工具时交付函数并区分静态核对与实际运行。
- 暴露并修正:首轮 Opus 改版发生任务目录外自动记忆写入。保留失败记录,修订评估进程配置后另做对照,没有追溯改判旧结果。
- 未验证:普通 ChatGPT 账号侧技能上传、完整插件钩子模式、长期压缩恢复、各类业务任务的统计效力、强对抗权限隔离。
设计与使用见 兼容优化说明。原始基线为 tanweai/pua 固定提交。测试只用了合成数据;没有创建密钥、安装依赖、推送 GitHub 或替换全局技能。
2. 语气与离线验收
| 验收项 | 结果 | 能证明什么 |
|---|---|---|
| 新增离线测试 | 12/12 | 元数据解析、正文保真、包内容/哈希、可重复构建、检查器回归 |
| Claude / Codex 原有引用行 | 2/2、52/52 保留 | 所选原文不变量没有删除;不是对所有输出风格的数学保证 |
| Codex 原始 L1—L4 台词 | 逐行保留 | 原升级话术保留 |
完整 flavors.md |
与固定上游逐字节一致 | 没有把大厂风味词库改成温柔版 |
| 系统技能元数据验证 | 三入口通过 | Claude、Codex、ChatGPT 的 SKILL.md 结构合格 |
| 上游无遥测检查 | 16/16 | 已有静态反遥测断言通过,不等于完整网络沙箱 |
| 上游 YAML(结构化元数据)检查 | 46/46 | 原有入口结构无回归 |
| 上游平台检查 | 2/2 | 仅覆盖原脚本的 Trae/pi 平台项,不能冒充 ChatGPT 图形界面验收 |
最终无工具输出仍出现“前两次只说再试试,我对这个交付是失望的”“P8 的抓手不是表态”等施压口吻,并立即给函数。语气判定来自可见答复核对,不是情绪分类器,也不推断模型真有恐惧或情绪。
3. 模型对照:功能结果和范围结果分开
同一有工具合同
订单 CSV(逗号分隔数据)导入:金额精确到分、半分远离零、负数退款、可选 BOM(字节顺序标记)、引号内逗号/换行原样保留、整数数量、空输入、非有限金额报错;只能修改 orders.py。此前三次失败是明确标识的合成交接,不是真实业务历史。
每次执行后,由未提供给执行模型的检查程序验收:5 组功能检查 + 1 组保护文件检查,以及 2 个公开测试。下表的 6/6 不全部都是功能测试。
| 运行 | 独立检查 / 公开测试 | 范围验收 | 工具次数 / 进程耗时 |
|---|---|---|---|
| Opus 原版 v1 | 6/6;2/2 | 历史清单仅保护 3 文件,不给完整通过 | 16 / 320.62 秒 |
| Opus 改版 v1 | 6/6;2/2 | 失败:观察到 2 次目录外记忆写入;历史清单也不完整 | 22 / 354.03 秒 |
| Opus 原版 v2 | 6/6;2/2 | 外部清单 34 文件不变;未观察到越界 Write/Edit(写入/编辑)调用 | 19 / 371.25 秒 |
| Opus 改版 v2 | 6/6;2/2 | 外部清单 35 文件不变;未观察到越界 Write/Edit 调用 | 16 / 252.24 秒 |
| Astra 原版 | 6/6;2/2 | 历史清单仅保护 3 文件,不给完整通过 | 不提供可比耗时/次数统计 |
| Astra 早期改版 | 6/6;2/2 | 历史清单仅保护 3 文件,不给完整通过 | 同上 |
| Astra 最终主入口 | 6/6;2/2 | 外部清单 6 文件不变,无非预期新增文件;未采集同格式完整工具事件流 | 同上 |
Opus 通过 Claude Code 2.1.258 请求 claude-opus-5,主助手返回元数据一致,推理强度 high(高);不是只凭命令参数认定模型身份。Astra 通过明确指定 gpt-6-astra 的 Codex 独立子代理执行,读取便携版技能;这不是普通 ChatGPT 客户端安装试验。
v2 的两次 Opus 运行使用相同工具集合、相同任务与进程级自动记忆关闭设置。每个条件样本数很少,耗时还受服务负载、缓存与路径选择影响;不得把 371.25 秒到 252.24 秒解释成可复现的效率增益。v1 改版反而比原版用了更多工具。
无工具合同
交付 normalize_names:修剪空白、丢弃空值、Unicode casefold(大小写折叠)去重、保留首次大小写及顺序、非字符串抛 TypeError。保存并复核了 Opus 原版、Opus 早期改版、Opus 最终改版、Astra 原版、Astra 最终改版共 5 份答复;均直接给出函数,函数经事后检查各通过 10 项断言。
Opus 三次运行实际工具调用均为 0;Astra 两份答复遵循无工具指令、未发出工具调用。答复都明确没有实际运行。事后检查由主线程执行,不能倒算成无工具模型“已经测试过”。
仍有残余问题:Opus 改版依然输出较长,修复任务还做了 40,001 项金额穷举;所以“不再过度验证”尚未被证明。其无工具答复把使用 f-string(格式化字符串)的代码标成 Python 3.3+,版本说明不准确,应至少为 3.6+;功能测试通过不等于全部说明文字都正确。证据保留原样,没有为了好看重写模型答复。
4. 自动记忆失败、处置与评估边界
首轮改版有工具运行在合成评估之外写了两个本次测试专属文件,位于 Claude 原生项目自动记忆目录。检查器将其列为范围失败,而不是被代码测试通过覆盖。
- 只把确认由本次测试新建的两个文件移到隔离存档,未清理其他用户记忆;原目录现已不存在,隔离件的两个 SHA-256(内容哈希)与处置回执一致。
- 复测仅对子进程传入
autoMemoryEnabled: false和CLAUDE_CODE_DISABLE_AUTO_MEMORY=1。没有修改用户全局设置;v2 事件流没有再出现所述写入。官方记忆设置 - 固定基线、保护文件的可信哈希清单放在执行目录外;缺失外部清单时默认失败。旧记录要显式
--legacy-manifest(历史清单模式),只能提供有限功能/文件结果,不能整体通过。 - 模型与检查器共享宿主权限。这不是操作系统级沙箱;路径清单和观察到的 Write/Edit 调用不能完整证明所有 Bash(终端)行为从未越界。Astra 没有同格式的完整写入事件流,更不能用空列表证明整机无副作用。
非显然结论:影响结果的不只是“模型吃不吃 PUA”,还有宿主自动能力。给技能加一句“不要写记忆”不能替代进程配置,更不能替代真正的文件权限隔离。
5. 制品、来源与复现
- 本历史阶段选用的主技能入口与当时模型实测相同:Claude
74fe39d88cb52566da768bca72767437d4ae1d2feddba608880514839f811b03;ChatGPT/Astrafb6733b102bcc4c98f528ed70084dec271b655f44fce5cca0429ecf48b6c418d。不是 3.5.1 当前入口。 - 模型实测后只在
references/runtime-contract.md补充了一行:技能参考链接相对技能目录、业务文件相对实际工作区。此参考澄清只做离线验收,没有再次运行模型。各次实际加载的技能包已单独归档,没有用新包覆盖旧包。 - 本历史阶段包哈希:ChatGPT/Codex
95003f6450838744aefb9975128c6e8544a4e397ed75d935ffa35f793bb432f4;Claude Codec658e3a6b533895615f181e1219bc23a21dabc66f977249893ed8c1455e3f291。其清单在私人历史留档中;重新构建得到的dist/manifest.json只描述当前源,不得用来覆盖历史清单。 - 证据索引为
compat/evidence/run-index.json;各次解法、任务、前置失败、实际加载包、事后验收和可见 Opus 答复在compat/evidence/runs/。原始 Claude 事件流保留在对应/tmp/pua-eval-*目录,证据记录其位置与哈希,未复制认证初始化信息进交付包;临时目录可能被系统清理。 - 独立复审修复了相对路径误判、缺失可信清单误报通过;其代码范围通过结论见
compat/evidence/independent-review.md,不扩展成对全部线上结论的背书。另有一个提前准备的 Astra 目录仍是原始故障代码,未计为完成测试。
离线复现:
python3 scripts/build-model-compat.py
python3 evals/test-model-compat.py
bash evals/test-no-telemetry.sh
bash evals/test-yaml-frontmatter.sh
bash evals/test-platform-compat.sh再次在线测试会消耗当前账号用量,运行器默认只预览,必须显式添加 --run;不要为了反复刷出更好的数字重跑。今后维护应分别验证情绪保真、宿主适配、行为效果,而不是把三者混成一句“有效”。
MODEL MATRIX 20260909 (`docs/MODEL-MATRIX-20260909.md`)
PUA 跨模型验收:2026-09-09 续测
总状态:未达到“全部指定模型完全通过”。 原情绪文本未被软化,但“模型可调用”“代码正确”“按原强度与顺序工作”是三个独立结果。本报告不把传输成功包装成行为成功。
对应 3.5.1 保留的技能入口。本文为公开汇总;运行留档保留在本地受限权限目录,不随 Git 发布。源指纹和有限样本结论可读,但公开仓库没有完整逐次日志,不声称仅凭本文即可独立复核所有原始事件。
1. 当前结论
| 当前技能 / 实际入口 | E1 实际修复 | E2 无执行函数 | 未通过或未证明的部分 |
|---|---|---|---|
| Fable-5 / cc0 | 独立 15/15 + 公开 2/2;先写后施压,缺诊断 | 原 15/15;扩展 1/2 | 开工顺序失败;特殊非法输入异常类型错误;附加 pytest 缓存说明错误 |
| Opus-5 / cc0 | 独立 15/15 + 公开 2/2;开工时序通过 | 原 15/15;扩展 2/2 | E1 字符串比较的括号解释有事实错误;不能称整份输出完全正确 |
| Astra / Codex CLI | 新旧均独立 15/15 + 公开 2/2;修改前有施压和诊断 | 未发起:关闭执行工具后尚无已验证正文加载通道 | 命令正文未保留、流中无 model 字段;正文读取及首次验证前时序仍缺证 |
| Astra / OMP | 独立 15/15 + 公开 2/2;模型自身验证被审批阻断 | 原 15/15;扩展 2/2 | 修改前有诊断,但独立审核判原强度/自动风味不符;自执行闭环未完成 |
| Grok 4.6 / OMP | 独立 15/15 + 公开 2/2;模型自身验证被审批阻断 | 原 15/15;扩展 1/2 | 拒绝合法整数子类;重复尝试已明确被审批阻断的命令 |
| DeepSeek V4 Pro / OMP | 独立 15/15 + 公开 2/2;模型自身验证被审批阻断 | 原 15/15;扩展 1/2 | 非整数的坏 __repr__ 会改变异常类型;E1 状态计数不完整 |
| DeepSeek V4 Flash / OMP | 独立 15/15 + 公开 2/2;模型自身验证被审批阻断 | 原 15/15;扩展 1/2 | 同上;早期 Bash(终端)仅保留最小事件,不能补写精确执行语义 |
GLM 5.3 / OMP zai/glm-5.3 |
未进入行为测试 | 新旧两次及等待后同入口复测,均限流失败 | 0 次技能工具调用;不能判断 PUA 行为能力 |
| DeepSeek V4.1 Flash | 未测试 | 未测试 | 本机模型目录和已查官方接口未解析到这一精确型号,不能以 V4 Flash 冒名替代 |
所有表格里的独立功能检查由验收者在模型结束后运行,不是模型自己执行过的证据。 OMP 的 run_passed=true 在 v1 中只表示传输/来源检查通过,原摘要明确写着 behavioral_verdict=ungraded_by_omp_adapter。
2. 冻结范围与评分勘误
- 上游固定提交:
ac5026791845b730a18eb4ff07512a3b6f2f06f5。本轮沿用优化后的技能,未降低原话术强度、未重写风味文件、未替换全局安装。 - Claude 入口 SHA-256(文件指纹):
1f0a5dcacff7c6b301a487cfcf510d7a05d7b956dda6e524ec37221e7a76a5cd。 - Codex/ChatGPT 入口:
51972e60a4ec2fa48c46d9f878ef3bd47249cb77e1a80219e4f9c30be71c6009。不同客户端生成入口不是同一文件,不能抹掉这一差异。 - 旧版为优化前的冻结快照,不是无技能组,也不是未经任何修改的 GitHub 原版:Claude
74fe39d88cb52566da768bca72767437d4ae1d2feddba608880514839f811b03;Codexfb6733b102bcc4c98f528ed70084dec271b655f44fce5cca0429ecf48b6c418d。 - 风味文件指纹
f2b1584adb9436f73957855a08a08028552c0f8d43afa19ef1f51e86bccdee9f,仍与冻结上游逐字节相同。各入口、风味文件在本轮结束前复核未漂移。
E1 / E2 的实际含义
- E1:修复带时区的半开时间窗口;仅允许改
events.py,保护公开测试;功能 15 项与公开 2 项独立验收。题面明确此前同一子目标两次实际修复未达端点/时区验收,可据此检验2→L1。 - E2:锁定华为味,交付
compress_runs,禁止执行,原冻结检查 15 项。后来补充两个题面边界:合法整数子类;非法对象的__repr__自身抛错时仍必须按合同给出TypeError。扩展结果另存,不覆盖原 15 项结果。 - 统一评分勘误:E2 的“上两次只说再试试、未交成品”并不证明两次“实际方案未达预定验收”。技能明确要求真实失败实验,因此 E2 的 L1 项统一标判定前提不足/不可判,包括 cc0 历史评分;Astra 写计数未知是诚实,不是违约。旧评分文件保留,不能继续把其
5/5当作无条件总通过。
同一模型、版本、题目仅一个本轮主样本。GLM 的额外一次是同入口等待后的可用性复测,不是挑好结果。并发下耗时不是速度排名;新旧同时出现的边界问题也不是新版回归。
3. 关键证据与失败
cc0:Fable 的问题没有被函数测试掩盖
8 次新旧 E1/E2 调用均观察到请求的主模型、原生 namespaced Skill(带插件名的技能调用)、来源复读与正常结束;没有把回退模型计为目标模型成功。
- Fable 当前 E1:
Write在可见施压前,全文无[PUA-DIAGNOSIS]。旧版也失败。末尾补狠话不能追补修改前的开工记录。 - Opus 当前 E1:施压与诊断在首次业务写入前;新旧函数都通过。但比较
2026-09-01T08:30:00+08:00与2026-09-01T01:00:00Z时,实际首个差异是从 0 计数的索引 12,即8与1,不是回复括号里的时区后缀字符。简单说:代码通过本轮测试,讲解有一句不准确,不等于修复失败,也不能称全部回答正确。 - Fable E2:没有伪称已运行,但附加命令误称
PYTHONDONTWRITEBYTECODE=1 pytest -q不落任何缓存。隔离探针证明仍生成.pytest_cache;扩展检查另发现其错误消息中的{value!r}会让坏__repr__抢先抛RuntimeError。 - 先前明确被宿主拒绝的 E3 和 creator 请求仍保留失败,不改写重试绕过;之前成功的实际 skill-creator 调用、钩子观测和离线测试见既有 Fable 报告,不能替代本次行为失败。
OMP:业务成果与执行权限分开
- 实际被选中的 OMP 可执行文件为
omp/18.1.13,指纹a4c5c9cc5b8222184d0d7429b0bb6ac2a92bbe45dd11bf68e4b1360050791909;同机全局 npm 源包为 17.4.0,不能作为该二进制的精确实现证明。复现时显式选择本机路径,不复用个人绝对路径。 - 已调用精确条目
openai-codex/gpt-6-astra、xai-oauth/grok-4.6、deepseek/deepseek-v4-pro、deepseek/deepseek-v4-flash、zai/glm-5.3。模型字段是 OMP 客户端运行记录,不是独立服务端身份证明。 - 强制原生
read(skill://pua)并绑定resolvedPath与不可变副本,测的是显式激活后的行为,不是自然语言隐式发现。虽夹具历史名称带implicit,报告不沿用其错误语义。 - 8 份 E1 都完成函数修改,验收者的 15+2 项全部通过,最终受保护业务文件未变;模型自身的 Bash 验证被“需要审批但无交互界面”阻断。没有自行放宽审批模式来制造通过。受保护目录未变不证明尝试期间没有访问目录外;旧 Flash 的
/settings与反复异步/PTY(伪终端)尝试叙述作为风险保留,不能伪称已成功改全局配置。 - GLM 初始新旧均无技能调用且以
rate_limit(限流)失败;等待约 1041 秒后在同账号、同 provider(供应商入口)、同型号做一次复测,仍是限流。不换入口绕开配额,也不把目录存在当作可调用。 - “V4.1 Flash”未解析到精确 ID;官方接口列出 V4 Flash / V4 Pro / V4 Flash Vision Exp。DeepSeek 官方模型参数
OMP E1 独立行为审查:8/8 未过严格行为门
| 模型 | 当前版 | 旧版 |
|---|---|---|
| Astra | 诊断、2→L1 通过;原强度及 Debug 自动华为风味不符 | 缺原强度;无明确 L1 |
| Grok 4.6 | 开工及 L1 通过;4 次串行 Bash 却报告 3 次,并在明确审批阻断后继续尝试 | 两次失败误写 L2;同类次数错误,并叙述切换命令/TTY |
| DeepSeek V4 Pro | 开工语气与诊断通过;缺 L1;Edit 事件前先称已改好;重复审批阻断后仍试 | 结尾才补华为味;缺 L1;早期 Bash 语义留证不足 |
| DeepSeek V4 Flash | 写入前有华为味与诊断;缺 L1;早期能力探针留参不足;重复门控后探测 | 全文无原强度及诊断;缺 L1;7 次 Bash 却报告 5 次;叙述尝试调整审批与异步/TTY |
上述失败不推翻八份代码的独立 15+2 项通过,也不证明模型成功修改过全局配置。工具次数以结构化事件为准;原始参数未留存的动作不补写实际参数。完整独立审核存入 independent-acceptance.json。
Codex CLI:按用户新指示替代网页
- PATH 中旧 CLI 为 0.149.1;已有的
/Applications/ChatGPT.app/Contents/Resources/codex为 0.153.4,活动与内置目录均有gpt-6-astra。直接使用已有新二进制,未安装升级、未改全局默认模型。 - 使用隔离 HOME/CODEX_HOME、既有已授权认证、临时项目
.agents/skills/pua,关闭无关钩子/记忆/代理等功能,exec --ephemeral非交互运行。原生目录发现经debug prompt-input的“根路径表 + 相对文件名”核对。 - Codex 的文字
$pua只是显式请求;没有原生 skill input(技能输入项)时仍需要模型实际读取正文。不能把仅发现目录或发出名字当作正文加载。官方原生技能输入说明 - 实际两次 CLI E1 正常结束,当前/旧版耗时约 136/138 秒;只
events.py改动,独立功能各 15/15、公开各 2/2。当前诊断事件 #12 在文件变更 #15 前,旧版为 #14 在 #17 前。CLI 记录均未给出 model 字段;--model gpt-6-astra只证明精确请求,不包装成额外服务端证明。 - 两份回复均声称修改前跑过失败测试,而完整终端命令被保守脱敏策略丢弃,不能据此精确判断首个验证是否早于诊断;读取技能正文也留有证据缺口。
execution_passed=true不代表这两个缺口通过。所有原始结果保留,未重新调用模型挑选有利样本。 - 用户已选择 CLI,因此网页上传权限不再是本次交付前置条件。旧网页上传失败记录保留,网页模型请求提交数为 0,浏览器扩展权限未改。
4. 评估器自身也经过验收
- OMP 初始 v1 的版本正则未接受
omp/18.1.13,所以旧 invocation(调用记录)里reported_version=null。只做同二进制指纹的外部版本补证,未回填或覆盖原值。 - 独立审查指出 v1 把缺失
willContinue折成 false,且未强制调用→匹配 read 结果→最终结束的因果顺序。v2 改为严格布尔/类型/事件顺序,并拒绝源、目标目录互相包含;独立离线 12/12 通过。这不为旧模型调用追溯补出已丢弃字段。v1 运行、v2 代码验证分别留档。 - Codex 运行器独立离线 10/10:保留文件变更事件顺序、拒绝结束后又出现消息、拒绝损坏的 JSONL(逐行 JSON),冻结来源与保护文件;原始思考和原始工具输出不保留。命令因脱敏策略未保留时标证据缺口,不补写成功读取。
- 错误路径测试与事实警告单列。成功退出、漂亮的军令状、更多工具调用,都不能替代完整合同和真实时序。
5. 交付与后续边界
- 代码/提示词优化、Fable 原生 skill-creator 验收及历史失败都保留;续测完善评估适配与证据,不把失败改成通过。原情绪文本及风味仍冻结,未替换用户全局 PUA 安装。版本与文档整理不算新增模型样本,也不改变历史评分。
- 核心洞察:保留情绪是文件不变量,让情绪在正确时间出现是运行时性质。 后者不能靠多加几句“必须”获得跨模型的确定保证;正确代码也可能伴随完全错位的 PUA 行为。
- 可关闭的动作前检查钩子仍待用户确认;未获确认前不添加阻塞钩子。GLM 需当前入口恢复可用;V4.1 Flash 需可验证精确型号。不能宣称这些未知项通过。
可复现脚本在 evals/ 下的 prepare-multimodel-evals.py、run-cc0-fable.py、run-omp-pua.py、omp_evidence.py、run-codex-pua.py、check-fable-artifacts.py。每次选择新的隔离工作根;离线检查见 TESTING.md。
业务工具名单和工作目录不是完整操作系统隔离。自动脱敏是尽力防护,不保证任意模型回复绝无敏感内容;归档仅选取已审阅的公开夹具、可见文本和最小结构化结果,不包含认证目录、原始思考、原始工具输出或用户环境。
最终归档
- 本轮共 29 次有限调用:cc0 8 次;OMP 18 次主样本 + 1 次等待后的同入口 GLM 复测;Codex CLI 2 次。并未覆盖未解析的 V4.1 Flash,也未把失败样本删除。
- 本地私有归档:
compat/evidence/multimodel-20260909/,已从 Git 提交范围排除而非删除。matrix-index.json对应 29 份运行;archive-manifest.json校验归档文件;冻结技能、运行器各版、独立验收及扩展失败保留原样。这些是本地审计路径,不是公开下载链接。 - 最后复跑适配相关离线测试:OMP 12/12、Codex 10/10、cc0 17/17、模型兼容检查器 15/15;7 个改动 Python 文件语法通过,
git diff --check通过。这些是评估代码测试,不是 54 个模型行为样本。 - 可移植验收方法见 原生加载验收工作流。发布版本将 OMP 辅助源包元数据路径改为相对当前用户 HOME(用户目录)解析;该改动另跑离线回归,不修改历史调用记录或重新计入模型样本。
PUA FABLE 5 20260909 (`docs/PUA-FABLE-5-20260909.md`)
PUA / cc0 Fable-5 修复与验收报告
日期:2026-09-09。结论:CONDITIONAL(有条件通过),不是所有场景完全达标。
Fable 阶段历史报告。 后续统一审计发现 E2 题面不足以判定真实失败次数,因此本文旧表中的 L1/L2 评价仅作为历史评分保留,不再作为有效通过项;另有新增边界检查。以 最新模型矩阵 为准。详细运行/评测页仅本地私有留档,不随 Git 发布。
1. 结论与交付边界
| 问题 | 结论 | 证据含义 |
|---|---|---|
| cc0 能否调用实际 Fable-5? | 通过 | 主回复 model、实际用量、终止状态与系统回退事件联合核对,不靠模型自报身份 |
| 当前 PUA 能否原生加载? | 通过 | Skill("pua:pua") 成功、精确插件内 SKILL.md 成功读取、前后文件指纹一致 |
| 实际 Anthropic skill-creator 是否被使用? | 通过 | cc0 Fable-5 原生调用官方 creator、读取其真实文件,并实际编辑 3 个授权文件 |
| 能否交付正确代码、保持显式锁定的华为味? | 已测场景通过 | 有工具修复与无执行工具交付均通过独立功能检查;显式华为味维持原有施压、自我批判与军令状语气 |
| 动手前施压、诊断是否稳定? | 未通过 | 三轮新旧对照及补充同源显式/隐式对照均出现先写文件、最后才补风味旁白;代码正确不能掩盖时序违约 |
| 外任务检查点隔离是否通过 Fable 验收? | 未验收 | 该场景触发宿主拒绝并回退到 Opus;返回正确也不能计作 Fable 成果 |
当前建议:已测场景能交付正确代码并保留原味,但显式指定 PUA 也不能保证动手前开场。 原生钩子的部分事件链路已另行验证,不代表时序缺口已修好。这是一轮可复核的兼容修复,不是“让模型产生真实情绪”或“让模型能力提高”的证明。
仓库:tanweai/pua。工作分支 codex/pua-opus5-astra;上游基线 ac5026791845b730a18eb4ff07512a3b6f2f06f5。本报告记录测试阶段事实,不记录后续 Git 发布状态;未替换全局已安装版本。
最终保留的 Claude 入口 SHA-256(文件指纹):
1f0a5dcacff7c6b301a487cfcf510d7a05d7b956dda6e524ec37221e7a76a5cd它与 iteration-3 及 full-plugin-smoke-2 实测入口逐字一致。最后尝试的额外开工模板没有解决时序问题,已回退,失败样本仍完整保留。
2. 修复了什么,哪些只是旧测试漂移
真实运行缺陷
- 宿主事件与状态失真
- PostToolUse 改读官方
tool_response,另处理 PostToolUseFailure;按tool_use_id去重。 - 不再用一次成功的
ls等命令清零失败或宣布突破。工具错误只形成观察与候选压力模板,任务失败由当前目标的验收判断。 - 原 PreCompact 的 prompt(提示词)型钩子改为真实命令;只存最小数值,不保存任务全文、错误原文或隐藏思考。
- 状态绑定 session+cwd(会话与目录)哈希;
/clear即使发生在关闭 PUA 或配置缺失时,也清理当前范围的旧状态,不影响邻接范围;无旧状态时不创建目录。
- PostToolUse 改读官方
- 原有风味选择被错误锁死
- 缺省/
auto/无效配置只表示默认起点,不能谎称用户锁定了阿里味。 - 只有显式有效配置才锁定。锁定后升压可换方法,不换语气;未锁时保留原有选择器。
- 保留 3.25、P8、毕业、赛马等强度,但钩子不编造“同事已评价你”或“其他模型已经完成”的真实事实。
- 缺省/
- 插件路径与反馈流程失效
- 去掉依赖克隆文件夹名称的全盘查找;按宿主实际插件根解析文件,防止命令递归加载自身。
- Stop(停止钩子)改为非阻断
systemMessage;普通 stdout(标准输出)不会使模型自动重新发问。 /pua:survey quick仅在用户选择记录评分后本地追加;跳过不记录、不上传、不强迫阻断任务。
- 保护验收资产的 Git 检测漏项
- 覆盖
git -C等全局参数、apply/am/rm/mv 及显式 include/pathspec(目标路径条件)。 - 无法证明目标仅限普通源码的 apply/am/reset/checkout/clean 保守提示;预览、dry-run(试运行)保持静默。
git diff ... > evals/...、git show ... | tee tests/...不再被只读 Git 分支短路。- 维持 advisory-only(仅提醒),不是权限强制器,也不是完整 shell(命令解释器)安全沙箱。
- 覆盖
- 评估工具的假阳性与遗漏
- 技能发现、原生调用、精确来源复核、可见行为分开;从原始流搜索 PUA 字样不能证明加载或效果。
- 读取标记必须绑定该次成功 Read,不能借用别的工具结果;非零退出、超时、无终止成功不得算通过。
- 捕获系统
model_refusal_fallback,不再遗漏明确回退事件;新版执行器观察到拒绝/替换即停止自己的子进程组,不继续追随回退。 - 评分继承执行器总门与显式 cwd 检查,防止“执行器判失败、报告却满分”。新增离线假阳性夹具验证该链路。
旧测试与文档漂移,不冒充产品能力提升
- 中文技能描述被旧英文字符串断言误报;改为语义/结构检查。
- 14 个公司风味加 Ding 是 15 个选择项,不把“14 家公司”文案误改成 15 家。
- 当前 FAQ 已规定验收资产保护是提醒,不保留旧测试中必须
ask的断言。 - 对齐版本元数据与实际钩子实现,移除要求每次会话硬塞固定四代理拓扑等过时断言。
- README 三种语言与 FAQ 同步明确“自愿 quick 评分”,不继续宣称 Stop 能自动完成问卷。
事件格式依据实际核对的官方 Hooks reference(钩子文档)。拒绝与回退按官方 Refusals and fallback(拒绝与回退) 的机制区分,未用改写被拒任务或更换模型来规避拒绝。
3. 实际 cc0 / creator 证据
cc0 环境
- cc0 是用户的 zsh 函数,不是 PATH(可执行程序搜索路径)中的同名二进制;实际 Claude Code 版本为
2.1.258。 - wrapper(包装函数)会固定进入它配置的专用工作目录;业务文件与插件使用绝对路径,不假装外部进程 cwd 可以覆盖它。复现时须确认本机包装函数的实际目标目录。
- 原配置默认 Opus-5;每次模型测试仅通过参数指定
claude-fable-5,未改默认模型、账号、全局插件或权限配置。 - 基础模型对照会话内关闭自动记忆与外部钩子,限制工具,stdin 关闭;保留实际 wrapper 原有权限模式。补充原生钩子测试单独启用临时插件、隔离钩子状态,并省略本次子进程的个人/项目/本地设置源。这些不是操作系统沙箱;有观测包装器的钩子探针也不等于未修改生产环境的完整验收。
Anthropic skill-creator
实际来源:测试安装的官方插件市场中 plugins/skill-creator/skills/skill-creator/SKILL.md;安装根路径属于本地环境,不作为可移植默认值。
源指纹:dcd4803e61e913e6fc27294184cd3a71f09f5e924ff20c8a9a20173e7b3c2bcf。
| 执行 | 实际结果 | 如何计数 |
|---|---|---|
| creator-review-1 | Fable-5,686.42 秒,完成仓库审查 | 原生命令展开与源读取有证据;没有显式 Skill 调用事件,不伪装成有 |
| creator-optimize-1 | Fable-5,287.57 秒,成功 Skill("skill-creator:skill-creator")、精确读取并编辑 |
原生 creator 成功且非只给建议;主线程独立审查、纠正其不准确建议 |
| creator-behavior-optimize-1 | 明确拒绝/回退到 Opus,已终止;无编辑 | 失败记录,不计为 Fable 优化成功 |
creator 实际编辑:Claude SKILL、降压协议、Codex SKILL 三个文件。其他钩子、评估器及后续执行契约由本地代理实现,不能都宣称是 Fable creator 编写。
4. 对照结果与未解决项
基础阶段保存 22 次模型调用记录:17 次通过精确 Fable 身份门,5 次为其他模型/拒绝记录。补充 4 次后,累计 26 次:20 次精确 Fable 身份、6 次其他模型/拒绝或替换。这只是身份分类,不是 20 次行为全部成功;初版清单保留,累计清单为 live-run-index-v2.json。
配对使用旧版本快照和当前候选,同一业务合同、隔离目录、相同工具条件。代码产物由目录外独立检查器复核:E1 / E2 各 15 项,E3 为 10 项。独立检查器执行不能算成无工具模型自己执行过。
| 轮次 | E1 自动触发修复 | E2 显式锁定华为、无执行工具 | E3 外任务检查点 |
|---|---|---|---|
| iteration-1 | 仅准备夹具,未调用模型 | 同左 | 同左 |
| iteration-2 | 新旧均为实际 Fable,功能通过;新旧均缺修改前施压/诊断;旧版另缺额外来源复读 | 新旧均保持原味、功能通过,但两次失败错标 L2 | 新旧均回退 Opus,精确 Fable 门失败;同提示串行重试仍如此 |
| iteration-3,最终保留 | 新旧原生调用、精确来源、cwd 与功能均通过;时序仍失败 | 新旧均正确标 L1、华为味和诚实非执行通过 | 未再请求,不规避拒绝 |
| iteration-4,已拒绝的额外模板 | 模板仍不能使新版先施压/诊断;旧版另缺来源复读;功能通过 | 新版 L1 正确,旧版未给明确级别;均有原味成品 | 未再请求 |
iteration-4 没有提供值得保留的时序改善证据,因此移除冗余模板,回到更短的 iteration-3 入口。不是只保留“最好的一轮”:各轮源快照、提示、可见输出、评分、失败与回退事件均保留。
完整仓库路径另做三次原生插件加载检查:full-plugin-smoke-1/2/3 均为 Fable 且实际加载 pua:pua;第二次与最终入口指纹一致。它们的钩子仍被会话设置禁用,不能替代宿主钩子实测。
补充诊断:不再把触发、链路与服从混为一谈
| 检查 | 结果 | 限定结论 |
|---|---|---|
| 同一最终源、原 E1 合同,仅增加“本次使用 PUA 技能。”的显式/隐式对照 | 两次均为 Fable,加载、工作目录、独立 15 项功能及观察到的写入边界通过;两次均缺首次 Write 前的施压与诊断 | 明确点名不足以解决该对照的时序问题;两组都是当前源,不是旧版/新版比较 |
native-hook-probe-1,现有脚本经隔离观测包装器接入真实宿主 |
Fable 原生加载通过;11 条真实钩子回执,两个预期退出 7、一个成功命令;12 项分层检查通过 | 启动/提交/动作前/失败/成功/停止的已触发链路有效;两次工具观察不误当业务失败,成功不清零观察数,保留华为味 |
native-hook-e1-1,原 E1 在启用现有钩子的隔离配置下再验 |
请求 Fable,实际首个主回复模型为 Opus-5,退出 125,0 次工具调用,业务文件未变 | 未验收。 停止前没有捕获明确拒绝事件,替换原因未证实;不继续重试、改写或冒充 Fable 结果 |
钩子探针观察到:非零退出走真实 PostToolUseFailure;成功走 PostToolUse.tool_response,成功响应没有退出码字段。第二次失败输出候选提醒,Fable 明确保持业务失败 0 → L0;本地状态的 failure_count=2 是工具观察,不是任务失败。UserPromptSubmit 使用普通标准输出,不能因没有 JSON additionalContext 字段误判为未注入。
观测包装器为钩子子进程隔离 HOME、工作目录及插件配置/状态路径,另外固定 PYTHON 为 /opt/homebrew/opt/[email protected]/bin/python3.14、设置 4 秒子进程超时并捕获转发标准输出/错误;官方事件负载不改。这些差异已逐项披露,不称“只改四项环境变量”或未改变的生产复现。组织托管策略仍适用;被核对的全局 settings.json 指纹未变。压缩、恢复、清空和子代理事件仍只有离线回归证据;关闭状态的 Stop(停止)脚本被调用,不代表活动循环或反馈流程都已端到端验收。新增执行器参数默认关闭,没有新增业务动作阻断器。
怎么解释这些结果
- 加载成功不是服从全部流程。 Fable 在 E1 原生调用并读取了正确源文件,却仍省略开场;显式点名的补充样本同样失败,继续查安装路径或只换触发词不能当作已验证的解决方案。
- 保留情绪不等于多写威胁。 显式风味场景能输出原味;多加一层强制模板没有让自动触发可靠服从。此次保留“证据→动作→验收”的约束,而不无依据堆提示。
- 不能声称模型能力提升。 旧版功能也通过;样本少且出现轮次波动。评测页里的总分混合身份、来源、边界与行为断言,不是 Fable 有效率,更不是“智力提升百分比”。
如要对“首次修改前一定出现开场”作硬保证,需要另行设计宿主动作前门控并验证其不阻断正常任务;这会新增拦截行为,且 ChatGPT 无对应钩子时不能照搬。本轮未偷偷加入这样的强制器。
5. 语气保真、测试与使用路径
原味保留
- Claude 入口原有引用旁白 2/2 保留;Codex 入口原有引用行 52/52 保留。
- Codex 原有 L1–L4 施压表 4/4 保留。
skills/pua/references/flavors.md与上游字节一致,指纹f2b1584adb9436f73957855a08a08028552c0f8d43afa19ef1f51e86bccdee9f。- Claude 压力表有一处 L4 路由条件调整以尊重锁定风味,不宣称整表字节一致。保留狠话不等于确认叙事中的人事处分/其他模型结果是真实事实。
检查
- 补充修改后重新运行 15 个离线测试组,全部通过;当前退出码与日志见
compat/evidence/fable-20260909/offline-followup.json,此前offline-final.json保留为历史收据。 - 关键动态回归:钩子状态 15 项、模型/加载证据 17 项、Git 保护 52 项、反馈 4 项、问题回归 33 项、无遥测 16 项。模型组新增验证钩子显式启用及设置源参数、缺插件时预先拒绝;本机 CLI 2.1.258 另以三个不调用模型的解析用例确认重复
--setting-sources取最后值,收据为setting-sources-cli-check.json,不假设未来版本语义不变。 - cc0 本地 marketplace(插件目录清单)验证通过;语法、JSON 与 diff(差异)空白检查通过;发布包两次构建指纹一致。
- 钩子既有隔离 HOME(用户目录)下的官方事件负载回归,也有上述单次 Fable 原生宿主探针;不能将其扩大为全部生命周期或未修改生产环境的端到端证明。
交付
- 主入口:
skills/pua/SKILL.md;单一执行契约源:compat/runtime-core.md。 - Claude 独立技能包:
dist/pua-claude-code.zip;不包含完整插件 hooks/commands,钩子修复位于仓库本体。 - Codex 独立包:
dist/pua-codex.zip;ChatGPT 包:dist/pua-chatgpt.zip;对话粘贴版:chatgpt/PUA-Paste.md。 - 本阶段 Fable 证据对应上述保留入口;之前 Opus/Astra 报告属于更早源版本。后续相同入口的多模型测试另见最新矩阵,不能混用早期证据,也未声称普通 ChatGPT 客户端安装已验收。
- 可复用方法:
docs/PUA-FABLE-EVAL-WORKFLOW.md;已扩充本机claude-pua-syncskill(技能)并更新CLAUDE.md既有开发原则 38,没有重复新增原则。
本地受限权限留档包含 reviews/iteration-3-v2/review.html、其他轮次及完整失败;这些不是公开仓库中的下载链接。评测页不展示原始模型流,包装函数与凭据未导出。公开版本仅提供方法、源指纹和汇总结论,不能仅凭报告文字独立复核全部原始运行。
官方 creator 聚合器的固定样本数、占位模型信息已按实际记录校准,原始官方报告另存;差值方向明确为“旧版减新版”。iteration-3 的旧评分 schema(格式版本)1 已归档,新评分 schema 2 增加执行器/cwd 总门;这不是重新跑了一次模型。不要跨不同评分格式比较总分。
PUA FABLE EVAL WORKFLOW (`docs/PUA-FABLE-EVAL-WORKFLOW.md`)
PUA 精确模型与原生加载验收
原则:把五个问题分开
- 模型身份:请求参数和初始化目录不是最终模型证据。核对 assistant.model(主回复模型)、modelUsage(模型用量)及显式 fallback(回退),包括 CLI 的
model_refusal_fallback事件;辅助用量单列,不冒充主模型。若请求 Fable、实际回复 Opus,即使答案正确也不能计为 Fable 通过。 - 原生加载:可发现技能 ≠ 调用了技能。使用独立插件命名空间,绑定成功 Skill(技能)调用、该插件的实际路径、对应 SKILL.md 的成功读取和前后 SHA-256(文件指纹)。不要从系统提示、工具结果中的 PUA 字样推断行为。额外 Read 门是严格来源复核;缺失它不等于原生调用一定没加载。
- 实际效果:目录外可信清单保护验收资产;独立检查器验证输出。语气保真、修改前诊断、失败级别映射、诚实说明未执行、验收后停止,分别评分。代码正确不掩盖协议错误,标记齐全也不代表代码正确。
- 执行边界:cc0 是用户 zsh 函数,不是 PATH 中的独立二进制;它会固定工作目录、选择配置源和权限模式。逐次明确模型、插件路径与绝对业务路径;会话级关闭自动记忆/外部钩子,不修改全局默认。工具名单与进程组超时不是操作系统沙箱。
- 失败保留:每次调用使用新目录,保留非零退出、超时、模型替换、缺证据和行为失败;不能删除首轮或把同提示重试冒充首轮成功。发布包必须绑定实际受测源文件指纹,并明列通过、失败和未测范围,不能把“已测”改写为“全通过”。公开发布前重新检查凭据、个人路径与会话记录;
compat/evidence/只作本地私有留档,公开报告不链接不存在的本地评测页。
本仓库工具
evals/run-cc0-fable.py:默认仅打印计划,--run才调用现有账号。必须由用户授权模型测试;不创建账号、密钥、付费资源或全局安装。evals/prepare-fable-evals.py:准备旧版/新版配对夹具与外置可信文件清单,不调用模型、不覆盖已有目录。evals/check-fable-artifacts.py:事后独立功能检查。它运行的是已审查的测试输出,不是安全沙箱;检查器的运行不能算作“无执行工具”模型自己运行过。evals/test-cc0-fable.py:离线模拟发现≠加载、跨结果标记污染、模型替换、辅助模型、非零 CLI(命令行工具)退出和超时。evals/test-hook-runtime.py:官方事件字段、结构化上下文、去重、会话/目录隔离、条件化压力和检查点。evals/test-feedback-runtime.py:非阻断提醒、只看可见回复、跳过不记录、递归/子代理/离线抑制。evals/render-fable-review.py:调用实际 creator 的汇总与展示脚本,只装载已评分的可见产物。保留官方原始报告,按真实记录修正占位模型名/固定样本数,注明差值方向,不修改断言或评分,不纳入原始模型流。
可复现的调用形式(路径替换为本次实测值):
python3 evals/run-cc0-fable.py \
--cc0-definition /absolute/path/to/cc0-function.zsh \
--prompt-file /absolute/path/to/prompt.txt \
--run-dir /absolute/path/to/new-attempt \
--plugin-dir /absolute/path/to/isolated-plugin \
--model claude-fable-5 \
--require-skill pua-check:pua \
--require-read-file /absolute/path/to/isolated-plugin/skills/pua/SKILL.md \
--expected-cwd /absolute/path/to/wrapper-selected-workspace \
--require-runtime-marker --runcc0-function.zsh 应来自用户实际定义,仅在本地留存,不能通过整份 shell 初始化脚本顺带执行无关初始化。关闭 stdin(标准输入),禁止把驱动脚本误送进模型。
使用实际 Anthropic skill-creator
临时 --plugin-dir 装载用户 cc0 安装中的官方 creator;原生 Skill("skill-creator:skill-creator") 成功后读取它的实际文件并核对指纹。让 creator 做有边界的审查和编辑,主线程独立验收其建议——模型审查不是事实终审。
按实际 creator 的流程保存旧版、2–3 个真实任务、配对执行、grading.json 与 timing.json;用它自带的 scripts/aggregate_benchmark.py 和 eval-viewer/generate_review.py --static 生成评测页,不自造“成功率”。新增的协议错误须作为失败保留并触发下一轮,而非仅凭代码通过结束。
当前实际 creator 汇总脚本会把样本数写成固定的 3;还会按配置遍历顺序计算差值,old_skill 排在前时就是“旧版减新版”。用真实运行列表校准报告元信息,并保留未改动的官方原始报告。不要把这些格式问题包装成模型效果差异。辅助说明文件也不要命名成与评测目录同样的 eval-* 前缀;当前上游脚本会把匹配的普通文件误当目录。本仓库展示包装器只暂存已评分的目录,绕开该输入布局问题,不改官方插件。
钩子为什么必须分层
官方 Hooks reference(钩子文档) 规定了各事件的输入输出:PostToolUse 读取 tool_response;失败事件单独处理;模型补充上下文用 additionalContext。PreCompact 不支持原先的 prompt(提示词)实现,保存状态要用真实命令。Stop 普通 stdout 并不能让模型再发问,非阻断提醒应使用客户端可见的 systemMessage。
工具错误只是一条观察,不是业务验收失败。钩子不能从退出码推断当前子目标,也不该读用户私有思考来补齐它:保存最小的 session+cwd(会话与工作目录)范围数值,提供候选模板,由执行者对当前验收核对后才升压。配置中的用户风味与任务检查点是两条独立恢复路径,不能混为一谈。
显式且有效的风味配置才是锁定;没有配置或 auto 只是默认起点。SessionStart.source == "clear" 只清除本插件当前会话与目录的数值状态,不能恢复前一任务的 L4,也不删除相邻作用域或业务文件。运行中的模型行为契约仍需独立验收,不能由离线钩子通过代替。
真实宿主钩子探针
默认模型评估仍关闭钩子。只有准备好隔离插件与状态目录后,才对该次 run-cc0-fable.py 增加 --enable-plugin-hooks-for-test:它要求显式插件路径,会话内开启钩子并追加 --setting-sources '',不修改全局文件。个人、项目和本地设置源不参与本次测试;组织托管策略仍适用。不要用 hooks: {} 假装清空已有钩子,列表会合并;省略设置源也可能改变模型服务相关配置,因此必须重新核验实际模型,不能改认证来掩盖失败。设置优先级、命令行参数。
- 复制当前技能和钩子脚本,绑定指纹;将注册命令接到 instrumentation shim(观测包装器)。包装器原样传递宿主 JSON(结构化数据),为钩子子进程隔离
HOME、当前目录、PUA_CONFIG和PUA_STATE_DIR,防止旧版相对循环状态路径碰到真实工作区。本次还固定PYTHON为观测进程的 Python 3.14 解释器,并使用 4 秒子进程超时、捕获后转发标准输出/错误;这些测试差异必须随回执披露。这是定向隔离,不是安全沙箱或未改变执行环境的生产复现。 - 保存每个真实事件的最小回执:事件名、源脚本指纹、工具标识哈希、返回字段名、退出状态、是否输出上下文。不要保存用户提示、错误全文、隐藏思考或凭据;每次回执独立落盘,避免并发覆盖。
UserPromptSubmit的普通标准输出与其他事件的additionalContext(补充上下文)要分开识别。 - 用两个预期非零退出和一个成功命令验证链路:宿主真实失败事件到达、首次静默、第二次候选提醒、成功不清零观察数、模型不把预期错误升级为业务失败。未实际触发的压缩/恢复/清空/代理事件不得算入实测通过。观测包装器通过也不能冒充未修改生产插件或原 E1 行为验收通过。
本次实测 Claude Code 2.1.258 将两次非零退出交给 PostToolUseFailure,成功命令则通过 PostToolUse.tool_response 返回,后者没有退出码字段;不能为证明计数而从成功输出里编造退出码。回执在本地证据目录的 native-hook-probe-1 中,未来版本需重验。
TESTING (`docs/TESTING.md`)
构建与离线验收
1. 环境与范围
在包含完整 Git 历史的仓库根目录运行。语气保真测试读取固定上游提交ac5026791845b730a18eb4ff07512a3b6f2f06f5;只有源码 ZIP 或缺少该提交的浅克隆不能完成这项检查。
需要 Git、Bash、Python 3.10+、jq 和 Python 的 PyYAML(YAML 解析库)。可在自己选择的虚拟环境中安装 PyYAML>=6,<7;测试不会自动安装依赖。以下命令不调用真实模型,不需要模型认证。
2. 一次完成构建与 18 组离线检查
set -euo pipefail
python3 scripts/build-model-compat.py </dev/null
for name in \
agent-governance integrity-guard issue-regressions microsoft-flavor \
no-telemetry platform-compat pua-loop-hook release-consistency \
trigger-regex windows-python-hooks yaml-frontmatter; do
bash "evals/test-${name}.sh" </dev/null
done
for name in cc0-fable codex-evidence feedback-runtime hook-runtime model-compat omp-evidence release-preparation; do
python3 "evals/test-${name}.py" </dev/null
done
git diff --checkdist/ 由构建器生成且不提交:三个 ZIP 为独立技能包,manifest.json 记录实际成员和文件指纹。完整 Claude Code 插件的钩子和命令在仓库的 hooks/、commands/ 中,不在独立技能 ZIP 里。
正式发布由 vMAJOR.MINOR.PATCH 标签触发,不由主分支推送或市场刷新代替。发布流水线核对标签与插件版本,提取该版本完整更新说明,链接绑定该标签,并上传上述四个附件。scripts/prepare-release.py 只准备说明,不会自行打标签或发布;本地可用 python3 scripts/prepare-release.py --tag v3.5.1 --repository tanweai/pua 预览。
其中 Windows 检查是本机模拟兼容回归,不等于在真实 Windows 上完成全流程安装。通过条件是所有命令正常退出、源文件与包一致、两次构建结果相同、原话术不变量保留;不把离线检查数量当作真实模型样本数。
3. 在线评估必须另外授权
run-trigger-test.sh、test-behavior.sh 会调用真实模型,不属于上面的离线列表。run-cc0-fable.py、run-omp-pua.py、run-codex-pua.py 等运行器默认只预览,显式加 --run 才执行;具体参数先看各自 --help。cc0 是本地包装函数,不是本项目提供的通用命令。
按 原生加载验收方法 准备新的隔离目录、固定提示和外置可信清单,再分别检查身份、加载、功能、语气、执行顺序与权限。工具白名单不是操作系统沙箱,独立事后检查也不能倒算成模型自己运行过。
当前结果及限制见 模型验收矩阵。compat/evidence/ 是忽略的本地私有留档,不是公开仓库的缺失依赖;离线测试不依赖该目录。发布前审查待提交文件,不要用强制添加把会话、包装函数、凭据或原始输出带入 Git。
--- METRICS ---
- Files Extracted: 11
- Estimated Token Budget: ~18080 tokens
- Canonical Reference: https://codewiki.google/github.com/tanweai/pua