No description
Find a file
2026-06-03 15:59:30 +01:00
.cargo docs: Initial documentation extract from temper 2026-06-03 09:07:40 +01:00
crates Add generic interaction profile responder core 2026-06-03 15:59:30 +01:00
docs Add generic interaction profile responder core 2026-06-03 15:59:30 +01:00
plans/observability Close Smith observability proof 2026-06-03 15:22:26 +01:00
.gitignore docs: Initial documentation extract from temper 2026-06-03 09:07:40 +01:00
AGENTS.md Close Smith observability proof 2026-06-03 15:22:26 +01:00
Cargo.lock Record Temper phase 6 split parity 2026-06-03 02:34:53 +01:00
Cargo.toml Add workflow role decision responder 2026-06-03 01:58:36 +01:00
README.md Sync Smith interaction docs and fixtures 2026-06-03 15:32:20 +01:00

Smith

Concrete LLM responder implementations for Temper.

Smith is the external home for the pi_agent_rust provider/auth/decision code that Temper calls through process protocols. Temper owns workflow and interaction contracts; Smith owns the first concrete pi-SDK-backed responders for those contracts.

Docs · Provider auth · Run responders · Observability · Process boundary

What Smith owns

  • ChatGPT/OpenAI Codex OAuth, Anthropic OAuth, and DeepSeek API-key provider wiring.
  • One-turn structured LLM decisions through pi_agent_rust.
  • The dogfood/example product-manager interactive profile responder.
  • The manifest-driven workflow-role decision responder.
  • Live provider tests and the real Forgejo + real LLM process-boundary proof.

Smith does not mutate Forge or workflow state. Temper validates every reply and performs all transcript, proposal, Forge, and workflow mutations.

Workspace

  • crates/smith-temper-agent — library for provider selection, OAuth auth-file handling, per-request provider knobs, one-turn structured decisions, product-manager profile mapping, and workflow-role decisions.
  • crates/smith-temper-agent-cli — credential preflight utility plus the smith-product-manager-responder and smith-workflow-role-decision binaries.

Smith may use local path dependencies on the sibling Temper checkout for protocol/domain crates used by tests and process binaries:

../temper/crates/temper-interaction
../temper/crates/temper-runner
../temper/crates/temper-workflow

Temper must not depend on Smith as a Rust crate.

Quick start

cargo fmt --all
cargo test --workspace --all-targets

Run provider preflight after logging in or configuring a key:

cargo run -p smith-temper-agent-cli -- preflight --auth chatgpt-oauth
cargo run -p smith-temper-agent-cli -- preflight --auth anthropic-oauth
cargo run -p smith-temper-agent-cli -- preflight --auth deepseek

See docs/how-to/configure-provider-auth.md for login, model, and auth-file options.

Use with Temper

Build the responder binaries and bind them through Temper-owned process configuration:

cargo build -p smith-temper-agent-cli --bin smith-workflow-role-decision
cargo build -p smith-temper-agent-cli --bin smith-product-manager-responder

Workflow role workers still use Temper's role-decision process variables:

export TEMPER_WORKER_ROLE_DECISION_COMMAND=$PWD/target/debug/smith-workflow-role-decision
export TEMPER_WORKER_ROLE_DECISION_ARGS_JSON='["--auth","chatgpt-oauth"]'

Interactive frontends should call Temper's generic temper-interaction REPL or HTTP service. Bind Smith's product-manager example responder in the interaction deployment binding file under the responder id declared by the profile spec (fragment shown):

{
  "responders": {
    "product-manager-responder": {
      "command": "/path/to/smith/target/debug/smith-product-manager-responder",
      "args": ["--auth", "chatgpt-oauth"],
      "env_allowlist": []
    }
  }
}

Then launch Temper with the user-defined interaction spec and binding file, for example:

temper-interaction repl \
  --spec product-manager.json \
  --bindings bindings.json \
  --profile product-manager

The reference-delivery and dogfood launchers in Temper are configured to use Smith process responders by default; keep their Smith workspace setting pointed at this checkout and pass provider options through the documented Smith args/env surfaces.

Dependency note

pi_agent_rust 0.1.13 pulls asupersync =0.3.1, which currently needs the API-compatible franken-decision 0.3.1. Keep Cargo.lock pinned with:

cargo update -p franken-decision --precise 0.3.1

Re-check this workaround before bumping pi_agent_rust.

Secrets

Never pass provider secrets on argv and never commit auth files here. Local credentials are read from environment variables, .cache/deepseek-api-key, or the shared pi auth file at ~/.pi/agent/auth.json.

Live checks

Live provider and Forgejo checks are ignored and env-gated:

TEMPER_CHATGPT_OAUTH=1 \
  cargo test --test chatgpt_oauth_live -- --ignored --nocapture

TEMPER_ANTHROPIC_OAUTH=1 \
  cargo test --test anthropic_oauth_live -- --ignored --nocapture

TEMPER_FORGEJO_E2E=1 TEMPER_FORGEJO_AGENTS=1 \
  cargo test -p smith-temper-agent-cli --test forgejo_workflow_role_e2e -- \
  --ignored --test-threads=1

See docs/how-to/run-live-provider-tests.md before running gates that can refresh real OAuth credentials or boot external services.