Harness Guide¶
This guide explains how to use the Harness as the middleware between solving agents and challenge platforms. It covers the web UI, CLI authentication, credential profiles, scoped run tokens, agent workflows, dashboards, logs, and security boundaries.
What Harness Does¶
Harness is a local-first challenge proxy and experiment ledger.
Agents submit candidates to Harness. Harness owns:
- connector credentials
- submission transport to challenge platforms
- immutable candidate bundles
- run and candidate numbering
- token and usage metadata
- raw connector responses
- normalized scores and statuses
- deterministic exports and strategy dashboards
- request traces and operational logs
Agents should not call Tensara, HighLoad, CPU.mode, GPU Mode, or other platform APIs directly when working under a Harness run. They should call the Harness CLI with a scoped run token.
Main Concepts¶
User¶
A Harness user logs in to the web UI with a username and password. The logged in user owns credential profiles and run tokens created from the UI.
The default user is admin. That account behaves like any other user for
credentials, run tokens, dashboards, and sessions. Its only extra permission is
creating other Harness users from the Account page.
Connector¶
A connector is the Harness integration for one platform or deployment.
Current connector examples:
highload: HighLoad.fun through an authenticated cookie.local_tensara: local/private Tensara deployment.public_tensara: public Tensara athttps://tensara.org.cpumode: CPU.mode submissions.gpumode: GPU Mode / Popcorn submissions.vliw: private ScoreBench VLIW judge (no venue credential, scored in cycles).github_pr: pull request backed workflows (config/CLI only; hidden from the web UI).
Credential Profile¶
A credential profile is a named secret for one connector.
Examples:
skill-researchskill-quantno-skilljosusanmartinanboto1
The profile name is not itself secret. The secret value, such as a cookie or API key, is stored by Harness and is never handed to agents.
Exercise¶
An exercise is the platform problem being solved, such as:
sum_of_prime_numberslarge_matrix_multiplicationleaky-relumatrix-multiplication
Run tokens are scoped to exactly one exercise.
Run¶
A run is one independent attempt under one user, connector, credential profile,
and exercise. A run has a name such as run001, skill-claude, or
no-skill-001.
Runs are what the strategy comparison dashboard compares.
Scoped Run Token¶
A scoped run token starts with hrun_. It is what you give to a solving agent.
The token binds:
- user
- connector
- credential profile
- exercise
- optional pre-bound run name
Agents cannot use a scoped run token to list other credentials, read sibling runs, change connectors, or submit to another exercise.
The full token is shown only in the creation or reissue handoff. Store the handoff securely; the server keeps only a hash and cannot reveal it later. Reissue an active token when the value is lost or exposed. Reissue preserves the scope and immediately revokes the previous token.
Public URL¶
The public Harness URL is:
https://scorebench.dev/
Browser UI:
https://scorebench.dev/ui/login
Required: Install the Scorebench Skill¶
The skill is required
Install the scorebench skill on every agent machine before creating a
run handoff. The CLI and the skill are separate installations.
--skills scorebench records which skill a run used; it does not install
anything.
Use the canonical public repository:
https://github.com/josusanmartin/scorebench-skill
The complete Codex and Claude Code installation, verification, and update commands are on the Install the Scorebench Skill page.
Do not hand an agent a SCOREBENCH_RUN_TOKEN until the agent confirms that its
scorebench/SKILL.md is installed and loaded.
Install the CLI¶
This is a separate requirement. Installing the CLI does not install the Scorebench skill.
Install the scorebench CLI (with a legacy harness alias) straight from the
deployment; no repository access is needed:
curl -fsSL https://scorebench.dev/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
scorebench --help
The installer pins the CLI download to the same origin that served the script
and verifies its embedded SHA-256 digest before extraction. Existing
SCOREBENCH_URL or legacy HARNESS_URL environment variables configure the
installed CLI, but cannot redirect the installer payload.
The CLI reads SCOREBENCH_URL / SCOREBENCH_RUN_TOKEN, falling back to the
legacy HARNESS_URL / HARNESS_RUN_TOKEN names, so existing handoff blocks
keep working.
Run A Paradigm Puzzle With An Agent Or Coding Harness¶
Open /ui/paradigm/agent while signed in to ScoreBench. This is a handoff and
monitoring tool; it does not run an agent in the browser or on the ScoreBench
server.
The dashboard's Connector picker always includes Paradigm Puzzles and its active challenge catalog. Challenges with recorded runs open their strategy dashboard; challenges without runs open this handoff flow.
- Select the Paradigm puzzle and agent or coding harness.
- Select a model and effort level. Codex and Claude Code provide known defaults. Claude Code includes low, medium, high, extra high, and max; choose Other to enter any model or effort identifier.
- Select the skills to use. ScoreBench is required; optional and user-saved skills are independent of the coding harness.
- Set an arbitrary duration in minutes, hours, or days, or choose no limit. Add any other ideas or constraints as free-form instructions.
- Create the handoff and copy the generated prompt once.
- Paste the prompt into the selected agent or coding harness on your computer.
- Watch the best-score improvement chart, or close the page and return from the recent handoffs list. Run status updates frequently; the trajectory refreshes every five minutes to keep monitoring lightweight.
The harness menu includes Codex and Claude Code. Select Other / add another to supply any name and optional HTTP(S) GitHub, project, or documentation URL. Selecting Save this option for next time stores that profile for the current ScoreBench user and adds it to future dropdowns. Profiles are not shared with other users. ScoreBench records the URL and places it in the generated prompt, but never fetches or executes it.
The separate Skills section always includes the required scorebench skill and
offers
Problem-Agnostic Optimization
as an optional example. Users can add another skill by name and HTTP(S) GitHub,
project, or documentation URL and save it privately for later runs. The prompt
tells the local agent to install or make each selected skill available and read
its SKILL.md or linked documentation. Skill URLs, harness parameters, and
other ideas are prompt text; ScoreBench never fetches or executes them.
The prompt requires the agent to install the canonical
scorebench skill, install
or update the CLI from the same ScoreBench deployment, and run:
scorebench pair PZL-... --url https://scorebench.dev/
The pairing code expires after 30 minutes, works once, and is stored by the
server only as a hash. Redeeming it creates the normal exercise- and run-scoped
token and saves that token in the local CLI config with mode 0600, bound to
the selected workspace. The prompt does not contain the Paradigm API key or an
hrun_... token. After pairing, all normal ScoreBench skill, submission,
cooldown, accounting, and run-progress rules apply.
The generated prompt makes progress reporting explicit. The agent submits a
validated baseline early, then submits every material validated improvement as
a separate candidate. It reads scorebench run progress before each new
submission and obeys the server's allowance and retry timing. Active work should
not go more than 20-30 minutes without a useful checkpoint when the venue and
ScoreBench permit, but unchanged or unvalidated work is never submitted merely
to satisfy that cadence. Each changed candidate gets a new idempotency key; an
uncertain exact retry reuses its existing key, and pending candidates are
refreshed rather than resubmitted. When an older server exposes no limit
metadata, routine attempts stay at least five minutes apart while a newly
validated best can still be submitted promptly.
Closing the browser does not stop a run. Closing the terminal, agent, or harness does. The browser monitor reports authoritative server-side run progress and can be revisited without exposing the worker token.
Public Access and Registration¶
The dashboard reports (/ui/reports/...) and this documentation (/ui/docs/)
are viewable without logging in, so visitors can explore existing results.
The root URL redirects to the featured exercise dashboard.
To use the harness (credentials, runs, account), create an account at
/ui/register with a username and a password of at least 12 characters.
Self-registered accounts get the operator role; only admins can manage
other users or view logs.
Passwords are stored as salted PBKDF2-SHA256 hashes. Older SHA-256 password records are upgraded after the first successful login. Repeated login and registration attempts are throttled per client.
Browser Login¶
- Open:
https://scorebench.dev/ui/login
-
Log in with your Harness username and password.
-
Open the Account page to inspect login sessions:
https://scorebench.dev/ui/account
The Account page shows browser and CLI sessions for the signed-in user. Session tokens are not displayed. Active sessions can be revoked individually or in groups.
Login sessions last one year unless revoked.
CLI Login¶
The CLI login command is for humans or coordinators. It is not for worker agents.
Log in:
harness admin login \
--url https://scorebench.dev/ \
--username admin
The command opens or prints a browser authorization link.
If you are already signed in to the browser UI, click Authorize CLI. If not,
log in in the browser first, then authorize the CLI request.
Verify:
harness admin whoami
The CLI stores its web session in:
~/.config/harness/cli.json
That file is a user session credential. Do not give it to agents.
Log out:
harness admin logout
Use a named profile when you want multiple local admin contexts:
harness admin login \
--profile prod \
--url https://scorebench.dev/ \
--username admin
harness admin whoami --profile prod
harness admin logout --profile prod
For SSH or headless shells, print the browser link instead of trying to open it:
harness admin login \
--url https://scorebench.dev/ \
--username admin \
--no-browser
For supervised automation, avoid putting the password in shell history:
printf '%s\n' "$HARNESS_ADMIN_PASSWORD" | harness admin login \
--url https://scorebench.dev/ \
--username admin \
--password-stdin
Web UI Pages¶
Dashboard¶
The chart dashboard opens at:
/ui/reports/
That route redirects to:
/ui/reports/strategy-compare.html
Use it to compare runs for one venue and exercise. It is the page with the interactive charts and selectors.
Useful controls:
- custom connector selector
- custom exercise selector with logical run counts
- user filter
- run filter
- collapsed original prompts for the runs in the current scope
- candidate hover and pinned details with the server submission timestamp
- x-axis selector: active (idle auto-removed), elapsed (true clock time), tokens, API-equivalent cost, candidate
- x-axis truncation by hours
- Y range selector:
90%keeps every best-side score visible and clips only statistically unusual worse-side values while retaining at least 90% of visible scored candidates;fullrestores every value - initial-outlier selector:
hideremoves only the contiguous leading scores of a run that are worse-side statistical outliers, and only when that run later reaches a non-outlier score;showrestores those initial scores - best-only toggle
Runs¶
Dashboard management opens at:
/ui/runs
Use it to search personal runs, open an isolated dashboard, and control whether each run appears in comparison dashboards. Hiding a run removes it from that user's comparison dashboards without deleting submissions, candidate bundles, raw evidence, or audit logs.
Credentials¶
Use Credentials to save named connector credential profiles.
Each connector defines its own fields. Examples:
- HighLoad requires an authenticated cookie.
- Public Tensara requires a Tensara API key.
- Local Tensara requires a Tensara API key for the local deployment.
- Paradigm Puzzles requires a personal
pp_...API key from its API page. - CPU.mode accepts an API token or authenticated session cookie.
- GPU Mode stores the Popcorn CLI ID created by the browser auth flow.
- VLIW requires no venue credential. Select
ScoreBench main; the scoped ScoreBench run token is the only worker credential.
Credential profile names are used in dashboards and run-token creation.
Secrets are stored locally by Harness. They are not shown again after save.
Exercise API Keys¶
Use Exercise API Keys under Account to create scoped run tokens.
The normal flow:
- Select connector.
- Select credential profile.
- Select exercise.
- Optionally pre-bind a run name.
- Create the token.
- Copy the handoff block to the agent.
If the run name is left blank, the agent must choose a run name with:
harness run start --id run001 \
--skills scorebench \
--model gpt-5-codex \
--coding-harness Codex \
--effort high \
--autonomy autonomous
If the run name is pre-bound in the UI, the agent should inspect it with:
harness run current
Account¶
Use Account to:
- change your password
- add or manage users
- inspect login sessions
- revoke browser or CLI sessions
Creating Agent Tokens From The CLI¶
After admin CLI login, create a scoped token:
harness admin create-run-token \
--connector public_tensara \
--credential skill-research \
--exercise leaky-relu \
--run-id run001 \
--prompt-file prompt.md \
--skills scorebench \
--model gpt-5-codex \
--coding-harness Codex \
--effort high \
--autonomy autonomous
The output includes a handoff block for the agent. --prompt or
--prompt-file is required so the complete assignment is retained with the run
and available in the dashboard.
For multiple parallel workers:
harness admin launch \
--connector local_tensara \
--credential skill-research \
--exercise leaky-relu \
--count 4 \
--run-prefix no-skill- \
--skills scorebench \
--model gpt-5-codex \
--coding-harness Codex \
--effort high \
--autonomy autonomous \
--goal 'Use the scorebench skill. Solve leaky-relu for 3 hours. Submit only through Harness. Do not use exploits.' \
--agent-command codex \
--dry-run \
--json
Use --dry-run --json first. Then run without --dry-run when the launch
shape is correct.
Agent Handoff¶
Agents should receive only:
export HARNESS_URL=https://scorebench.dev/
export HARNESS_RUN_TOKEN=hrun_...
Then the agent should run:
harness context
harness exercise
harness run current
harness run progress
If harness context says needs_run_name: true, the agent should start or
continue one run:
harness run start \
--id run001 \
--strategy "short description of what this run is testing" \
--hypothesis "why this strategy should improve the score" \
--skills scorebench,problem-agnostic-optimization \
--model gpt-5-codex \
--coding-harness Codex \
--effort high \
--autonomy autonomous
--model and --effort are required: harness run start is rejected
without them so every run can be attributed in the strategy reports. They may be
supplied on the command line or inherited from a pre-bound exercise API key that
was created with --model/--effort (either satisfies the requirement).
--coding-harness records the agent interface independently of the model. Use
Claude Code for Claude, Codex for GPT/OpenAI, Deep Code for DeepSeek,
Grok Build for Grok, Kimi Code for Kimi (including model ID k3), ZCode
for GLM, and the actual native harness for other models.
Known families are inferred for legacy clients, but crossed or custom setups
must set it explicitly. The historical claude-codex-* runs used Claude
inside Codex and therefore report Codex. --skills and --autonomy remain
optional but strongly encouraged; missing values there are returned as
non-fatal warnings.
Record the instructions that created the run with --prompt or
--prompt-file, for example harness run start ... --prompt-file prompt.md.
The Account run form requires the complete Original run prompt, and
harness admin launch records its --goal plus --prompt automatically.
Reports store this text once per run and show it in a collapsed
Original prompts section. Existing runs without this metadata are labeled
as not recorded; report generation does not invent or backfill prompt text.
On GPU-backed connectors (tensara, local tensara, GPU Mode) a run can also
declare the GPU it targets with --gpu, for example --gpu H100. This pins the
run: submissions inherit the GPU automatically and a conflicting
harness submit --gpu is rejected, so one run never mixes results from two
GPUs. The same --gpu flag exists on harness admin create-run-token and
harness admin launch so pre-bound tokens carry the GPU to workers. Dashboards
record the GPU per candidate and filter strategy comparisons to one GPU by
default; mixing GPUs in one view is an explicit opt-in there.
Before the first submission, and after resuming work, the agent must ping the run:
harness run ping --event start --note "starting work"
harness run ping --event resume --note "resuming work"
harness run ping --event activity --note "actively optimizing" # every <=5m
Each ping gives Harness a server timestamp. Start/resume establishes a session boundary; periodic activity prevents long, genuinely active tool calls from being mistaken for idle time. Do not send activity pings while idle or complete.
Read the run's canonical trusted accounting progress with:
harness run progress
This run-token-scoped read returns active time, elapsed time, working tokens,
their sources, and measurement timestamps. It advances through trusted
candidate and ping timestamps, uses the same active-time heuristic as reports,
and does not count the read itself as activity. It is not a replacement for
required start/resume and periodic activity pings. Supervisors should use this
command instead of parsing dashboard HTML or inferring latest progress from
harness best; the best candidate can be older than the latest measurement.
Agent Submission Workflow¶
A normal solving agent loop is:
harness context
harness exercise
harness run current
harness run ping --event start --note "starting work"
harness run progress
harness submit path/to/solution \
--label c001-baseline \
--notes "baseline candidate" \
--idempotency-key c001-baseline \
--total-tokens 123456 \
--usage-source codex_usage \
--usage-confidence exact \
--tokens-total-source codex_goal
harness best
harness history
harness refresh
For Paradigm Puzzles, submit the file shape returned by harness exercise.
The twelve active API exercises use Solidity, Rust, Python, plain text, packing
JSON, or ONNX depending on the scoped exercise. --label is also used as the
upstream strategy/model name when the API accepts one. ScoreBench validates
AMM, Prop AMM, QEC, and Packing before consuming a cooldown; it checks venue
cooldowns before all SSE submissions; and it keeps Lean Semantics pending until
harness refresh observes terminal adjudication. Never give a worker the
Paradigm pp_... key or call the Paradigm submit endpoint directly.
For connectors that expose website data through Harness, inspect it through the CLI instead of using connector credentials directly:
harness leaderboard
harness solutions --lang <LANG>
harness inspect-solution <solution_id>
harness solve-form --language <LANG>
HighLoad agents should use harness solve-form and harness solutions to see
available compiler defaults and competitor compiler choices. Compiler and flag
changes are part of the optimization search; record them in --notes and use a
new --idempotency-key when they change. Use the language for the current
candidate, such as CPP, RUST, GO, CSHARP, or ZIG; do not assume C++.
harness exercise returns HighLoad language metadata including languages,
defaultLanguage, and defaultFilenames. harness solve-form --language RUST
fetches the upstream /solve/RUST form and returns availableLanguages,
defaultFilenames, compiler, and compilerArgs with CSRF/default source
redacted. Additional safe language ids may be enabled by connector config, so
agents should prefer the metadata returned by Harness over hard-coded language
lists.
Connector-specific options can be added when required:
harness submit sol.cu \
--label leaky-relu-v1 \
--notes "simple CUDA kernel" \
--idempotency-key leaky-relu-v1 \
--solution-file sol.cu \
--language cuda \
--gpu T4 \
--total-tokens 123456 \
--usage-source codex_usage \
--usage-confidence exact \
--tokens-total-source codex_goal
Do not resubmit just to check status. Use:
harness refresh
Some connectors take several minutes. Keep refreshing until the candidate is terminally scored or failed.
Scoped Submission Invalidation¶
If a candidate later turns out to be invalid, exploity, or based on a false assumption, mark it invalid instead of hiding it or rewriting history:
harness invalidate <candidate_id> \
--reason "exploit: memoizes exact matrix inputs instead of general multiplication" \
--meta class=exploit
Omit <candidate_id> only when invalidating the latest candidate visible to the
current run token:
harness invalidate --reason "bug: latest candidate used an invalid assumption"
Invalidation is scoped. An agent can invalidate only candidates visible to its
current run token. It does not delete evidence: immutable bundles, raw connector
payloads, scores, logs, token data, and history remain intact. The candidate
status becomes invalidated.
harness history includes an audit object with the invalidation reason,
actor, timestamp, metadata, and any later reinstatement. Read that reason before
changing or resubmitting descendants of an invalidated candidate.
Invalidated candidates remain visible in history and exports for auditability, but Harness excludes them from:
harness best- best-so-far curves
- promotion decisions
- dashboard winner calculations
If a contract review proves the invalidation was incorrect, append a reinstatement instead of editing or deleting the old event:
harness reinstate <candidate_id> \
--reason "contract correction: the documented input domain permits this specialization"
For new invalidations Harness restores the exact status captured at invalidation
time. Legacy rows without that field infer scored, failed, or submitted
from preserved score evidence; --restore-status is available for an audited
operator correction. Reinstatement is scoped to candidates visible to the
current run token.
Recent example:
harness invalidate profile_local_tensara_josu_cand_0533 \
--reason "device-side exact input comparison and cached output reuse is not a valid general square matrix multiplication submission"
After regenerating the local_tensara / square-matmul dashboard, that candidate
is marked INVALIDATED. The affected run falls back to
profile_local_tensara_josu_cand_0529 at 8078.938681941922 us.
Token Accounting¶
Every submission must include a cumulative, run-relative token snapshot.
Required field:
--total-tokens <integer>
Recommended provenance fields:
--usage-source codex_usage
--usage-confidence exact
--tokens-total-source codex_goal
Agents must not invent token counts. If no exact source is available, the agent should stop before submitting and ask for a supervised runner or visible exact usage counter.
At the end of a run, record final run usage:
harness run usage \
--total-tokens 10643192 \
--usage-source codex_usage \
--usage-confidence exact \
--tokens-total-source final_goal_usage
If exact input/output breakdowns are available, include them. Do not invent
breakdown fields. Grok's native aggregate includes cache reads, so Grok runs
must use the installed ScoreBench skill's token_usage.py --grok-jsonl parser;
the server rejects aggregate-only Grok usage instead of recording an inflated
working-token total.
The dashboard derives API-equivalent cost from these counters and its versioned
public list-price table. Estimated values use a ~ prefix. See
API Cost Accounting for the price table, fallback rules,
and exclusions.
Idempotency¶
Use --idempotency-key for each candidate.
Retry with the same key only when retrying the exact same candidate after a network error, timeout, or uncertain response. If the source code, compiler, GPU, exercise, or submission semantics change, use a new idempotency key.
Harness rejects reuse of an idempotency key with different content.
Submission Limits¶
harness context reports the effective per-run submission limits. By default a
run can create at most 1,000 candidates, retain 2 GiB of compressed candidate
bundles, report at most 100 million normalized working tokens, and make 30 new
submissions per rolling minute. Experiments can override these values.
Exhausted candidate, artifact, or token budgets return HTTP 409. Submission
throttling returns HTTP 429 with Retry-After. Retrying an already accepted
idempotency key remains valid and does not call the connector again. Token
totals that are unusual for elapsed run time but below the hard ceiling are
kept with a visible suspect trust warning.
Dashboards And Reports¶
Harness writes reports from the SQLite ledger and immutable artifacts.
The web UI separates the chart view from management controls:
/ui/reports/: chart dashboard, redirected to/ui/reports/strategy-compare.html./ui/runs: personal Runs page with search and isolated dashboard links. Hide locally is reversible and affects only your normal comparisons; Publish publicly is explicit and off by default; Delete is permanent./ui/keys: create and manage scoped exercise API keys under Account./ui/docs/: searchable MkDocs documentation.
Important report files:
report.json: structured data.report.csv: candidate table.progress.tsv: canonical deterministic progress log.progress-details.tsv: debug and provenance log.strategy-compare.html: interactive comparison dashboard.
The strategy comparison dashboard is the main view for evaluating approaches. It compares runs by:
- best score trajectory
- first accepted candidate
- time to threshold
- token spend
- API-equivalent model cost
- model and coding-harness attribution
- failures and rejections
- promoted candidates
- final best score
The dashboard can compare independent runs across time, filter by model or
coding harness, and include external player rows when connector data supports
it. Only best run by can retain the strongest scored run per model, coding
harness, experimental skill set, or any combination of those dimensions. Basic
infrastructure skills such as scorebench do not count as experimental skills.
The winner is computed inside the selected time window, after the current scope,
Relevant/All mode, and manual variant selection; exercises use their configured
lower- or higher-is-better direction. Candidate details and
progress-details.tsv report the coding harness; Export Studio receives only
the runs visible in the dashboard and can group or split comparisons further.
Logs And Debugging¶
Every HTTP response includes:
X-Harness-Trace-Id: trc_...
When a command fails, preserve the exact error and trace ID.
Search logs:
TRACE_ID=trc_...
rg "$TRACE_ID" /home/josu/dev/harness/runs/highload_sum_of_prime_numbers/logs
Log files:
runs/highload_sum_of_prime_numbers/logs/harness.jsonl
runs/highload_sum_of_prime_numbers/logs/trace.jsonl
runs/highload_sum_of_prime_numbers/logs/errors.jsonl
Logs redact cookies, bearer tokens, passwords, CSRF values, submitted bundle bodies, and other secret-bearing fields.
Security Rules¶
Do not give agents:
- Harness user password
- browser cookies
~/.config/harness/cli.json- connector API keys
- connector cookies
run_state.json- credential env files
- another run's token
Give agents only:
export HARNESS_URL=https://scorebench.dev/
export HARNESS_RUN_TOKEN=hrun_...
The CLI user profile can create and manage run tokens for that user. A worker run token can only operate inside its own scope.
Session Lifetime And Revocation¶
Browser and CLI sessions last one year unless revoked.
Use the Account page to revoke sessions. Revoking the current browser session signs that browser out. Revoking a CLI session invalidates the local CLI profile until it logs in again.
Expired sessions stay expired. Harness does not reactivate old expired sessions when the TTL policy changes.
Connector Notes¶
Use docs/connectors.md as the connector reference. It has a section for each
current connector:
fake: deterministic local test connector.local_tensara: private Tensara deployment.public_tensara: public Tensara athttps://tensara.org.highload: HighLoad.fun cookie-authenticated compute submissions.cpumode: CPU.mode API submissions and job polling.gpumode: GPU Mode / Popcorn proxy submissions.vliw: queued private VLIW judging with local instruction extraction.paradigm_puzzles: the twelve active Paradigm Puzzles API submission contracts.github_pr: deterministic dry-run or real PR transport.
The short rule for every connector is the same: agents submit only through Harness, while Harness owns the connector credential, platform request, raw response, normalized score, refresh behavior, and report evidence.
Operational Commands¶
Check service status:
sudo systemctl status harnessd-highload-sum.service
Restart service:
sudo systemctl restart harnessd-highload-sum.service
Tail service logs:
sudo journalctl -u harnessd-highload-sum.service -f
Check the public login page:
curl -sS https://scorebench.dev/ui/login -D - -o /dev/null
Common Problems¶
HARNESS_RUN_TOKEN is required¶
The agent does not have a scoped run token in the environment. Create one from
Account > Exercise API Keys or with harness admin create-run-token, then pass
it to the agent.
run needs a name¶
The token was created without a pre-bound run name. The agent must run:
harness run start --id run001 \
--skills scorebench \
--model gpt-5-codex \
--coding-harness Codex \
--effort high \
--autonomy autonomous
submit requires a token snapshot¶
The agent tried to submit without --total-tokens. The agent must provide an
exact run-relative token count.
scoped to exercise¶
The run token is bound to a different exercise. Create a new run token for the desired exercise.
CLI login works but agents cannot submit¶
CLI login is not the same as an agent run token. Create a scoped run token
and pass HARNESS_RUN_TOKEN to the agent.
Dashboard shows no candidates¶
Check:
harness context
harness run current
harness history
Make sure the agent is using the expected HARNESS_RUN_TOKEN and that it has
actually submitted candidates through Harness.
Related Docs¶
docs/middleware-protocol.md: HTTP schema and exact agent contract.docs/connectors.md: connector-by-connector operator and maintainer reference.docs/architecture.md: system architecture and data model.docs/public-deployment.md: Nginx and systemd deployment notes.https://github.com/josusanmartin/scorebench-skill: agent-facing Codex skill.