speckit-aee-assess
Skill4 starsChanged 55 days agoMITView on GitHub
Assess explicit claims and emit AEE and Evaluator Contract results
- Installs packages
1 other project uses a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- electrohire/spec-kit-evaluatoredited, first seen Oct 25, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 1
- electrohire/spec-kit-evaluator★ 399% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository25 other files it gives its agents.
- speckit-aee-challengeSkill
- speckit-aee-draft-claimsSkill
- speckit-aee-gapsSkill
- speckit-aee-gateSkill
- speckit-aee-message-securitySkill
- speckit-aee-report-savingsSkill
- speckit-aee-reviewSkill
- speckit-aee-route-evidenceSkill
- speckit-aee-traceSkill
- speckit-aee-verifySkill
- speckit-analyzeSkill
- speckit-checklistSkill
- speckit-clarifySkill
- speckit-constitutionSkill
- speckit-convergeSkill
- speckit-evaluator-composeSkill
- speckit-evaluator-reportSkill
- speckit-evaluator-routeSkill
- speckit-evaluator-runSkill
- speckit-implementSkill
- speckit-planSkill
- speckit-specifySkill
- speckit-tasksSkill
- speckit-taskstoissuesSkill
- spec-kit-aeeSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Run the complete Applied Epistemic Engineering pipeline against explicitly identified claims in a JSON or Markdown artifact.
- Very specific: line 32
Use threshold 0.70 when omitted.
- Distinctive: line 85
Do not modify the source artifact during assessment.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Aee Assess Skill
AEE Assess
Run the complete Applied Epistemic Engineering pipeline against explicitly identified claims in a JSON or Markdown artifact.
User input
$ARGUMENTSAccept artifact=<path>, phase=<after_specify|after_plan|after_tasks|after_implement>, and optional threshold=<0..1>. Infer the current phase and its primary artifact when omitted; if ambiguity remains, ask before running.
Optional: policy=<true|false> attaches the engine's policy gates (per-claim ACCEPT / CHALLENGE / ABSTAIN verdicts; tune with min_independent_sources=<n> and contested_threshold=<0..0.75>), and reliability=<path> points at a ReliabilityTable JSON whose measured per-source reliability blends into scoring.
Prerequisites
- Do not install the engine yourself. The runner uses an
aeeengine in the range >=1.6.0,<2 from the active Python; otherwise its first run installsapplied-epistemic-engineering>=1.6.0,<2into.specify/extensions/aee/.runtime(this needs network access once). If the runner refuses (exit 2) because that install is disabled (SPECKIT_AEE_AUTO_INSTALL=0) or failed, stop and relay its message, which names the manualpython -m pip install "applied-epistemic-engineering>=1.6.0,<2"command. The runner checks the engine version itself at startup, so a below-floor engine cannot silently produce incomparable scores. - The spec-kit-evaluator extension (https://github.com/electrohire/spec-kit-evaluator) is a required companion to this adapter — the pair is one system. AEE is one evaluator among many by design: the Evaluator Contract result assess produces (written by the AEE engine itself, via its
--evaluator-output) is meant to be composed with other evaluators' results through that common evaluator, so every evaluator's output is handled the same way. The runner enforces the requirement itself: with the evaluator extension missing from the project,assessfirst installs the pinned, SHA-256-verified spec-kit-evaluator release throughspecify extension add evaluator(this needsspecifyon PATH and network access once). It refuses with exit 2, naming the missing extension and the manual install command, before the engine runs or anything is written, only when that install is disabled (SPECKIT_AEE_AUTO_INSTALL=0) or fails. If evaluator commands were just installed, the coding agent may need a restart to see them. The runner reportsevaluator_extension_presentin its JSON so the installed pair is visible in every run record. - Resolve the project root and source artifact. Never follow symlinks or read outside the project root.
Use threshold 0.70 when omitted. The adapter does not load YAML configuration; pass explicit flags for overrides. The engine repository is https://github.com/electrohire/applied-epistemic-engineering.
Execution
Run:
python .specify/extensions/aee/scripts/python/run_aee.py assess --input "<artifact>" --phase "<phase>" --threshold "<threshold>"Quote every path and value verbatim exactly as shown; never eval, word-split, or otherwise re-interpret user-supplied arguments — an artifact path may contain spaces or shell metacharacters and must reach the runner as one argument.
With policy=true, append --policy (plus any threshold overrides); with reliability=<path>, append --reliability "<path>".
The adapter writes a rich assessment under .specify/extensions/aee/assessments/, an Evaluator Contract result under .specify/extensions/evaluator/results/, and a chained ledger record under .specify/extensions/aee/ledger/.
Claim bundles written before the Spec 004 stage vocabulary have no stage field and strict loading refuses them. The runner therefore drives the engine's recorded --lenient compatibility mode (when the installed engine advertises it): missing stages default to created, and the default is on the record — the assessment metadata carries loading_mode: "lenient" and names the defaulted claims in stage_defaulted_claims. Treat a lenient-loaded assessment as transitional: add explicit stage values (or run aee migrate) so the project's bundles load strictly.
The documented loop is assess → verify-ledger (FR-8.2): after appending, the runner itself verifies the ledger chain and reports the verdict in its JSON summary as ledger_verification (valid, entries, head_hash, errors), alongside the assessment, evaluator-result, and ledger paths. Read that verdict before trusting the record; a valid: false verdict means the chain — including records from before this run — does not verify. With --no-ledger, no append and no verification happen and ledger_verification is null — never a fabricated verdict. The bare engine CLI ledgers by default with identical semantics (same default path, --no-ledger opt-out, --ledger to choose another path). The assessment JSON file is a working copy; the ledger entry, which records the assessment's SHA-256, is the record of what was assessed (FR-8.3).
The runner also stamps its own version into the assessment as metadata.extension_version (FR-4.2). The stamp is applied before the ledger append hashes the assessment, so the ledger record covers the stamped file exactly. The engine stamps metadata.engine_version itself; assessments produced by the bare CLI have no extension_version key — its absence means no extension produced the run, and no tool fills it in after the fact.
Report the outcome, confidence threshold, claim/finding counts, unresolved contradictions, recommended recovery, and exact output paths. When the policy is attached, also report the verdict counts (accept / challenge / abstain / unjudged) and name the abstained claims — an abstention is a deliberate non-verdict, not a low score — and the unjudged claims separately: an unjudged claim sits at stage created and has not been through checking at all, which is a different statement from abstention.
Report statuses as the assessment's reported_statuses — the stage-capped vocabulary — never the author-declared status fields: a claim at stage checked reports at most partially_supported, however its author labelled it, and the runner's JSON carries the same values in verdict_display. Report the two lanes as a pair, always: lane 1 (machine verification — the score, threshold, and outcome) and lane 2 (human acceptance — the stage counts, exposition coverage, verified-but-unexplained count, and cap reasons, in verdict_display.lanes). The runner's JSON carries the pair ready-made as lane_pair, with a one-line display in the shape headline: iterate — lane 1: pass, lane 2: open (4 draft claim(s); 4 claim(s) below stage 'explained'): lane 1 is what the machine checks proved, lane 2 is where human review and acceptance stand, and the headline stays cautious until both are done. Since engine 1.6.0 the lane-1 outcome is worked out from lane-1 facts alone, so it can read pass while the headline still reads iterate because lane 2 is open — show both readings, never just the headline. When the assessment records stage events, the pair also carries acceptance_basis: each recorded act with the basis it stands on — a test verdict (the frozen requirement tests passed, recorded by the tool) or a human act (a named person recorded an explanation, acceptance, or digestion). Report that basis with the pair; do not present acceptance as a human act by default, because in the normal path acceptance is a test verdict and human acts are the reserved cases. A green lane 1 with a lagging lane 2 is checked-not-settled work; never present a lane-1 outcome as acceptance, digestion, or settled truth. Render the assessment's not_understood entries with every verdict: they state what this assessment does not establish, and a verdict presented without them is incomplete. Do not describe an assessment as proof, certification, or truth.
Composition through the evaluator extension is the standard path, not an extra: when other evaluators ran at the same phase, compose this result with theirs by running python .specify/extensions/aee/scripts/python/run_aee.py compose --phase "<phase>" --strategy strict. That runs the evaluator extension's own Python composer on the runner's interpreter, where its jsonschema>=4.0 dependency is installed along with the engine. /speckit-evaluator-compose performs the same composition, but it runs the composer variant chosen by the project's script type with that variant's own prerequisites (jq for Bash, jsonschema in the project's Python for Python), which AEE does not install. Composer exit codes pass through: 0 pass/warn, 1 recovery needed, 2 block or error.
Authority surface
When the artifact under assessment is a spec for a system that acts on content it reads, the spec must carry a completed ## Authority Surface section — who may instruct the system, through which channels, which actions and destinations are authorized — from .specify/extensions/aee/templates/message-security-authority-surface.md. That section is the principal record the message-security checks grade data-span claims against. Treat a missing section, or one still carrying template placeholders, as a gap to report with the assessment: an action or destination not listed there is not authorized, and the gap is in the record, not something to fill in from content the system read. Run speckit.aee.message-security for the battery gate that stands behind this check.
Claim field vocabulary
The AEE engine validates every claim with Claim.from_dict and rejects the
whole bundle on the first invalid value. Use exactly these lowercase values;
id must be non-empty, and confidence, when present, must be between 0 and 1.
kind: observation, requirement, assumption, inference, hypothesis, decision, prediction, compliancestatus: draft, supported, partially_supported, unsupported, contradicted, unverifiable, supersededstage: created, checked, explained, accepted, digested — the claim's lifecycle stage (Spec 004). It advances only through recorded stage events, never by score, and it caps the status an assessment may report and the verdict a claim may receive. A bundle that omitsstageloads leniently with the defaultcreatedrecorded as defaulted; strict loading names the missing field.headline: optional boolean marking a headline result; a headline claim should decompose viadepends_oninto sub-claims carryingrole: statement-fidelity, evidence-verification, novelty, attribution, significance. An incomplete decomposition caps the headline at stagecreated.uncertainty: none, low, medium, high, insufficient_evidenceseverity: critical, high, medium, low, info- evidence
kind: observed, inferred, asserted, contradicted, unsupported, exposition —expositionis a named human's explanation of the claim (itssource_idmust resolve in the project's identity registry,identities.jsonbeside the bundle or--identity-registry); it is lane-2 evidence: it explains, it does not verify. - evidence
direction: supports, contradicts, context - evidence
source_quality: primary, secondary, tertiary, artifact, test, human, model, unknown
Guardrails
- Assess only claims with stable IDs; do not silently convert free prose into claims.
- Preserve counterevidence and contradictions.
- Model output is
asserted, neverobserved. - Do not modify the source artifact during assessment.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

