claudecli

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 26, 2026 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

Package claudecli implements the Claude model adapter via `claude --print --output-format=text`. Prompts are piped via stdin per ADR 0007.

Package claudecli implements the Claude model adapter. Lands in M7.

Index

Constants

View Source
const DefaultInputBudgetBytes = 256 * 1024

DefaultInputBudgetBytes caps the prompt size sent to Claude. Calibrated by spike S9 against 26 real public PRs (median 7.9 KB, max non-outlier 47.4 KB, one 2.2 MB mega-PR rejected). 256 KB cleanly bisects: every reviewable PR passes with a ~5x safety margin, unreviewable mega-PRs fail with an actionable message. See docs/model-adapters.md § Diff Size and Context Budget for the rationale; spikes/s9-input-budget/main.go is the measurement tool — re-run when models change or the prompt scaffold grows.

Variables

This section is empty.

Functions

This section is empty.

Types

type Adapter

type Adapter struct {
	// contains filtered or unexported fields
}

Adapter implements the model.Model interface against the Claude CLI.

func New

func New(run provider.Runner) *Adapter

New constructs an Adapter. Passing nil uses provider.DefaultRunner; lookPath defaults to exec.LookPath. Tests override fields directly (the package is internal-only).

func (*Adapter) Name

func (a *Adapter) Name() string

Name returns the model identifier surfaced to users via --model and attached to validated findings.

func (*Adapter) Preflight

func (a *Adapter) Preflight(_ context.Context) error

Preflight verifies the claude binary is on PATH. The model is never invoked when this fails; the user sees an actionable install hint instead of a stack trace from os/exec.

func (*Adapter) Review

Review invokes claude with --print --output-format=text. Stdin piping, JSON shape, and validation are prompt-engineered (see prompt-contract.md): the model is instructed to emit a {"findings":[...]} JSON object as its entire response, so text mode returns exactly that.

We deliberately do NOT use --output-format=json, which returns a JSON array of event records ({"type":"system",...}, {"type":"assistant",...}, {"type":"result","result":"<model text>",...}). That envelope would have to be unwrapped before parsing; text mode skips that step. Verified via spike M7a-followup (diffsmith-e2w).

func (*Adapter) Synthesize

func (a *Adapter) Synthesize(ctx context.Context, input *review.ReviewInput, results []*review.ModelReviewResult) (*review.ModelReviewResult, error)

Synthesize runs claude against the synthesis prompt that combines the diff with N other reviewers' findings.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL