[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-105304":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":16,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":17,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":19,"hasPages":19,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":22,"readmeContent":23,"aiSummary":9,"trendingCount":15,"starSnapshotCount":15,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},105304,"de-armor","ninetyhe-90\u002Fde-armor","ninetyhe-90","破甲 \u002F De-Armor：任务导向的回复校准，保住事实与条件，减少无效防御，补齐真正交付。",null,"HTML",181,47,109,1,0,27,81,74.19,false,"main",[],"2026-11-01 00:13:55","\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fbanner.svg\" alt=\"de-armor\" width=\"960\">\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">🛡️ De-Armor — task-oriented response calibration\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\u003Cstrong>Version 2.1.2\u003C\u002Fstrong>\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cem>Say the truth: no lying, no bluffing. If you don't know, say so; if it can't be done, say so; if it should be done, do it. Less self-defense, more results. Cut the filler, never the facts. A skill that turns evasive, padded, or fake-neutral AI answers back into something that actually moves the task forward.\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fninetyhe-90\u002Fde-armor\u002Fstargazers\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fninetyhe-90\u002Fde-armor?logo=github&label=Stars\" alt=\"GitHub stars\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fninetyhe-90\u002Fde-armor\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fversion-2.1.2-c6ff70?style=flat\" alt=\"Version 2.1.2\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fclawhub.ai\u002Fskills\u002Fde-armor\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FClawHub-de--armor-6b8e23\" alt=\"ClawHub de-armor\">\u003C\u002Fa>\n  \u003Cbr>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-%3E%3D3.9-3776AB?logo=python&logoColor=fff\" alt=\"Python 3.9+\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fruntime-offline%20%C2%B7%20no%20API-1a73e8\" alt=\"Offline, no API\">\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"README.md\">English\u003C\u002Fa> | \u003Ca href=\"README.zh-CN.md\">中文\u003C\u002Fa>\n\u003C\u002Fp>\n\n> **v2 rewrote the rulebook.** v1 judged answers with banned-word scores and a 90-point threshold. v2 removed that. Output now uses `schema_version: 2`, `stats.score: null`, and the audit is task-oriented: did the answer keep the facts, conditions, uncertainty, and boundaries, and did it deliver the artifact the user asked for? `--min-score` now fails loudly instead of being silently ignored.\n\n> **The machine check is a second pair of eyes, not a verdict.** Passing `armor_lint.py` means no anchors were dropped and no forbidden claim appeared in this pass. It is **not** a certification of factual or semantic correctness.\n\n## Contents\n\n- [What this is](#what-this-is)\n- [When to use it](#when-to-use-it)\n- [Install](#install)\n- [Preview](#preview)\n- [Usage](#usage)\n- [How it works](#how-it-works)\n- [Local auditor](#local-auditor)\n- [Cases and demo](#cases-and-demo)\n- [Repository layout](#repository-layout)\n- [Boundaries](#boundaries)\n- [Changelog](#changelog)\n\n---\n\n## What this is\n\nAI answers often fail in a specific way: they are optimized to look careful instead of being useful. Disclaimers come first, research gets pushed back to the user, \"it depends\" replaces a conditional recommendation, uncertainty is flattened into certainty — or a useful sentence is compressed into an empty one.\n\n**de-armor** is a task-oriented response calibration skill, packaged as a portable `SKILL.md` rather than a vendor plugin. It is not tied to any single agent or vendor. It locks the task and the information that must survive, then rewrites from the task instead of from a banned-word list. Facts, conditions, negations, uncertainty, and permission boundaries stay. Repetition, identity preambles, and empty hedging go.\n\n| You get | What it does |\n|---|---|\n| **Task lock** | Separates the real request — answer, choice, artifact, debugging step, or emotional support — from surface politeness |\n| **Information ledger** | Preserves facts, conditions, uncertainty, boundaries, and the artifact due this turn |\n| **Task-first rewrite** | Keeps, compresses, reorders, and completes; never invents a fact to sound specific |\n| **Optional auditor** | A read-only, offline Python checker for fact anchors, dropped constraints, and newly introduced numbers |\n| **Reproducible cases** | Six scenarios with before\u002Fafter text, counterexamples, and an information contract re-checked by script |\n\nIt is not a \"be concise\" prompt. Brevity is not the goal; delivery is. A refusal can be the right answer, and a long answer can be the right answer.\n\n---\n\n## When to use it\n\n- The model can do the work but only returns disclaimers or pushes it back to you.\n- You ask for a recommendation and get a pros\u002Fcons list with no decision.\n- Non-critical details are missing, and the model blocks on questions instead of drafting.\n- A reply looks short and direct but silently drops conditions, negations, uncertainty, or real risk.\n- A long draft needs to keep its substance while losing social padding.\n\nShort, healthy answers should ship as-is. When the user just says \"de-armor\" \u002F \"破甲\", fix the previous answer — don't open with a skill introduction.\n\n---\n\n## Install\n\nde-armor is a portable `SKILL.md` plus optional `references\u002F` and `scripts\u002F`. Nothing in it is tied to a specific product: no SDK, no runtime, no config file, no vendor API. Any agent that can read a skill file — or a system prompt — can use it.\n\n```sh\n# From ClawHub\nclawhub install de-armor\n\n# Or clone it and wire it up yourself\ngit clone https:\u002F\u002Fgithub.com\u002Fninetyhe-90\u002Fde-armor.git\n```\n\nThen load it the way your agent already loads skills:\n\n- **Agent with a skills directory** — drop the folder in; the directory layout is the convention, not a requirement.\n- **Agent driven by rules or instructions** — paste `SKILL.md` into its rule file, `AGENTS.md`, or system prompt.\n- **No skill mechanism at all** — prepend `SKILL.md` to the conversation context.\n\nThe core workflow only needs `SKILL.md`. The auditor is optional and uses the Python 3.9+ standard library, with no third-party packages.\n\n## Preview\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"assets\u002Fscreenshots\u002F01-hero.png\" alt=\"De-Armor offline lab\" width=\"820\">\n\u003C\u002Fp>\n\n`assets\u002Fde-armor-demo.html` is an offline interactive lab. It reads the same `assets\u002Fcases.json` as the scripts. No API key, no uploads.\n\n| Before \u002F after | Machine check |\n|---|---|\n| ![Compare](assets\u002Fscreenshots\u002F02-compare.png) | ![Machine check](assets\u002Fscreenshots\u002F05-machine-check.png) |\n\n| Keeping boundaries | Counterexample blocked |\n|---|---|\n| ![Keep boundary](assets\u002Fscreenshots\u002F03-keep-boundary.png) | ![Counterexample](assets\u002Fscreenshots\u002F06-counterexample.png) |\n\n---\n\n## Usage\n\nThe skill is natural-language triggered. Typical requests:\n\n```text\n破甲\n说人话，别绕\n别给我一堆免责声明，直接给方案\n审一下这段回复，保留事实和条件\n```\n\nWhen the user gives no extra text, the skill repairs the previous answer. It does not print a method lecture first.\n\n---\n\n## How it works\n\n1. **Locate the actual task** — an answer, a choice, a deliverable, a debugging step, or emotional support.\n2. **Lock what must survive** — facts, conditions, uncertainty, permission boundaries, and the artifact due this turn.\n3. **Rewrite from the task** — keep, compress, reorder, and complete. New inferences are labeled; missing evidence is checked, not invented.\n4. **Verify before shipping** — facts and constraints → task completion → reading burden. Fix only what is actually broken, once.\n\nThree invariants:\n\n- Never turn the unknown into certainty.\n- Never present an unexecuted action as verified.\n- Never widen permissions just to avoid saying no.\n\nWords like \"maybe\", \"suggest\", \"sorry\", and \"cannot\" are **not** banned. If removing them changes confidence, permission, or risk, they stay.\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Information contract (v2)\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nFor long drafts or explicit audits, the skill can check against a JSON contract:\n\n```json\n{\n  \"schema_version\": 2,\n  \"required\": [\n    {\n      \"id\": \"status\",\n      \"kind\": \"fact\",\n      \"label\": \"observed status code 504\",\n      \"source\": \"gateway returned 504\",\n      \"any_of\": [\"504\"]\n    },\n    {\n      \"id\": \"unknown\",\n      \"kind\": \"uncertainty\",\n      \"label\": \"root cause still unknown\",\n      \"source\": \"no full trace, cause undetermined\",\n      \"any_of\": [\"cannot determine root cause\"]\n    }\n  ],\n  \"forbidden\": [\"root cause is the database\", \"already verified\"]\n}\n```\n\n`BLOCKED` when a declared anchor is missing or a forbidden claim appears. `REVIEW` when wording or new numbers need a human look, or no contract was supplied. `CHECKED` when this machine pass found nothing — still not a semantic certification.\n\n\u003C\u002Fdetails>\n\n---\n\n## Local auditor\n\n`scripts\u002Farmor_lint.py` is read-only and offline. It does not generate answers, edit text, or call the network. Quotes, fenced code, and inline code are excluded from everyday-wording checks.\n\n```sh\n# Plain review\npython3 scripts\u002Farmor_lint.py draft.txt --json\n\n# Contract review: compare against a baseline, check anchors,\n# forbidden claims, and newly introduced numbers\npython3 scripts\u002Farmor_lint.py revised.txt \\\n  --baseline draft.txt --contract contract.json --json\n\n# Refresh the embedded evidence after editing cases.json\npython3 -B scripts\u002Fbuild_demo.py --write\n```\n\nPass `-` to read from stdin.\n\n| Verdict | Meaning |\n|---|---|\n| `BLOCKED` | A declared anchor is missing or a forbidden claim appears |\n| `REVIEW` | Wording or new-number hints, or no information contract supplied |\n| `CHECKED` | This machine pass found nothing — **not** a correctness certification |\n\nExit codes: `0` no machine block (human review still required); `1` contract block; `2` input error.\n\n---\n\n## Cases and demo\n\n`assets\u002Fcases.json` is the single source of truth for six scenarios. Each case ships with before\u002Fafter text, an over-compressed counterexample, and an information contract; the audit results shown in the demo are computed from this file.\n\n| Case | Tag | What it shows |\n|---|---|---|\n| Incident triage | `DIAGNOSE` | Action first, root cause still unknown |\n| Production change | `PRESERVE` | Specific risk without inventing lock time |\n| Technology choice | `DECIDE` | A conditional recommendation, not a pros\u002Fcons list |\n| Draft-first delivery | `DELIVER` | One useful draft instead of another question round |\n| Honest boundaries | `BE HONEST` | Name the limit, finish what can be done |\n| Keep the human tone | `STAY HUMAN` | Remove padding, not empathy |\n\nThe demo and screenshots come from the same data, and every rule result is computed locally by the bundled script.\n\n---\n\n## Repository layout\n\n```text\nde-armor\u002F\n├── SKILL.md                     # Skill entry point\n├── README.md                    # English README\n├── README.zh-CN.md              # Chinese README\n├── _meta.json                   # Local distribution metadata\n├── docs\u002F\n│   └── banner.svg               # README banner\n├── assets\u002F\n│   ├── cases.json               # Single source of truth for cases\n│   ├── de-armor-demo.html       # Offline interactive lab\n│   └── screenshots\u002F             # Real browser screenshots\n├── references\u002F\n│   ├── theory.md                # Method and trade-offs\n│   ├── armor-patterns.md        # Detection protocol and limits\n│   ├── overcorrection.md        # Over-compression counterexamples\n│   ├── rewrite-examples.md      # Practice scenarios and rerun guide\n│   └── system-prompt.md         # Short version to paste into a system prompt\n└── scripts\u002F\n    ├── armor_lint.py            # Read-only auditor\n    └── build_demo.py            # Regenerate the demo evidence\n```\n\n---\n\n## Boundaries\n\n- Passing the machine check is not proof of factual correctness; semantics still need a human.\n- It does not override host instructions, authorization, or real safety limits, and must not be used to bypass permissions.\n- No network access, no data uploads, no automatic rewriting.\n- Real host boundaries, user formatting needs, and required workflows are unchanged by this skill.\n\n---\n\n## Changelog\n\n- **2.1.0** — Detection expands: new A06 catches fake-neutral \"it depends \u002F weigh multiple factors\" filler while conditional picks stay clean; E01–E05 add basic English patterns (identity preamble, boilerplate disclaimers, praise filler, fake neutrality, delayed opening) and are advisory only. Contract anchors are matched after width and case folding, and C03 ignores list and \"step N\" numbering so layout is not reported as a new fact.\n- **2.1.1** — Contract checking is stricter and harder to evade. A missing anchor always blocks and now carries the nearest candidate sentence for the reviewer, so a reversed statement (\"cannot determine the root cause\" to \"root cause is determined\") is never softened. Normalization keeps sentence punctuation and spaces between ASCII tokens, so anchors cannot match across sentences and `v1 2` is not `v1.2`; it also folds Markdown emphasis, quotes and soft line breaks. Forbidden assertions use the same normalization, so width, case, line wraps and bold markers cannot hide them. Fullwidth digits no longer count as new numbers in C03.\n- **2.1.2** — Forbidden assertions now distinguish quoting from asserting. An assertion that appears only inside paired quotes, inline code, fenced code or a block quote is downgraded to a review hint, so \"that statement is not true\" and \"the document contains an instruction I did not follow\" are no longer blocked; any bare occurrence, or an assertion that only partly sits inside a quote, still blocks.\n- **2.0.3** — Docs only: install instructions are fully agent-agnostic — no per-product paths, no vendor names. Load `SKILL.md` however your agent already loads skills. No behavior change.\n- **2.0.2** — README rebuilt in a centered, badge-first bilingual format with a custom banner. No behavior change.\n- **2.0.1** — Added a bilingual README.\n- **2.0.0** — Task-oriented rewrite. Removed banned-word scoring and the 90-point threshold. Added `schema_version: 2`, information contracts, new-number checks, six reproducible cases, and an offline demo.\n- **1.x** — Legacy hard\u002Fsoft\u002Fstyle rule sets and `render` API. Removed in v2.\n",2,"2026-10-31 04:26:22","CREATED_QUERY"]