본문으로 건너뛰기
cccskills
무료GitHub에 공개한국어 소개

Assay

코드 검사나 보정된 모델 평가자로 프롬프트, 모델, 에이전트를 평가하고 반복 시험이나 A/B 실행 결과를 비교합니다. 신뢰도 지표를 제공하며 주관적 판단을 구조화된 평가 질문과 파이프라인으로 정리할 수 있습니다.

원문원문 설명 보기

Assertion-first eval framework: code asserts, calibrated judges, pass@k, A/B comparison, agentic evals, judgment-layer question systems and code-extract-decide-write pipelines. USE WHEN eval, evaluate, benchmark, judge, judge prompt, judge panel, regression test, assert, llm-rubric, calibrate judge, judged residue, pass@k, pass^k, grade output, compare prompts or models, A/B test, which model did we like, model retro, ablation, with/without, test agent, agentic eval, noul/choice/score question, glance row, judged miss, proof this, check the output, did it come out as asked, design judgment questions, question system, design a pipeline, extract values, Clairic, LLM-only baseline, judgment layer status/report/tune, is this caller ready to enforce. NOT FOR scientific-method framing (Science), property/mutation testing (Hardening), live UI verification (Interceptor), non-eval prompts (Prompting), TypeSafe apps outside LifeOS (typesafe-ai).

danielmiessler/LifeOS스타 19,636(GitHub 19,636 + cccskills 0)
연동 도구OpenAIGemini

실행 점수 미검증

설치 방법 보기

이럴 때 유용합니다

  • 출력이 요청 조건에 맞는지 확인하기
  • 같은 입력으로 프롬프트나 모델 비교하기
  • 모델 평가 결과를 사람의 라벨에 맞추기
  • 모호한 판단을 평가 질문으로 나누기
  • 에이전트의 여러 턴 동작 평가하기

한국어 소개

할 수 있는 일

Assay는 프롬프트, 모델, 에이전트에 입력을 제공하고 정해진 기준으로 출력을 점검해 평가합니다. 먼저 코드로 판정할 수 있는 조건을 확인하고, 해석이 필요한 경우에는 판단 질문이나 기준을 제시한 모델 평가자를 사용합니다. 여러 차례 시험하면 모든 시험에서 통과한 비율(pass^k)과 한 번 이상 통과한 비율(pass@k), 신뢰 구간 등의 통계값을 보고합니다. 프롬프트나 모델의 A/B 비교, 에이전트의 여러 턴 평가, 모델 평가자와 사람의 라벨 간 보정도 지원합니다. 주관적인 판단을 작은 질문으로 나누고 테스트 사례가 포함된 평가 파이프라인으로 구성할 수도 있습니다.

이럴 때 유용합니다

생성 결과가 요청에 맞는지 확인하거나, 변경 전후의 품질을 비교하거나, 수정으로 인한 회귀를 점검할 때 사용할 수 있습니다. 주관적인 평가를 재사용 가능한 기준과 질문으로 정리할 때도 유용합니다.

사용 예시

  • “이 출력이 요청 조건에 맞는지 확인해 주세요.”
  • “같은 입력으로 두 프롬프트를 비교해 주세요.”
  • “이 판단을 평가할 질문 체계를 설계해 주세요.”

주의 사항

모델 평가를 사용하려면 평가용 계정이 설정되어 있어야 할 수 있습니다. 코드 판정만 사용할 때는 키가 필요하지 않습니다. 제공된 스킬 자료가 일부이므로 뒷부분에 기재된 조건은 반영하지 않았습니다.

이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.

문서 점검

AI가 SKILL.md의 내용에서 주의가 필요한 작업과 도입 전제를 확인했습니다. 점수는 실제로 실행한 결과(실행 검증)만으로 매깁니다.

안전성전송·삭제·명령 실행 등을 명시하고 있는가
B일부 부족모델 평가와 에이전트 실행을 설명하지만, 발췌 자료에는 실행 부작용이나 확인 절차가 없습니다.
도입의 용이성필요한 도구나 API 키가 적고 적혀 있는가
B일부 부족모델 평가에 설정된 계정이 필요할 수 있지만, 발췌 자료에는 설정 절차가 없습니다.

점수에는 넣지 않았습니다. 2026년 10월 28일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.

평가가 다르다고 생각되면 재검토를 요청하기

어느 항목이 왜 다르다고 생각하는지 적어 주세요. 로그인은 필요 없습니다. SKILL.md와 대조해 평가를 다시 만들고 이곳에 반영합니다.

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

포함된 파일(130)

  • SKILL.md34.5 KB
  • Intents/Calibrate.md12.4 KB
  • Intents/Compare.md1.9 KB
  • Intents/CreateJudge.md7.2 KB
  • Intents/CreateQuestions.md15.2 KB
  • Intents/CreateSuite.md8.0 KB
  • Intents/ModelRetro.md3.0 KB
  • Intents/Proof.md13.9 KB
  • Intents/RunAgentic.md3.2 KB
  • Intents/RunEval.md2.8 KB
  • Intents/ViewResults.md1.5 KB
  • Libraries/blog-post.yaml3.6 KB
  • Libraries/code-change.yaml1.9 KB
  • Libraries/image.yaml3.4 KB
  • Libraries/video.yaml6.5 KB
  • Libraries/web-app.yaml3.5 KB
  • package.json357 B
  • References/Progressive.md5.5 KB
  • References/QuestionDesign.md40.6 KB
  • References/VisionJudgeProviders.md3.6 KB
  • Setup.md4.4 KB
  • Suites/art-quality-template.yaml3.5 KB
  • Suites/Capability/biascheck-layers.yaml2.8 KB
  • Suites/Capability/detectai-detect-intent.yaml2.6 KB
  • Suites/Capability/extractwisdom-contract.yaml2.6 KB
  • Suites/Capability/fabric-analyzebill.yaml9.5 KB
  • Suites/Capability/fabric-analyzeclaims.yaml15.8 KB
  • Suites/Capability/fabric-analyzecomments.yaml12.1 KB
  • Suites/Capability/fabric-analyzeincident.yaml12.9 KB
  • Suites/Capability/fabric-analyzelogs.yaml10.5 KB
  • Suites/Capability/fabric-analyzemalware.yaml10.5 KB
  • Suites/Capability/fabric-analyzepaper.yaml12.2 KB
  • Suites/Capability/fabric-analyzeprose.yaml9.1 KB
  • Suites/Capability/fabric-analyzerisk.yaml11.8 KB
  • Suites/Capability/fabric-analyzethreatreport.yaml10.1 KB
  • Suites/Capability/fabric-auditconsent.yaml9.5 KB
  • Suites/Capability/fabric-audittransparency.yaml10.3 KB
  • Suites/Capability/fabric-businessideas.yaml9.5 KB
  • Suites/Capability/fabric-checkagreement.yaml14.2 KB
  • Suites/Capability/fabric-checkfalsifiability.yaml12.1 KB
  • Suites/Capability/fabric-coderules.yaml16.9 KB
  • Suites/Capability/fabric-codingproject.yaml16.3 KB
  • Suites/Capability/fabric-compareandcontrast.yaml8.6 KB
  • Suites/Capability/fabric-createcommand.yaml9.2 KB
  • Suites/Capability/fabric-cybersummary.yaml8.2 KB
  • Suites/Capability/fabric-designdocument.yaml17.4 KB
  • Suites/Capability/fabric-emailheaders.yaml12.4 KB
  • Suites/Capability/fabric-ethicalframework.yaml10.2 KB
  • Suites/Capability/fabric-explaincode.yaml9.5 KB
  • Suites/Capability/fabric-explaindocs.yaml11.3 KB
  • Suites/Capability/fabric-explainterms.yaml7.5 KB
  • Suites/Capability/fabric-extractideas.yaml8.1 KB
  • Suites/Capability/fabric-extractinsights.yaml11.3 KB
  • Suites/Capability/fabric-extractinstructions.yaml13.4 KB
  • Suites/Capability/fabric-extractpatterns.yaml9.9 KB
  • Suites/Capability/fabric-extractpoc.yaml5.6 KB
  • Suites/Capability/fabric-extractpredictions.yaml10.3 KB
  • Suites/Capability/fabric-extractrecommendations.yaml9.3 KB
  • Suites/Capability/fabric-extractreferences.yaml13.1 KB
  • Suites/Capability/fabric-gitdiffsummary.yaml8.8 KB
  • Suites/Capability/fabric-goldenrules.yaml12.4 KB
  • Suites/Capability/fabric-logicalfallacies.yaml7.0 KB
  • Suites/Capability/fabric-mindvirus.yaml15.1 KB
  • Suites/Capability/fabric-networkthreatlandscape.yaml8.2 KB
  • Suites/Capability/fabric-nucleitemplate.yaml10.0 KB
  • Suites/Capability/fabric-pullrequest.yaml10.1 KB
  • Suites/Capability/fabric-reportfinding.yaml8.1 KB
  • Suites/Capability/fabric-reviewdesign.yaml11.3 KB
  • Suites/Capability/fabric-rhetoricallens.yaml12.0 KB
  • Suites/Capability/fabric-securebydesignquestions.yaml9.9 KB
  • Suites/Capability/fabric-secureprompt.yaml11.2 KB
  • Suites/Capability/fabric-semgreprule.yaml9.5 KB
  • Suites/Capability/fabric-showintro.yaml9.9 KB
  • Suites/Capability/fabric-sigmarules.yaml10.6 KB
  • Suites/Capability/fabric-silentvictims.yaml13.0 KB
  • Suites/Capability/fabric-stoiclens.yaml9.5 KB
  • Suites/Capability/fabric-summarize.yaml8.3 KB
  • Suites/Capability/fabric-summarizedebate.yaml14.4 KB
  • Suites/Capability/fabric-summarizemeeting.yaml9.4 KB
  • Suites/Capability/fabric-terraformplan.yaml15.6 KB
  • Suites/Capability/fabric-threatscenarios.yaml10.1 KB
  • Suites/Capability/fabric-ultags.yaml6.9 KB
  • Suites/Capability/fabric-wordsummary.yaml4.9 KB
  • Suites/Capability/video-subscribe-card.yaml7.4 KB
  • Suites/Capability/video-subscribe-card/.gitignore406 B
  • Suites/Capability/workflows-authoring.yaml5.6 KB
  • Suites/Fixtures/glance-tier.yaml2.1 KB
  • Suites/Regression/core-dispositions.yaml7.3 KB
  • Tools/Agentic.ts2.3 KB
  • Tools/AnthropicVision.ts4.1 KB
  • Tools/Assertions.ts12.3 KB
  • Tools/Calibrate.ts25.2 KB
  • Tools/Compare.ts5.9 KB
  • Tools/Compile.help.md11.0 KB
  • Tools/Compile.ts78.1 KB
  • Tools/CompileEstate.help.md1.6 KB
  • Tools/CompileEstate.ts8.0 KB
  • Tools/CompileMerge.ts27.6 KB
  • Tools/CompileSplit.ts13.8 KB
  • Tools/EvalRunner.ts44.9 KB
  • Tools/EvalState.ts11.9 KB
  • Tools/FailureToCase.ts3.1 KB
  • Tools/fixtures/compile/page-builder.isa.md724 B
  • Tools/fixtures/compile/split/fixture.isa.md936 B
  • Tools/fixtures/inkclip/index.html1.9 KB
  • Tools/fixtures/seek/index.html1.2 KB
  • Tools/fixtures/strike/broken/index.html2.0 KB
  • Tools/fixtures/strike/fixed/index.html3.7 KB
  • Tools/fixtures/strike/undeclared/index.html1.9 KB
  • Tools/ImageAsserts.ts12.3 KB
  • Tools/ImageEvalRunner.ts20.3 KB
  • Tools/IntentRubric.help.md6.4 KB
  • Tools/IntentRubric.ts28.5 KB
  • Tools/Judge.ts28.5 KB
  • Tools/JudgeLevel.ts4.3 KB
  • Tools/NarrationMatch.help.md8.4 KB
  • Tools/NarrationMatch.ts40.9 KB
  • Tools/OpenAIVision.ts4.0 KB
  • Tools/PairwiseCalibrate.ts17.8 KB
  • Tools/ProbeOpenAIVision.ts3.3 KB
  • Tools/Proof.help.md40.4 KB
  • Tools/Proof.ts290.3 KB
  • Tools/Stats.ts6.2 KB
  • Tools/SuiteManager.ts17.1 KB
  • Tools/Tournament.help.md1.6 KB
  • Tools/Tournament.ts36.5 KB
  • Tools/VideoEval.help.md15.3 KB
  • Tools/VideoEval.ts103.5 KB
  • Tools/VideoEvalChecks.ts41.8 KB
  • Tools/VisionJudge.ts18.1 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Assay — Assertion-First AI Evaluation

Contents: Ideal State · Intent Routing · The taxonomy · Choosing a check: tier first, then shape · Selection, acceptance, and unavailable evidence · The canonical path · Doctrine (from Anthropic; encode, don't restate) · The image lane (visual evals) · Harness integration · Judgment-layer question systems · Data & Config · Gotchas · Examples

An eval gives an AI an input, then applies assertions to its output to measure success (Anthropic's definition). A case is {id, prompt, assert:[...]}. Each assertion is either deterministic (code, free) or model-graded (a calibrated judge). Cases run multiple trials and report pass^k (every trial passes; the reliability metric and the regression gate) and pass@k (any trial passes). Proof applies the same tiers to one run's output (the film, image, page, email or document it made) against what was asked, before the principal sees it: Intents/Proof.md, with the whole system in LIFEOS/DOCUMENTATION/Assay/AssaySystem.md. CreateQuestions designs the fast tier itself: it turns a fuzzy decision into a measured judgment-layer question system (LIFEOS/DOCUMENTATION/Assay/AssaySystem.md § Judgment layer).

Sources: Demystifying evals for AI agents (2026-01), A Statistical Approach to Model Evaluations (2024-11), develop tests, the eval-awareness contamination post (2026-03), and the live claude plugin eval surface.

Freshness contract: "aligned to Anthropic's doctrine" is a live claim. When designing a new suite class or touching ## Doctrine, re-fetch the demystifying-evals post and flag where it has moved. Report divergence, never auto-adopt; an unreachable URL never blocks a run.

Ideal State

  • Every check sits at the lowest tier that can honestly answer it (code, glance, judge, human), and only code runs on a blocking path.
  • Every score ships with pass^k, SEM and a 95% CI from the trials that completed, with the requested and completed trial counts beside it; fewer completed trials than requested never claims pass^k.
  • A judged check is calibrated against the principal's labels or reads PROVISIONAL wherever it shows, and a judged suite keeps an adversarial fixture its judge must fail.
  • A produced artifact is checked by Proof against what was asked before the principal sees it, and the receipt is bound to its bytes.
  • Transport failures, malformed verdicts and missing observations are reported as unavailable evidence, never as a pass, a quality failure or an adversarial catch.
  • A fuzzy decision handed to CreateQuestions leaves as a validated question system whose accuracy was measured on held-out cases the designer never saw, with its margin over one holistic baseline question, or as a stated finding that the judgment layer does not fit and what does; a design ends at a saved shadow registry row and never moves a caller toward enforce.
  • When Assay builds the eval system for a project, the project's ISA ends current: every criterion it checks names its suite or glance question in Test Strategy, and the hand-rolled eval code, rows and stale criteria it replaced are removed in the same change.

Intent Routing

IntentTriggerFile
Proof"proof this", "check the output", "did it come out as asked", before showing any produced artifactIntents/Proof.md
RunEval"run the eval", "run suite", "evaluate this"Intents/RunEval.md
CreateSuite"new eval", "create a suite", "eval for X"Intents/CreateSuite.md
CreateJudge"write a judge", "llm-rubric", "grading criteria", "noul, choice or score", "glance question"Intents/CreateJudge.md
Calibrate"calibrate the judge", "judge agreement", "judged residue", "shrink the judges", "judged miss", "bunker miss"Intents/Calibrate.md
Compare"compare prompts", "compare models", "A/B this", "with/without", "ablation"Intents/Compare.md
ModelRetro"which model did we like", "model retro", "compare models looking back", "how did model X do historically"Intents/ModelRetro.md
RunAgentic"multi-turn eval", "agentic eval", "eval with tools", "plugin eval"Intents/RunAgentic.md
ViewResults"eval results", "how did it score", "saturation"Intents/ViewResults.md
CreateQuestions"design judgment questions for X", "turn this fuzzy call into a question system", "what should the engine ask about X", "question system for X", "design a pipeline for X", "extract fields from X", "cheapest way to do X vs an LLM"Intents/CreateQuestions.md

The Bunker CLI is maintainer-private and not in the public release; run code rows with bun test ./<path> and suite rows with bun skills/Assay/Tools/EvalRunner.ts.

FileRead when
References/Progressive.mdtiming, depth, skill coverage, the engine-then-judge escalation, and actual harness context
References/QuestionDesign.mddesigning or reviewing any judgment-layer question system: the design doctrine every CreateQuestions designer and second opinion reads in full, and the home of the engine-behaviour facts (independent questions, negation, choice and score confidence, option names, secret-shaped state)
References/VisionJudgeProviders.mdgrading images: provider selection per suite, private-image consent, capability probes, failure behavior
EvalState.mdreading this skill's own current suite scores and iteration log (machine-written by Tools/EvalState.ts; never hand-edited)
Tools/Proof.help.mdthe Proof.ts commands and flags
Tools/IntentRubric.help.mdturning an intent's Ideal State and Anti-criteria into a suite rubric
Tools/Tournament.help.mdthe Tournament.ts flags
Tools/VideoEval.help.mdevaluating a rendered video (watermark, voice, script, typography, animation): the check ids, bars, memo and VideoEval.ts flags
Suites/the skill's eval suites; eval data, never edited as prose
Libraries/the shared checks every output of a type inherits when compile builds its evals
Tools/Compile.help.mdthe Compile.ts flags
Tools/CompileEstate.help.mdcompiling every in-scope ISA (projects,recent:14d) before a Compile.ts merge pass
Setup.mdfirst-time setup: the judge accounts (Claude, OpenAI, Cloudflare), the optional config files, and a proof that needs no key

The taxonomy

eval is the parent word for every check a criterion carries. Its two branches are the assert (a tool says no: Assertions.ts, bun test, a curl probe) and the judged check (a model or Assay's judgment layer says no, bound to content derived from the ideal state). A judged check takes one of three harness shapes: a glance row (one typed question to the judgment layer over state that already exists), a rubric run from an eval suite (Judge.ts, one output scored against anchored levels), or a tournament on a pairwise row (Tournament.ts, every pair judged in both orders, then a shuffled-seed rerun). manual is not a class; it is the top of the ladder below, and every attestation the principal gives is a label for the rung beneath it. What makes a judge good is its content, derived from the ISA's articulated ideal state. The same words appear in ISAFormat § Verifier classes, lanes, and stages, TestingDoctrine, the Bunker doc, the Algorithm, and the ISA skill; change them everywhere or nowhere.

The four-tier ladder. Every check sits on one of four tiers, ordered by speed and by how much intelligence the verifier needs: code, glance, judge, human. Code is a tool that exits zero. The glance tier is one typed question to Assay's judgment layer, answered with a probability, far faster than a model judge (the sub-second figure was measured on the engine retired 2026-10-10 and not re-measured; skills/Assay/References/QuestionDesign.md). Judge is a model reading an output against anchored levels or a flipped bracket, in seconds to minutes. Human is the principal recognizing the thing on encounter. The tier is derived from the row's type and is never authored: the deterministic types give code, a glance row gives glance, eval and pairwise give judge, and manual gives human. A check sits at the lowest tier that can honestly answer it, and it drifts down the ladder as it earns labels: a human row becomes a glance row once the criterion carries labels, and a glance row becomes a code row once the question is sharp enough to be a tool. Two guards hold this in place. Only code runs on the blocking path, so no glance, eval, or pairwise row runs on the liveness lane or inside a deploy or close gate, and a judged row never gates a deterministic row of the same criterion. A gate runs no judge, but it reads recorded results: an earned judged row's latest fail keeps the criterion open at close. Every Feature also keeps at least one spanning criterion over the whole artifact at the consumer boundary, and the maintainer-side bunker test --tiers flags a Feature whose leaves are all glance rows as unspanned. The glance row contract is fixed: type glance, a tool cell of the form glance:<question-file>#<question-id>, and a JSON question file beside the ISA under Questions/. That file carries one typed question and a bounded producer command that emits the structured state to judge. The registry threshold means confidence for every question type, so a noul resolves two-sided and carries a verdict plus the confidence behind it. A row under a shadow caller reports shadow, its own status, which counts as neither a pass nor a fail and cannot close a criterion. Every verdict records the sha256 of the artifact it judged, and the call is skipped when the artifact hash, the question, the threshold, and the engine model are all unchanged since the last verdict. Labels that came from a model or from the deterministic layer put the calibration record in the proxy state, which never reads earned.

Choosing a check: tier first, then shape

Tier first. If code can answer, write the assert and stop. If reading is needed and the state already exists (a file, a rendered page, a diff, a log tail, a query result), write a glance row that asks one typed question about it. If the output is generated fresh on every trial (a prompt's answer, an agent's run), write an eval suite, because pass^k needs trials and the judgment layer cannot generate. A manual row holds taste until labels exist.

Shape second, for anything that has to be read. Every engine answer is a probability, so the probability is not what separates the shapes. The question type is, and each one becomes a different piece of code:

QuestionShapeWhat the code does with itWhere it lives here
Is this true?noulan ifllm-assert in a suite; kind: noul in a question file
Which of these? (an unordered set)choicea switchkind: choice in a question file; A/B/tie inside a tournament
How much? (an ordered ladder)scorea sort, or a thresholdanchored llm-rubric in a suite; kind: score in a question file

Critical, high, medium, low is a ladder and can be sorted. Korean, Mexican, Thai cannot, so a question over them is a choice. Ask many small questions rather than one big rubric. A rubric whose levels mix dimensions is several questions crushed into one call, the same failure as a system message packed with instructions in the hope that every one lands. Fall back to a multi-level anchored rubric or a tournament only when the property will not split.

An unearned judgment only flags; an earned confident no fails like a code check. In Judge.ts an llm-assert goes to the judgment layer as a noul and an anchored llm-rubric as a score before any model judge is paid for. A confident answer from a caller in enforce mode resolves the assert, the middle band escalates to the model judge as UNKNOWN, and an unanchored rubric never reaches the engine (it escalates and counts as residue with reason unanchored). The full escalation rule is in References/Progressive.md.

On the maintainer install a judged miss is one command (the Bunker CLI is maintainer-private and not in the public release; a public install calibrates through a suite with a judged assert and Tools/Calibrate.ts). bunker miss adds the missing question to the criterion's question file, registers it in shadow, and keeps the state as a labelled case, so the fix is one more question and a kept case rather than a longer prompt. bunker label adds a labelled case to a question that exists; bunker attest labels a manual row. Commands and flags: Intents/Calibrate.md § Tool contract, The miss loop.

Selection, acceptance, and unavailable evidence

A tournament answers which candidate is preferred under a written definition. It never proves the winner meets an absolute bar. A quality criterion carries its own asserts and rubric, or a named principal attestation when calibration is unavailable. Both definitions derive from the owning ISA; neither the word "best" nor a number supplies the standard.

Tournament.ts needs at least two distinct candidates and a completed shuffled rerun to verify; --no-rerun is diagnostic only. Identical content under different paths is not candidate diversity.

Semantic UNKNOWN stays a miss even under negation. Unavailable evidence and trial counts follow the Ideal State above.

The canonical path

ToolRole
Tools/Assertions.tsDeterministic assert engine: 12 types + not- negation. Sync, free, no model call.
Tools/Judge.tsModel-graded asserts llm-rubric (anchored 1–5 → 0–1) and llm-assert (TRUE/FALSE/UNKNOWN), plus judgeTextPairwise. Asks the judgment layer first (noul for llm-assert, score for an anchored llm-rubric). System prompts live in LIFEOS/TOOLS/lib/JudgePrompts.ts, shared with the vision judge and hashed into every calibration record. UNKNOWN is a miss; an unparseable cheap verdict gets one retry at 'high'.
Tools/Tournament.tsThe tournament: a bracket in code over an injected pairwise judge (images → VisionJudge pairwise, which runs on Gemini alone (see Gotchas); text → Judge.ts). A flipped winner is position bias and reads as a tie; a different winner on the shuffled rerun reads unstable. The result names generator and judge ids and flags a same-family pair. Exit 0 stable · 1 unstable/all tied · 2 verifier unavailable. pairwise rows dispatch here when the maintainer-side bunker test row engine or Development Test executes them.
Tools/JudgeLevel.tsjudge_model alias/id → inference level, capped at 'high' (grading never rides the top rung).
Tools/EvalRunner.tsSuite runner: trials, pass^k/pass@k + SEM/CI, calibrated-cheap judge default, regression gates on pass^k, judged-residue metric, transcripts persisted per run. Shared suite validation precedes inference. Exit 0 passed · 1 regressed · 2 verifier unavailable (no run verdict; run.json kept as history; latest.json and EvalState untouched, so the last valid result stays visible).
Tools/Stats.tsSEM, 95% CI, paired differences, clustered SEs, power analysis (pure functions).
Tools/Compare.tsPaired A/B on one suite: prompts, levels, with/without ablation. Verdict from the paired CI.
LIFEOS/ASSAY/Panel.tsThe judge panel for comparing producers (models, prompts, lanes) on the same inputs. It handles blinding, word-budget cuts, cross-vendor judges with vendor exclusion, verdict repair and retries, pairwise preferences from rankings, and the length check. The rubric comes from the caller's ISA. AssaySystem.md § Judge panel.
Tools/Calibrate.tsJudge calibration vs principal labels. EARNED has one definition, LabelStore.earnedStatus (LIFEOS/TOOLS/lib/LabelStore.ts): the principal's right/wrong labels at agreement ≥ 85% (the registry's bar) with at least the registry's label floor (default 10), and, where labels carry the true class, at least 2 labels per class at ≥ 50% agreement; Cohen's kappa is a reported diagnostic, never part of earned. A record goes STALE when any model in the judge chain, the rubric text, or the label file changes (the one rule: LIFEOS/TOOLS/lib/Calibration.ts). Labels from a model or the deterministic layer make the record proxy, which never reads earned. --append-log appends the Articulation Log block to the owning ISA; --recheck re-runs stale records (ModelSync daily, pages only on a drop); --residue reports judged residue, judged asserts with no derived_from, and judge-ready attested seeds.
Tools/PairwiseCalibrate.tsCalibrates one tournament criterion against flipped A/B/tie labels; Tournament.ts --calibration <set.yaml> reads its record.
Tools/SuiteManager.tsSuite inventory (list, show <suite> [--json]), validate [suite] (a judged suite must keep an adversarial fixture), saturation detection, capability→regression graduation.
Tools/FailureToCase.tsOne real failure → one draft case skeleton.
Tools/IntentRubric.tsA skill intent's ## Ideal State and ## Anti-criteria → a suite rubric: one llm-assert per Ideal State bullet, one not-llm-assert must-not per Anti-criteria bullet, each with `derived_from: <intent>#IS-n
Tools/Compile.tsCompiles an ISA's criteria into staged evals (code, then the judgment layer, then a judge or tournament) written to the ISA's ## Evals section; bun Compile.ts <ISA.md> [--dry-run] [--write]; bun Compile.ts merge <ISA.md> folds the proposal in (main session only). See Tools/Compile.help.md.
Tools/NarrationMatch.tsA narrated video judged shot by shot against the words spoken over it: code tier (blank frames, cross-beat repeats by dHash and asset, sentence coverage, silent shots), then every shot's rest frame plus its words to the VisionJudge panel (provisional). Exit 0 pass · 1 fail · 2 unavailable · 64 usage. See Tools/NarrationMatch.help.md.
Tools/VideoEval.tsThe video eval set: 27 checks over a DA-narrated or HyperFrames video (format, watermark, voice, script, typography, animation quantity and quality, PII), code tier first and judges only on a clean code tier, each memoized by the bytes it reads, one assay receipt bound to the video's sha256. `run --run <slug>
Tools/CompileEstate.tsRuns Compile --write on every in-scope ISA (--scope projects,recent:14d, shared with EvalCensus.ts --without-eval), skipping dirty, pending-merge and current ones; never merges. See Tools/CompileEstate.help.md.
bun run ${LIFEOS_SKILL_DIR}/Tools/EvalRunner.ts -s <suite> [-t trials] [--json]
bun run ${LIFEOS_SKILL_DIR}/Tools/Assertions.ts   # 16-case self-test
bun run ${LIFEOS_SKILL_DIR}/Tools/Stats.ts        # 6-case self-test
bun run ${LIFEOS_SKILL_DIR}/Tools/Judge.ts        # good-vs-bad discrimination (live inference)

Doctrine (from Anthropic; encode, don't restate)

  • Deterministic first; judges are debt. "Prefer deterministic graders where possible, use LLM graders where necessary." Every judged assert carries a retirement plan: calibration against principal labels, disagreements mined into deterministic asserts, and a per-suite judged residue reported every run and expected to fall. (Shrinkage doctrine: principal directive 2026-08-25.)
  • Grade outcomes, not paths. Agents find valid approaches designers did not anticipate. Transcript analysis is for quality signals only, never pass/fail.
  • Capability suites start low and graduate; regression suites target ~100% and gate on pass^k. SuiteManager tracks saturation.
  • Statistics or it didn't happen. Every score ships with SEM and a 95% CI, never a bare mean; comparisons are paired-difference only; null results check power first; clustered cases use clustered SEs.
  • Judge discipline: the judge is never the generator, one dimension per judge, anchored scales, reason before score, UNKNOWN is a miss, and a suite earns the cheap judge only on an EARNED record (thresholds in the Calibrate.ts row above; authoring rules in CreateJudge). Raw agreement alone rewards a constant judge on a skewed set, which is why each class needs its own labels at better-than-coin agreement.
  • A judged suite with no earned record is PROVISIONAL and says so everywhere. EvalRunner's report carries provisional, its age in days, and the reason; the maintainer-side bunker test prints PROVISIONAL (Nd: reason); Pulse shows an amber pill, red past 30 days; a Socrates standing question asks daily whether any judged suite runs uncalibrated. Nothing blocks, but the count stays in sight.
  • Eval integrity is adversarial (contamination post, 2026-03). Never publish suite cases as examples; identity-bound suites stay in the USER layer; assume anything published is trained on.
  • Never trust a score until you read the transcripts. Every run persists them to MEMORY/STATE/Evals-Results/<suite>/<run>/run.json.

The image lane (visual evals)

Suite-scoped rubric provider selection, private-image consent, capability probes and failure behavior follow Vision judge providers. The default rubric judge is the OpenAI + Anthropic panel (see Gotchas); any other provider requires its own current calibration. Image cases share the text runner's prerequisite contract (see Gotchas), and a skipped judgment can never count as catching an adversarial fixture.

Images are graded, never generated, by Tools/ImageEvalRunner.ts -s <suite> over the same suite roots and result shape as text. Deterministic layer (Tools/ImageAsserts.ts, magick + tesseract, local, no egress): dimensions, aspect, format, max-bytes, luminance bands (dark-ground rule), ocr-contains, and ocr-word-ratio, the mechanical garbled-text catch. Judged layer (Tools/VisionJudge.ts, the OpenAI + Anthropic panel by default; Gemini only when a suite's config entry names Google, on --public, or for pairwise): anchored vision-rubric asserts (trials apply to judged asserts only; deterministic image checks run once), a pairwise CLI for which-of-two verdicts (Gemini only; see Gotchas), and the meaning ladder (meaning-ladder asserts; VisionJudge.ts describe then ladder). The ladder's blind describer sees the image and nothing else (no article, thesis, or title); a text judge then grades the description against the case's reference: argument summary on four anchored rungs (unrelated · topic only · argument · specific claim) and never sees the image. Worked example: Art Essay Step 8 (assert gate → blind describer → meaning ladder → flipped Tournament.ts), suite art-meaning-recovery. A result records generator, describer, and judge ids and flags a same-family pair.

Identity guard: images carrying the principal's likeness are not sent to the vision judge pending explicit clearance. VisionJudge refuses /headshot/i paths without --allow-identity, suites default allow_identity: false, and deterministic asserts remain available for everything. Taste guard: pure-taste dimensions ride pairwise plus principal ratification, never absolute auto-grades.

Harness integration

  • Config-change regression: run bun LIFEOS/TOOLS/ConfigEvalOnChange.ts by hand to execute the configured dispositions suite after a behaviour-defining file changes (default core-dispositions; override via LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Assay/config.json config_change_suite).
  • ISA and Algorithm: every ISC carries an executable check as a Test Strategy row that Assay resolves at the cheapest honest tier (code assert, then the judgment layer, then a model judge, then the principal); the maintainer-side bunker test row engine executes those rows (a public install runs code rows with bun test ./<path> and suite rows with Tools/EvalRunner.ts), and Development Test and the post-deploy probes call it. A row typed eval with a suite: dispatches to EvalRunner and its pass^k verdict is the criterion's evidence; pairwise dispatches to Tournament.ts and its stable winner is the evidence; glance stays in the Bunker runner and never enters this skill's runner. A per-ISC eval row is required for behavioral, quality, and regression criteria; a separate second-look suite stays elective. Judged rows default to stage 2, so the criterion's asserts run first and a failing one gates the judge; a gated row is never dispatched and never a pass (ISAFormat v2.27.0).
  • USER layer: identity-bound suites live in LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Assay/Suites/, calibration sets in .../Calibration/, never in the public tree.

Judgment-layer question systems

The runtime is LIFEOS/ASSAY/. Status, reports and tuning need no intent; they are direct commands on Assay.ts. A readiness question ("is this caller ready to enforce?") is answered from tune and report, with balanced accuracy, label counts and each blocker by name.

CommandAnswers
bun LIFEOS/ASSAY/Assay.ts statusevery caller's mode, rows and error rate, and whether agreement is computable; exits 1 when an enforced question is under its label floor or rests on proxy ground truth
bun LIFEOS/ASSAY/Assay.ts report --caller <name> [--days N]agreement, balanced accuracy and separation per question against the caller's ground truth
bun LIFEOS/ASSAY/Assay.ts tune --caller <name> [--days N] [--step S] [--json]threshold sweep, recommended thresholds, and what blocks enforce
bun LIFEOS/ASSAY/Assay.ts alertsany caller whose error rate is over its floor (exit 1)
bun LIFEOS/ASSAY/Assay.ts driftenforce rows reverted because the engine's model changed
bun LIFEOS/ASSAY/Assay.ts callers [--check-docs]the registry, and with --check-docs any caller missing its Router data-class row
bun LIFEOS/ASSAY/Assay.ts ask --state <text> --questions <json> [--caller name]one ad-hoc call
bun LIFEOS/ASSAY/Assay.ts ask-many --states <jsonl> --questions <json> [--caller name] [--concurrency N]the same questions over many states, as a pool

The question-system tool is bun LIFEOS/ASSAY/QuestionSystem.ts validate | cases | run | registry-row; its contract and flags are in Intents/CreateQuestions.md § Tools.

Data & Config

Before executing, check <configRoot>/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Assay/ (configRoot is $CLAUDE_CONFIG_DIR when set, else ~/.claude) and apply any PREFERENCES.md and config.json found there; identity-bound suites and calibration sets live there too (Harness integration). If the directory does not exist, use the skill defaults. First-time setup (accounts, keys, config, a proof it works) is in Setup.md.

Gotchas

  • Frequent liveness probes run with LIFEOS_INFERENCE_DISABLED; both the shared text inference path and the vision judge refuse calls under that flag before loading credentials or contacting a provider.
  • A lane-liveness suite needs its own system_prompt. Under the live DA prompt the assistant treats "reply with exactly one word" as a constitutional format conflict and refuses (Bunker bunker-eval-lane, 2026-09-03), a real answer to the wrong question. Suites that test plumbing rather than behavior set a minimal echo system_prompt.
  • The single-shot agent under test narrates tool calls. EvalRunner injects an [EVALUATION CONTEXT] no tools, answer directly suffix; keep it when authoring output-graded cases. Tool-dependent properties belong in RunAgentic.
  • The judge default is dynamic. No judge keys in the suite → the level measured by its current EARNED calibration record, else 'high'. Explicit judge_model/judge_level always wins. A model bump, rubric edit or label edit makes the old record provisional until Calibrate re-runs; earning at medium or high never certifies low.
  • Regression pass/fail changed at v2.0.0: the gate is pass^k ≥ threshold (was mean ≥ threshold). Historical passed values are not comparable across the boundary.
  • A judged suite keeps an adversarial fixture, and the runner grades it every run. Text: adversarial_output: on a case, a canned output that passes every deterministic assert on that case; the judge must fail it or the suite fails (adversarial.missed in the result). Image: a case with expect: fail, an unrelated image that passes the deterministic asserts and must land below the judged threshold. SuiteManager.ts validate rejects a judged suite with neither, and rejects a fixture that fails its own deterministic asserts. Without one, a green suite proves nothing about the judge.
  • An llm-rubric reaches the judgment layer only when every level from 1 to scale has an anchor; a partial set such as 1/3/5 reads unanchored and goes straight to the model judge (rubricToScoreQuestion). Which rubrics reached the judgment layer is each run's jev.escalate_reason, a stored field named for the engine retired 2026-10-10 (RunEval § Output format).
  • Order matters to a pairwise judge. judgeTextPairwise and VisionJudge pairwise judge one ordering; only Tournament.ts flips. A single unflipped pairwise call is a position-bias measurement, not a preference.
  • Deterministic asserts are prerequisites, for text and image alike. They default to required: true, run before any judge whatever the YAML order, and a failure skips the judges and zeroes the trial. Suites that relied on deterministic partial credit must opt in with required: false, and their scores before and after that change are two series. is-json checks the whole output; contains-json checks an embedded fragment.
  • A judge, rubric, or anchor edit breaks score comparability. Recalibrate and treat the trend as two series.
  • claude plugin eval is a newer Claude Code command whose flags and schema can change between releases. Wrap it, never bind our suite format to its schema, and re-probe --help before relying on flags.
  • Legacy v1 suites (tasks: format) are diagnosed, not run. EvalRunner returns a named error result so callers (ConfigEvalOnChange) degrade loudly, never silently.
  • Image suites with no entry in USER/CONFIG/vision-judge.json are judged by the OpenAI + Anthropic panel: both vendors judge each trial, it passes only when both pass, the score is the lower, and a missing vendor gives no verdict. Google is never the default seat; a suite reaches Google only when its config entry names it. The install's provider rulings and their history are in <configRoot>/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Assay/PREFERENCES.md.
  • A perfect dev number after question iteration is a warning, not a result. A CreateQuestions pilot reached a perfect dev score while its holdout landed below both the bar and the baseline question. Only the holdout number and the judged-only margin decide anything, and holdout runs once.
  • decide() is two-sided: it returns act: true for a confident no as well as a confident yes, so a consumer always reads verdict before acting. Chain.ts keepWhere and judgeThenEscalate treat only a confident yes as actionable and send a confident no to drop or escalate; a system whose confident no is an answer composes through the policy evaluator (LIFEOS/ASSAY/Assay.ts, LIFEOS/ASSAY/Chain.ts, read 2026-09-28).
  • A new judgment caller needs a row in LIFEOS/DOCUMENTATION/Router/RouterSystem.md § Data class per caller, or Assay.ts callers --check-docs names it as a missing doc row and exits 1 (LIFEOS/ASSAY/Assay.ts, 2026-09-28).
  • bun test with a bare relative path silently drops every child process's stdout and stderr in Bun 1.3.6, so spawn-based tests fail with empty output. Always prefix the path with ./ (observed 2026-09-11).
  • Image tournaments and VisionJudge.ts pairwise judge on Gemini alone (judgeImagePairwise in Tools/VisionJudge.ts), private material included. Whether private material may go to Google is decided by the shared egress check (LIFEOS/TOOLS/lib/EvaluatorEgress.ts, its approved-vendor set); when that set excludes Google, every private image tournament exits 2 verifier unavailable. The install's provider rulings and their dates are in <configRoot>/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Assay/PREFERENCES.md § Judge providers. A pairwise run needs GOOGLE_API_KEY; without it the tournament exits 2 (read in code 2026-10-13).

Examples

Example 1: Check a produced artifact before handing it over

User: "proof this film against the brief"
→ Proof intent
→ Proof.ts run --artifact film.mp4 --ask brief.md --destination handoff
→ a receipt bound to the film's sha256, with each code fail, flag and unavailable check listed

Example 2: Ask whether a judge can be trusted

User: "is the art-meaning judge any good?"
→ Calibrate intent
→ Calibrate.ts against the principal's labels for that suite
→ an earned, proxy or stale record with agreement per class and the label count against the floor

Example 3: Turn a fuzzy call into judgment-layer questions

User: "turn this inbox triage call into a question system"
→ CreateQuestions intent
→ QuestionSystem.ts validate, then run on dev and once on holdout against one holistic baseline question
→ holdout accuracy, the margin over the baseline, and a saved shadow registry row

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

AnnualReports

무료요약 있음

여러 업체와 공공기관의 사이버 보안 보고서를 검색하고 가져와 위협, 랜섬웨어, 침해 통계 등의 추세를 비교합니다. 분석에는 출처별 업체, 연도, 보고서를 표시하고 자료 간 차이도 따로 다룹니다.

  • 분류별 위협 보고서를 찾을 때
  • 특정 업체의 보고서를 가져올 때
  • 여러 업체의 랜섬웨어 동향을 비교할 때
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

ApertureOscillation

무료요약 있음

기능이나 구성 요소 자체의 설계 요구와 시스템 전체의 목표를 세 단계로 비교합니다. 설계상의 충돌과 적절한 구현 범위를 정리하고, 제안한 설계가 전체 방향과 맞는지 평가합니다.

  • 서비스나 라이브러리를 분리할지 판단하기
  • 기능 요구와 제품 방향 비교하기
  • 새 구성 요소와 기존 시스템의 정합성 확인하기
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

Aphorisms

무료요약 있음

글의 주제에 맞는 격언과 인용문을 찾아 저자와 선정 이유를 함께 제안합니다. 출처가 있는 인용문을 추가하고, 사상가의 말을 주제별로 조사하며, 사용 기록을 관리해 같은 인용문을 반복하지 않도록 돕습니다.

  • 뉴스레터에 어울리는 인용문 찾기
  • 출처와 함께 중복 없이 인용문 저장하기
  • 주제별로 사상가의 말 조사하기
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

Art

무료요약 있음

블로그 삽화, 기술 도표, 비교 그림, 만화, 아이콘 등을 용도에 맞는 절차로 제작합니다. 구도와 색상, 이미지 모델을 정하고 검토용 이미지를 출력합니다.

  • 블로그 제목 이미지를 만들 때
  • 시스템 구조를 그림으로 설명할 때
  • 비교나 연대표를 시각화할 때
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

ArtDirection

무료요약 있음

브리프와 제작 기준에 따라 이미지, 영상, 슬라이드, 사이트 화면 캡처의 시각 품질을 평가합니다. 두 비전 심사자가 점수와 결함 우선순위를 제시하고, 정해진 횟수 안에서 수정을 돕습니다. 평가를 통과한 결과물만 전달할 수 있으며, 사람의 점수와 의견은 별도 기록해 심사 보정에 활용합니다.

  • 이미지 수정 항목의 우선순위 정리
  • 기준에 따라 영상이나 슬라이드 평가
  • 공개 전 시각 품질 점검
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

ArXiv

무료요약 있음

주제, 연구 분야, 논문 ID로 arXiv 논문을 찾고 제목, 저자, 초록, 링크를 정리합니다. 새 논문을 확인하고, 제공되는 경우 AlphaXiv의 AI 생성 개요도 가져옵니다.

  • AI·머신러닝 분야의 새 논문 확인
  • 특정 주제의 논문 검색
  • 논문 ID나 arXiv 주소로 조회
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

danielmiessler의 스킬 모두 보기

이 스킬의 문제 신고