feat(skills): Skills & Health — skill runtime, instruction resolver, doctor v2, support bundle - #71
Open
AetherAI3 wants to merge 16 commits into
Open
feat(skills): Skills & Health — skill runtime, instruction resolver, doctor v2, support bundle#71AetherAI3 wants to merge 16 commits into
AetherAI3 wants to merge 16 commits into
Conversation
…urce-of-truth map Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…very, resolution, lazy loading, policy Strict-JSON manifest validation (closed keys, reserved aether/* namespace, tool/permission vocabulary checks, safe relative paths), canonical length-prefixed SHA-256 package digest, committed-safe lock file, local digest-bound trust store, metadata-only discovery, explicit/automatic resolution with ambiguity + dependency-cycle refusals, TOCTOU-checked lazy body loading, intersection-only policy enforcement, and the bounded typed skill context packet. Stable skill.* refusal codes throughout. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…and conflicts; network becomes an explicit gate category InstructionResolver: bounded read-only discovery of .aether/instructions.md, root and nested AGENTS.md, user-level instructions, and CLAUDE.md / GEMINI.md / copilot / Cursor-rule compatibility imports; nested scoping, explicit precedence (nearest nested > canonical project > root > user > imports), test-command conflict detection with the effective winner and reason, honest unsupported-syntax warnings (a Cursor rule we cannot parse is NOT applied globally), truncation and binary-file skips with visible reasons, and a typed instruction context packet carrying per-source digests. Gate repair: web_search/web_fetch now map to a 'network' gate action instead of falling through ungated; doctor's tools.gates check and autonomy tests pin the new mapping. Gate prompts show url/query detail. Includes skill-core unit tests (schema, digest, trust/lock, discovery, resolution, lazy-loading proof with TOCTOU refusal, policy, context packet). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…legacy refusal Additive DevSessionWireRequest fields (capability_contract_version, skill_context, instruction_context — absent for legacy runs), CloudBrain DevSessionContext, skill_context_ack / instruction_context_ack frame decoding and visible acknowledgement rendering, and the skill-session assembly used by 'aether agent': discover, resolve explicit (--skill) plus bounded automatic candidates, lazy-load, packet build, visible Skills/Rules/Conflict header, and per-call policy enforcement in the tool gate ahead of the permission gate. A legacy server with skill context present refuses with skill.server_unsupported unless --no-skills deliberately opts out. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…x built-in skills, offline eval engine aether skills list/show/explain/create/install/enable/disable/trust/untrust/ lock/check with stable exit codes; trust requires --yes or interactive confirm and fails closed without a TTY; show/explain never print skill bodies. /skills mirrors the read-only family through one registry entry and routes trust to the deliberate CLI action. Built-ins (aether/review-pr, fix-ci, ship, doctor-project, research-and-implement, frontend-from-screenshot) ship as strict manifests + SKILL.md copied into dist/src/skills/builtin by the new deterministic post-build asset step. skill_eval.ts runs the schema/resolution/policy eval layers offline — zero model calls, zero UVT — with JUnit output for CI. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…skills eval subcommand Every built-in declares evals/cases.json exercising resolution (automatic trigger selection) and policy (allowed tools pass, denied tools refuse with codes) with max_uvt 0 pinned — offline evals are zero-spend by construction. 'aether skills eval [id|--all] [--json] [--junit <path>]' runs them; the asset copy step now ships evals/ and templates/ alongside references/. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…solver src/generated/agent_capabilities.ts pins the canonical AETHER-CLOUD contract (source repo, commit, version, canonical sha256 — digest verified equal to the Python contract_digest byte-for-byte). resolveCapabilities() prefers the server manifest, falls back to the snapshot with a visible warning, refuses an incompatible major contract version, and never mixes vocabularies. Renderer separates static support from runtime availability. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t of a sentence The single greedy regex let 'pytest tests/api. Never cargo test --all here.' consume everything after pytest, hiding the cargo command and polluting the extracted value with prose. Runner commands are now token-scanned: args must look like flags, paths, or scoped targets, and sentence punctuation ends the command. All 11 instruction tests pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…lity contract guides Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-gated automatic selection at scale Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s, and rollback path Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pro/Team now lists Claude Opus 5, the GPT-5.6 family, Kimi K3, and Gemini 3.6 Flash first, with the previous generation (Opus 4.8, GPT-5.5, DeepSeek V4 Pro, Kimi K2.6, Gemma 4 31B) labeled as still selectable rather than presented as the flagship set. Frontier table unchanged — already current. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…oud SHA Snapshot now cites AetherAI3/AETHER-CLOUD@97eacd3e (PR #1065, merged and deployed dark). Contract content and canonical digest unchanged (8da09423…). Release record updated with the merge evidence. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ostics, backup-first repair, redacted self-verifying bundle Doctor v2: diagnostics split into cohesive category modules with a check registry and executor (old ids/behaviors preserved verbatim; diagnostics.ts is now a re-export shim). New skills/instructions checks, --network (--deep alias), --category, --failed, --junit, --schema v1|v2 (v1 default for existing JSON consumers), and --live driving one synthetic dev session end to end (auth, negotiation, pause/resume acks, sandboxed write-read round trip, sequence check, teardown, no-residue) with zero model spend. Safe repair: --fix dry-runs a plan; --fix --yes applies with backup-first atomic transactions, verify, rollback on failure, and metadata-only receipts in repair-receipts.jsonl. Only skill-index rebuild, config-dir creation, and stale-tmp pruning are implemented; destructive classes are documented as forbidden. Support bundle: aether support-bundle stages 8 allowlisted metadata-only entries in a 0700 temp dir, packages with a minimal deterministic ustar writer, reopens and re-parses the candidate, enforces the entry allowlist, runs the canonical secret scanner (redaction.ts consolidates session_log's helpers plus JWT/bearer/hex/userinfo/homedir detectors), verifies per-file hashes, and only then renames into place — any failure deletes the candidate. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… /why explanations, skills eval flags aether capabilities [--json] [--available] renders static support separately from runtime availability (packaged snapshot offline, server manifest when signed in). /why replays the bounded explanation log — skill selections with reasons and confidence, refusals, permission denials, and instruction conflicts record entries at the moment they happen. aether agent gains --skill <id> and --no-skills; skills eval gains --json/--junit passthrough. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This lane had been sitting unpushed on a local worktree with no branch on origin and no CI ever run against it. Opening it so it gets reviewed and exercised.
Sixteen commits, 100 files, roughly +9157/-343. What is in it:
aether.skill/v1schema, digest, lock, trust, discovery, resolution, lazy loading, and policy.aether skillsCLI family, the/skillsREPL command, six built-in skills, and an offline eval engine withskills eval.InstructionResolverwith provenance and conflict reporting; network becomes an explicit gate category. Includes a fix where test-command extraction swallowed the rest of a sentence.aether capabilitiescommand with/whyexplanations.Notes for review: the branch is six commits behind main and will need a rebase, and CI has never run on this code, so expect the first run to be informative rather than green.
🤖 Generated with Claude Code