itsHabib

Sense — Testing skill for Claude Code

Testing community

Make sense of non-deterministic output.

How to install Sense

This entry records only its repository, not the path inside it, so there is no exact command to give. Open itsHabib/sense and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Sense does

Make sense of non-deterministic output. Test assertions and structured text extraction for Go, powered by Claude

Alternatives in Testing

  • Testing Strategy — This project is small, runs in a terminal, and is mostly deterministic 10.9k ★
  • Aod.Analyze — Perform a non-destructive cross-artifact consistency and quality analysis across spec.md, plan.md, and tasks.m 89 ★
  • Pi Task — Deterministic spec-orchestration for local LLMs in the pi coding agent — drives prompts through refine→researc 81 ★

README

Sense

Make sense of non-deterministic output. Extract structured data from text and evaluate output quality using Claude.

// Judge: output → pass/fail with evidence
sense.Assert(t, output).
    Expect("covers all sections from the brief").
    Expect("includes actionable recommendations").
    Run()

// Extract: unstructured text → typed struct
s := sense.New()
var m MountError
s.Extract("device /dev/sdf already mounted with vol-0abc123", &m).Run()
fmt.Println(m.Device)   // "/dev/sdf"
fmt.Println(m.VolumeID) // "vol-0abc123"

Sense uses the [Anthropic API](https://docs.anthropic.com/en/docs) (Claude) with forced `tool_use` for structured responses — no prompt engineering, no JSON parsing on your end. Requires an Anthropic API key.

Two surfaces, one package:

  • Extract — parse unstructured text into typed Go structs. Logs, error messages, support tickets, API responses — define a struct, get structured data back.
  • Judge — evaluate non-deterministic output against natural-language expectations. Assert in tests (Assert/Require), eval programmatically (Eval), or A/B compare two outputs (Compare).

Why it exists

Go programs that touch LLM output have two recurring problems: turning messy text into something typed, and asserting that non-deterministic output is *good* without a brittle string match. Sense does exactly those two things behind one seam — a `caller` that forces Claude to call a single tool whose schema is the output contract. Everything else is a thin builder in front of that seam.

Scope is deliberately narrow:

  • It judges and extracts. It is not an agent framework. No tool-calling loops, no chains, no orchestration — Sense makes a single forced-tool call and unmarshals the result.
  • It speaks Claude only, today. The caller interface is abstracted so a second provider is ~100 lines, but no OpenAI/other caller is shipped. An OpenAI caller and WithCaller injection live in docs/NEXT.md, not in t