Skip to content
runlog_Guide
Menu
HomeRunLog
MIT-Licensed Local Tools · v0.3.1

Put safety & cost checks around your agent.

Zero hosted lock-in, zero required accounts. Drop our lightweight Python and TypeScript checks directly into your agent runtime, terminal, and CI pipeline.

1. Loop-Guard SDK 2. Prompt Pricer CLI 3. Ship-Check CI
Runtime Protection · Python & TS
Loop-Guard SDKv0.3.1
Stops runaway tool-call retries, A↔B ping-pong cycles, and post-response budget overruns inside your app.
Terminal Cost Estimator · Node.js
Prompt Pricer CLIv0.3.1
Estimate token counts and multi-turn model costs from local prompt files or stdin—completely offline.
Pre-Merge Trace Gate · Python 3.12
Ship-Check Runnerv0.3.1
Check recorded agent tool traces against step ceilings, cost bounds, and required tool assertions in CI.

Verified installation examples and release checks

Use the released packages and runnable commands below. Download links and checksums correspond to the same reviewed release.

Install in your project

Requirements, release version and download verification

Commands below use macOS, Linux, or a Windows WSL terminal. The install commands download the release file into your current directory before installing it. These examples use the public 0.3.1 downloads checked on .

Check a downloaded file

Each release includes a SHA256SUMS file. Compare the hash of your download with its matching entry before installing. On Linux, use sha256sum filename; on macOS, use shasum -a 256 filename.

CLI · Offline

Prompt Pricer

Node.js 20+ and npm

Estimate token counts and model cost from text or a local file. No account, API key, or model call is needed.

CLI installation and example

Install the download

curl -fLO https://github.com/runlog-cc/prompt-pricer/releases/download/v0.3.1/runlog-prompt-pricer-0.3.1.tgz
npm install --global ./runlog-prompt-pricer-0.3.1.tgz

Try a prompt

runlog price --currency USD --models gpt-4o "Summarize a short note."

The terminal prints estimated input tokens and cost. Read a file with --file ./prompt.md or pipe text with --stdin; runlog --help lists the supported options.

The CLI runs offline and prints locally. Its bundled provider snapshot is dated; unmatched legacy reference prices are labelled unknown-date. Output and thinking tokens are assumptions, and EUR uses a dated reference conversion. Add --json --turns 3 --output-tokens 500 for machine-readable provenance and cumulative conversation cost.

Python + Node.js SDK · Local

Loop-Guard

Python 3.9+ or Node.js 20+

Put a guard immediately before and after your actual tool calls. The examples below print a local lookup twice, then stop the repeated call. They do not call an AI provider.

Choose your language: Python setup · Node.js setup.

SDK downloads, setup and integration limits
Python setup and example

Create an environment and install the wheel

curl -fLO https://github.com/runlog-cc/loop-guard/releases/download/v0.3.1/runlog_loopguard-0.3.1-py3-none-any.whl
python3 -m venv .venv
.venv/bin/python -m pip install ./runlog_loopguard-0.3.1-py3-none-any.whl

Save as guard.py

from loopguard import CircuitBreaker, CircuitTrippedError, TripPolicy

guard = CircuitBreaker(policy=TripPolicy(max_consecutive_retries=3))
for attempt in range(3):
    try:
        guard.before_tool_call("lookup", {"id": 7})
    except CircuitTrippedError:
        print("Stopped repeated lookup.")
        break
    print("Lookup ran.")
    guard.after_tool_call("lookup", {"id": 7}, result="ok")

Run it

.venv/bin/python guard.py
Node.js / TypeScript setup and example

Install the compiled package in your project

curl -fLO https://github.com/runlog-cc/loop-guard/releases/download/v0.3.1/runlog-loopguard-0.3.1.tgz
npm install ./runlog-loopguard-0.3.1.tgz

The download includes CommonJS JavaScript and TypeScript declarations; no build step is needed to use it.

Save as guard.cjs

const { CircuitBreaker, CircuitTrippedError } = require("@runlog/loopguard");
const guard = new CircuitBreaker({ policy: { maxConsecutiveRetries: 3 } });

for (const attempt of [1, 2, 3]) {
  try {
    guard.beforeToolCall("lookup", { id: 7 });
  } catch (error) {
    if (!(error instanceof CircuitTrippedError)) throw error;
    console.log("Stopped repeated lookup.");
    break;
  }
  console.log("Lookup ran.");
  guard.afterToolCall({ toolName: "lookup", args: { id: 7 }, result: "ok" });
}

Run it

node guard.cjs

The SDK runs inside your application. These examples keep their state in memory and print only to your terminal. Provider integrations and alert webhooks send data when you configure them. Budget checks depend on observed usage and reference prices; they cannot prevent every upstream charge. Metadata ingestion and incident history belong to the deferred Teams legacy pilot, not the public tools.

Recorded-trace checks · Source download

Ship-Check

Python 3.12 · No dependencies

The public v0.3.1 release checks recorded traces offline, without an account or API key. Start with a working pass/fail example, then use records from your own evaluation harness. Signed-gate verification is a separate existing-pilot mode.

Local setup and examples

Verify the checksum and unpack

Use sha256sum on Linux, or replace it with shasum -a 256 -c on macOS (without --check). Continue only if verification succeeds.

curl -fLO https://github.com/runlog-cc/ship-check/releases/download/v0.3.1/ship-check-0.3.1-source.tar.gz
curl -fLo ship-check-SHA256SUMS https://github.com/runlog-cc/ship-check/releases/download/v0.3.1/SHA256SUMS
awk '$2 == "ship-check-0.3.1-source.tar.gz" {print; found=1} END {if (!found) exit 1}' ship-check-SHA256SUMS > ship-check-selected.SHA256SUMS
sha256sum --check ship-check-selected.SHA256SUMS && tar -xzf ship-check-0.3.1-source.tar.gz
cd ship-check-0.3.1
python3 runner.py --help
python3 -m unittest discover -s tests
Inspect your recorded trace offline

Put your version 1 scenario suite in scenarios.json and its recorded tool trace in candidate.json. The release README defines their exact shapes. This command calls the local evaluator directly:

python3 -c 'from runner import evaluate, load_json; print(evaluate(load_json("scenarios.json"), load_json("candidate.json")))'

Passing prints a dictionary of scenario, step, and cost totals; invalid records raise an error. The files are read locally and no gate request is sent.

Phase 2: existing hosted gate integrations

Supply RUNLOG_TOKEN securely in your environment, then run this from the extracted directory with your own evaluated files:

python3 runner.py --scenarios scenarios.json --trace candidate.json

This command sends the trace, scenario assertions, and token to the configured HTTPS gate. This low-level runner requests a trace-policy decision; use the evidence bridge in the README for signature verification. The default is https://runlog.cc/api/v1/gate. It needs network access and a valid RunLog API key; local checks alone do not grant release approval. The signed decision scope is trace-loop-policy, not independent evaluation of answer quality. The optional evidence bridge verifies the gate signature and exact artifact and commit bindings.

The offline checker evaluates the records you supply; it does not independently run your agent or prove their origin. Use the release README’s complete pass/fail example before adapting the tool to your own harness and CI. Signed verification is documented separately for existing provisioned integrations.

Release manifest and runtime compatibility

Release manifest and source hashes. Runtime compatibility: the browser Pricer and CLI share the same estimator and snapshot. Legacy Studio uses a separate conservative execution estimate and account spend reservations. Loop-Guard runs locally; its website page is a demonstration. Ship-Check runs offline; signed hosted-gate verification is a separate existing-pilot mode. The old Bench demo is archived and does not power hosted comparisons.

Existing-account previews

Benchmark has no public local package. Private advanced comparisons, Workspace and Teams are deferred from the public launch. Existing advanced comparisons and Workspace remain accessible to authorized accounts. Hosted runs send prompts to providers; reports remain private to your account. See legacy access and the current guide.