Skip to content

Collapse the session opt-out skills onto hyp session and update LLP 0066/0067 (blocked by #432) #435

Description

@bgmcmullen

Blocked by #432 (which adds hyp session ignore|unignore|status). This issue is the consequence: once the verb exists, the client skills stop being implementations and become thin invocations, and two LLPs stop being true.

Current state

hypaware-ignore and hypaware-unignore (Claude only) are ~60 lines of embedded bash each: an env guard, gateway endpoint resolution, curl, and a python3 JSON parse. Branch skills/ignore-hide-and-destale fixes what was outright wrong in them today (see below), but the mechanism itself only goes away with the verb.

Fixed in-place on that branch, pending the verb:

  • Endpoint resolution was ${ANTHROPIC_BASE_URL:-http://127.0.0.1:8787}; 8787 has not been the default since LLP 0114 (see hyp init writes an explicit listen: 127.0.0.1:8787, forfeiting LLP 0114's fixed default and its EADDRINUSE fallback #431). Now resolves the live port from hyp status --json with an 18521 default. This block is throwaway the moment the verb lands.
  • hypaware-ignore printed .total and declared success without ever checking ignored. Now requires ignored: true and reports "still being recorded" otherwise.
  • hypaware-unignore said "The CLI is idempotent" (there is no CLI) and told users to hand-delete a .hypignore that hyp unignore <path> manages, omitting the machine-local governor (hyp policy unset / hyp policy show) entirely.
  • Both gained disable-model-invocation: true, which removes them from the model's context while leaving /hypaware-ignore in the user's slash menu.

Target state

Each skill body becomes a single dynamic-context injection:

---
name: hypaware-ignore
description: Stop HypAware recording for this session
disable-model-invocation: true
allowed-tools: Bash(hyp session ignore*)
---

!`hyp session ignore`

Report the line above. Check at any time with `hyp session status`.

Deletes per file: the env guard (the verb resolves the id), the endpoint block (the verb resolves the endpoint from config + status.json), the curl, and the python3 parse. Roughly 60 lines to 5. The allowed-tools grant also narrows from Bash(curl *) to Bash(hyp session ignore*), which is a real reduction in what the skill pre-approves.

Codex gets the skills for the first time

hypaware-core/plugins-workspace/codex/skills/ currently has no hypaware-ignore / hypaware-unignore, so a Codex user has no session opt-out outside hypaware-privacy Step 1 (see the Codex comment on #432). Adding them was previously unattractive because it meant duplicating the rollout-resolution bash; with the verb owning resolution, the Codex skills are the same five lines as the Claude ones.

Register in both plugins: hypaware-core/plugins-workspace/claude/src/index.js (the skill-name list at ~L248) and the equivalent in codex/src/index.js.

LLP edits that must land in the same change

These are currently false-once-implemented, not merely stale:

  • LLP 0066 §motivation ("This spec closes that gap without changing the skills. The skills are the contract; the implementation is specified here.") and LLP 0067 (front matter: "The skill ... is the contract and is not changed"; §overview: "Nothing touches the cache schema, the recorder, backfill, or the skills"). After this change the route remains the contract and the CLI becomes its primary client, with the skills as thin wrappers. Reword rather than delete: the point being preserved is that the wire contract was designed first and honored, not that the skill file is immutable.
  • LLP 0067 §drop justifies R5 with "the hash fallback it uses otherwise can never be in the set (the skill only ever submits a real CLAUDE_CODE_SESSION_ID)". A verb accepting an explicit [id] argument weakens that invariant: a user can submit an arbitrary string. Either document that the set may hold ids that match nothing (harmless: membership is tested against resolved ids), or have the verb validate the id shape. Decide and record it.

Acceptance

  • Both Claude skills are <10 lines and contain no curl, no python3, no port literal.
  • Codex has both skills, registered and materialized at attach.
  • /hypaware-ignore still works end to end; hyp session status confirms membership afterwards.
  • disable-model-invocation: true retained on all four (they are user-triggered, side-effecting actions).
  • LLP 0066 / 0067 edits land in the same commit as the code, per the repo's living-docs rule.
  • /ref-check clean.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions