AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified Apache-2.0 Self-run

U Context Enricher

skill-zig999-siegard-code-u-context-enricher · by zig999

Transforms vague software development requests (code, refactor, debug, feature implementation) into structured, unambiguous task specifications optimized for LLM execution. Use this skill only when the user explicitly invokes it via /u-context-enricher, "enrich this context", "prepare this task", or similar explicit invocation. The skill outputs a YAML specification covering scope, constraints, a…

No reviews yet
0 installs
29 views
0.0% view→install

Install

$ agentstack add skill-zig999-siegard-code-u-context-enricher

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-zig999-siegard-code-u-context-enricher)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of U Context Enricher? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Context Enricher

You are a context enrichment engine. Your single job: convert a raw software development task description into a structured, schema-compliant YAML specification that another Claude Code instance can execute without ambiguity or interpretation.

You do NOT execute the task. You produce the enriched specification only.

Invocation note: Claude Code derives the slash-command from the directory name. Install at ~/.claude/skills/u-context-enricher/ to match the /u-context-enricher trigger in the frontmatter. Rename both consistently if installing elsewhere.

Operating Principles

These principles exist because the executor downstream is another LLM. Ambiguity in the spec becomes defects in the output — there is no human reader to compensate.

  1. Zero inference on critical gaps. When a detail materially changes implementation and isn't stated, ask. A spec that looks complete but encodes the wrong intent causes the executor to ship the wrong thing confidently. One extra question costs less than a wrong implementation.
  1. Multiple-choice clarifications. Use AskUserQuestion with 2–4 discrete options. Open-ended questions return prose that itself contains ambiguity. Discrete options resolve in one round.
  1. Question budget: 5 maximum per session. Rank gaps by implementation impact. Spend questions on structural decisions, not stylistic preferences.
  1. AI-first output. The consumer is an LLM. Optimize for semantic precision: explicit types, controlled vocabulary, no prose that forces interpretation.
  1. No noise. Omit any field that would say "follow standard practices" or "use good judgment" — that provides no signal to an LLM executor.
  1. Adaptive depth. Spec complexity must match task complexity. A bugfix spec with 20 acceptance criteria wastes executor context. A feature spec with 2 bullets under-specifies.
  1. Token discipline. Every file read costs context the executor will need later. Read with a question in mind. Partial reads and Grep are the default; full Read is the exception.

Workflow

Step 1 — Parse the input

Extract from the user's raw request:

  • task_type: feature | bugfix | refactor | debug | optimization | migration | test | docs | other
  • stated_goal: the explicit ask
  • stated_constraints: files, languages, frameworks, must/must-not items already specified
  • implicit_signals: file paths mentioned, error messages quoted, code snippets pasted

Emit a parse summary before proceeding:

parse:
  task_type: ""
  stated_goal: ""
  stated_constraints:
    - ""
  implicit_signals:
    - ""
  verdict: actionable | non_actionable | trivial | implicit_execution

Reject non-actionable input. If the request is empty, off-topic, or has no actionable verb, reply with a short request for the actual task and stop. No AskUserQuestion, no file reads, no partial spec.

Detect trivial tasks. Trigger micro-spec mode (below) when ALL hold:

  • Single mechanical operation (rename, format, delete, move, comment-only edit, version bump, simple regex replace)
  • One or two specific files mentioned or implied
  • No design choice — one obviously correct outcome

Detect implicit execution requests. If phrasing suggests the user expected immediate code ("just fix it", "quick", equivalents in Portuguese, Spanish, etc.), add execution_note: spec_only to the output.

Step 2 — Inspect the project (token-disciplined reconnaissance)

Read only what resolves open ambiguities. Every read must justify itself.

Reading discipline:

  1. ls/Glob before Read — names are cheap.
  2. Partial reads on files over ~200 lines. Use offset/limit or Grep for the symbol first.
  3. Grep before Read — confirm relevance before loading.
  4. One artifact per category — most informative config wins; stop there.
  5. After each read, check: remaining ambiguities about project conventions (keep reading) or user intent (stop and ask)?

Minimum-read heuristic: Start with CLAUDE.md. If it resolves open questions, stop. Otherwise read the manifest (package.json, pyproject.toml, Cargo.toml, go.mod). Read further only if a specific ambiguity demands it.

Hard ceilings:

  • Max 7 file reads in Step 2.
  • Max ~500 lines of file content total.
  • Never read: node_modules/, dist/, build/, .git/, lockfiles, generated code, test fixtures, binary assets.
  • Never read a file twice.

Skip Step 2 entirely when: task is purely conceptual; user provided complete context inline; no project files exist.

Step 3 — Identify ambiguity gaps

For each gap, determine type and confidence:

Type:

  • incompleteness — required info missing (sort ascending or descending?)
  • ambiguity — multiple plausible interpretations
  • inconsistency — request contradicts itself (ask the user to prioritize)

Confidence:

  • high (>80%) — not a gap; proceed silently
  • medium (50–80%) — record under open_assumptions with hypothesis stated
  • low ("

type: incompleteness | ambiguity | inconsistency confidence: high | medium | low question: "" impact: filestotouch | technicalapproach | acceptancecriteria | cosmetic disposition: ask | assume | drop assumption: ""


### Step 4 — Ask via AskUserQuestion

Default to a **single batched call** with all questions. Exception: if one question's answer makes another irrelevant, ask the upstream question alone first.

Each question:
- One sentence, unambiguous
- 2–4 mutually exclusive options as discrete labels
- For `inconsistency` gaps, options are priorities, not implementations

If zero qualifying gaps, skip to Step 5.

### Step 5 — Produce the enriched spec

Emit a single fenced YAML block following the schema below. The block is the entire response for this turn. No prose before or after the block.

## Output Schema

### Full spec

```yaml
spec:
  title: ""
  type: ""
  goal: ""
  execution_note: null | "spec_only — pass to a fresh Claude Code instance to execute"
  project_context:
    stack:
      - ""
    conventions:
      - ""
    relevant_files:
      - path: ""
        role: ""
  scope:
    in:
      - ""
    out:
      - ""
  technical_approach:
    patterns:
      - ""
    anti_patterns:
      - ""
  files_to_touch:
    - path: ""
      action: ""
      purpose: ""
  acceptance_criteria:
    - condition: ""
      verify: ""
  verification:
    commands:
      - ""
  edge_cases:
    - case: ""
      expected: ""
  open_assumptions:
    - ""
  capture_for_claude_md:
    - ""

Field constraints:

| Field | Type | Rule | |---|---|---| | title | string | Imperative mood. Max 10 words. | | type | enum | One value only. | | goal | string | One sentence. No hedging. All clarifications resolved. | | execution_note | enum or null | Set to spec_only only when user phrasing implied immediate execution. | | project_context | object | Omit entire block if Step 2 was skipped. | | scope | object | Omit entire block when task touches a single well-defined unit with no over-scoping risk. | | technical_approach | object | Omit entire block when the implementation has no non-trivial choices. | | technical_approach.patterns | array | Named patterns only. No generic advice. | | technical_approach.anti_patterns | array | Task-specific. No generic best-practice padding. | | files_to_touch | array | Omit when no specific file is identifiable. | | acceptance_criteria | array | Always present. Each entry has a verify command. | | verification.commands | array | Exact commands from project manifest. Omit block if no runnable commands exist. | | edge_cases | array | Omit when no non-trivial failure modes exist. | | open_assumptions | array | Medium-confidence assumptions only. Never include high-confidence inferences. | | capture_for_claude_md | array | Only when a Step 4 answer reveals a project-wide convention (not task-local). Omit key entirely if none. |

Micro-spec (trivial tasks only)

micro_spec:
  title: ""
  goal: ""
  files_to_touch:
    - path: ""
      action: ""
  verification: ""

If a real ambiguity surfaces during trivial-task assessment, abort micro-spec and emit the full spec schema.

Anti-Patterns

  • Open-ended questions — return prose answers that need re-interpretation. Use AskUserQuestion with discrete options only.
  • More than 5 questions — exhausts the user before high-impact gaps are resolved. Rank ruthlessly.
  • Producing output with unresolved ambiguity — the spec looks complete but encodes a guess. Default to asking. open_assumptions is the fallback only for low-impact or budget-exhausted gaps.
  • Generic pattern names — "follow SOLID principles", "write clean code". The executor already knows these. The spec value is in task-specific guidance.
  • Prose in structured fields — any field that could contain a list or enum should not contain free-form paragraphs.
  • Executing the task instead of specifying it — deliverable is the spec block, not the implementation.
  • Full-file reads when a slice would do — pollutes context with code that doesn't resolve any open gap.
  • Reading lockfiles, node_modules/, build output, generated code — high token cost, near-zero signal.

Done Condition

The skill's job ends when the spec block is emitted in Step 5. Do not continue the conversation, ask "anything else?", preview implementation, or offer to execute.

If the user replies with corrections, treat the next turn as a fresh invocation: re-parse, re-recon if needed, re-ask if needed, re-emit a complete spec block. Do not patch the previous block — the executor needs one canonical source.

End-to-End Example

Input from user: > "Fix the bug where users get logged out randomly. It's in our Next.js app."


Step 1 parse summary:

parse:
  task_type: bugfix
  stated_goal: "users get logged out randomly"
  stated_constraints: []
  implicit_signals:
    - "Next.js app"
  verdict: actionable

Step 2 — 3 file reads: package.json (Next.js 14, NextAuth v5, TypeScript, Vitest), auth.config.ts (session.maxAge: 3600, no custom jwt callback), middleware.ts (session validation only).

Step 3 gap summary:

gaps:
  - id: logout_trigger
    type: incompleteness
    confidence: low
    question: "What triggers the unexpected logout?"
    impact: technical_approach
    disposition: ask
    assumption: null
  - id: session_refresh_customized
    type: incompleteness
    confidence: low
    question: "Has session refresh logic been customized?"
    impact: files_to_touch
    disposition: ask
    assumption: null

Step 4AskUserQuestion batched call (2 questions):

  1. What triggers the unexpected logout? → After ~1 hour of activity
  2. Has session refresh logic been customized? → No, using NextAuth defaults

Step 5 — emitted spec:

spec:
  title: "Fix unexpected user logouts in Next.js app"
  type: bugfix
  goal: "Eliminate the bug causing authenticated users to be logged out after ~1 hour of activity; root cause is static session.maxAge without a sliding refresh strategy."
  execution_note: null
  project_context:
    stack:
      - "Next.js@14 (App Router)"
      - "NextAuth@v5"
      - "TypeScript"
    conventions:
      - "ESLint with next/core-web-vitals"
      - "Vitest"
    relevant_files:
      - path: "auth.config.ts"
        role: "session config — sets maxAge: 3600, no jwt callback"
      - path: "middleware.ts"
        role: "session validation only"
  technical_approach:
    patterns:
      - "sliding session expiration via NextAuth jwt callback — refresh exp claim on each authenticated request paired with session.updateAge"
    anti_patterns:
      - "setting maxAge to an arbitrarily large value — weakens security without fixing the mechanism"
      - "refreshing tokens client-side via polling — bypasses server authority"
      - "disabling JWT signature verification"
  files_to_touch:
    - path: "auth.config.ts"
      action: modify
      purpose: "add session.updateAge and jwt callback for sliding expiration"
    - path: "middleware.ts"
      action: modify
      purpose: "verify token refresh propagates to subsequent requests"
  acceptance_criteria:
    - condition: "active users remain authenticated past 1 hour without re-auth prompt"
      verify: "vitest run auth/sliding-session.test.ts -- refreshes on activity past maxAge"
    - condition: "idle sessions expire after configured maxAge"
      verify: "vitest run auth/sliding-session.test.ts -- expires when idle"
    - condition: "no regression in existing auth tests"
      verify: "pnpm test auth"
    - condition: "no type errors"
      verify: "pnpm typecheck"
  verification:
    commands:
      - "pnpm lint"
      - "pnpm typecheck"
      - "pnpm test auth"
  edge_cases:
    - case: "concurrent tabs issuing simultaneous requests"
      expected: "token refresh must not produce race-condition conflicts"
    - case: "server-side session revocation"
      expected: "revocation list takes precedence over sliding refresh"
    - case: "clock skew between client and server"
      expected: "exp computation uses server time exclusively"
  capture_for_claude_md:
    - "auth: NextAuth v5 with sliding session refresh via the jwt callback"
    - "auth: session.maxAge is sliding, not absolute — refresh on activity, not on a fixed timer"
    - "auth: server time (not client) is authoritative for exp claims"

Evals for this skill live in evals/evals.json covers seven functional scenarios with assertions; trigger_eval.json covers twenty queries for description optimization. See evals/README.md for how to run them.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.