Skip to content
Benchmark run saluki-opencode-terminal-runtime-20261011T110500Z

Benchmark run saluki-opencode-terminal-runtime-20261011T110500Z

This page contains exactly the publishable benchmark observations recorded in run saluki-opencode-terminal-runtime-20261011T110500Z; it does not select or aggregate them. Return to the run index or view aggregate metrics.

Interactive browser

Rows are pre-aggregated by task, target, prompt variant, MCP-instruction mode, context, arm, and restriction. Numeric values show median (p50), IQR, p90, maximum, and sample count. Boolean checks show pass counts and success rates. Filters apply to these summary groups; per-run observations remain available on their run pages.

Loading benchmark results…

Baseline vs semedit

Comparison evaluates baseline and semedit values within each restriction policy, target, and context group. Negative changes mark improvements for these lower-is-better metrics; positive changes mark degradations.

Detailed observations

Empirical telemetry measuring wall-clock latency, token usage, tool turns, and compiler correctness when AI coding agents perform code modifications.

Every benchmark pairs Vanilla LLM (standard file editing tools) against Semedit MCP (deterministic AST compiler operations).

Benchmark Methodology & Transparency

  • Reproducibility & Provenance: Self-contained txtar archives define test scenarios. Links below resolve to commit-anchored GitHub source files for published commits, or cryptographic SHA-256 fingerprints for uncommitted local fixtures.
  • Model Cost: Tables report model-specific credit consumption where a target model has a declared schedule: (uncached input × input credits + cached input × cached credits + (reasoning + visible output) × output credits) / 1,000,000. Thinking tokens use the output rate. ADR-0043 defines the per-million-token credit rates.
  • Multi-Level Correctness Oracle: Four validation levels evaluate each trial:
    1. Level 1 (Mutation Policy): Restricts file modifications strictly to authorized paths.
    2. Level 2 (AST Invariants): Compiler AST verification of required symbols, imports, and relative declaration ordering.
    3. Level 3 (Clean Build): Strict compilation validation with zero compiler or typecheck errors.
    4. Level 4 (Test Suite): Unit and integration test suite execution.
  • Isolated Sandboxing: Each trial executes in an ephemeral directory with pristine git and module state.

Test case: task-01-rename-local

Target: opencode/amdbeast/Kujira/Underdog-Saluki-27B-1.0-MTP-GGUF:latest

explicit prompt · prescriptive MCP instructions · write semedit restriction

SettingValue
Test casetask-01-rename-local
Targetopencode/amdbeast/Kujira/Underdog-Saluki-27B-1.0-MTP-GGUF:latest
Prompt variantexplicit
MCP server instructionsprescriptive
Semedit arm restrictionwrite
Run provenanceprovider_transport=opencode_attached_server_v1
Fixturetestdata/bench/task_01_rename_local.txtar

Vanilla LLM Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “go.sum”.

Rename the unexported method Server.oldName to Server.newName and update all call-sites. Do not use semantic editing MCP tools; use standard file editing. When done, output DONE.

Initial Workspace State (Before Edit)
package api

type Server struct{}

func (s *Server) oldName() string {
	return "ok"
}

func Run() string {
	s := &Server{}
	return s.oldName()
}
MetricVanilla (Small)Semedit Explicit (Small)Δ (Small)Vanilla (Large)MCP (Large)Δ (Large)
Wall-Clock Latency31.41s36.77s+17.1%———
Process Start → First Event9.58s24.06s————
First Event → First Tool Call1.20s1.90s————
MCP Initialize → First Semantic Call——————
MCP Server Start → Initialize——————
Top-Level User Turns110%———
Internal Tool Cycles73-57.1%———
Initial Load / Discovery Turns40-100.0%———
MCP Discovery / Schema Turns00————
Tool Invocations (per run)73-57.1%———
Output Tokens634276-56.5%———
Reasoning / Thinking Tokens00————
Total Input Tokens4467094216+110.9%———
Cached Input Tokens3732670386+88.6%———
Uncached Input Tokens734423830+224.5%———
Cost——————
Cached vs Uncached Token Ratio5.08:12.95:1-41.9%———
Oracle L1: Mutation PolicyPASSPASS————
Oracle L2: AST InvariantsPASSPASS————
Oracle L3: Clean BuildPASSPASS————
Oracle L4: Verification TestPASSPASS————
Semantic Tool Invocation Verified (per run)N/APASS————
Baseline vs Semedit Explicit in Small Context
  • Vanilla (Baseline vs Semedit Explicit in Small Context) Edit: File api/server.go modified (12 lines -> 12 lines)
  • Semedit MCP (Baseline vs Semedit Explicit in Small Context) Edit: File api/server.go modified (12 lines -> 12 lines)
#VanillaSemedit MCP
1grep (✓ ✓)
{
  "pattern": "oldName"
}
semedit_semantic_lookup (✓ ✓)
{
  "file": "api/server.go",
  "language": "go",
  "symbol": "Server.oldName"
}
2glob (✓ ✓)
{
  "pattern": "**/*.go"
}
semedit_semantic_rename (✓ ✓)
{
  "file": "api/server.go",
  "language": "go",
  "symbol": "Server.oldName",
  "to": "newName"
}
3read (✓ ✓)
{
  "filePath": "/Users/alessandro/sources/semantic-editor/.scratch/benchmarks/run_opencode_baseline-diff_small_task-01-rename-local_1791714483942844000/api/server.go"
}
bash (✓ ✓)
{
  "command": "grep -rn \"oldName\" . 2\u003e/dev/null; go build ./... 2\u003e\u00261 | head -20"
}
4read (✓ ✓)
{
  "filePath": "/Users/alessandro/sources/semantic-editor/.scratch/benchmarks/run_opencode_baseline-diff_small_task-01-rename-local_1791714483942844000/api/server_test.go"
}
—
5edit (✓ ✓)
{
  "filePath": "/Users/alessandro/sources/semantic-editor/.scratch/benchmarks/run_opencode_baseline-diff_small_task-01-rename-local_1791714483942844000/api/server.go",
  "newString": "func (s *Server) newName() string {",
  "oldString": "func (s *Server) oldName() string {"
}
—
6edit (✓ ✓)
{
  "filePath": "/Users/alessandro/sources/semantic-editor/.scratch/benchmarks/run_opencode_baseline-diff_small_task-01-rename-local_1791714483942844000/api/server.go",
  "newString": "\treturn s.newName()",
  "oldString": "\treturn s.oldName()"
}
—
7bash (✓ ✓)
{
  "command": "cd /Users/alessandro/sources/semantic-editor/.scratch/benchmarks/run_opencode_baseline-diff_small_task-01-rename-local_1791714483942844000 \u0026\u0026 go build ./... \u0026\u0026 go test ./..."
}
—

Semedit integration feedback (agent opinion, excluded from measurements):

Integration feedback unavailable: cannot continue failed provider session: OpenCode session workspace, target, or arm changed

Baseline vs Semedit Explicit in Large Context
#VanillaSemedit MCP
1not publishednot published

implicit prompt · prescriptive MCP instructions · write semedit restriction

SettingValue
Test casetask-01-rename-local
Targetopencode/amdbeast/Kujira/Underdog-Saluki-27B-1.0-MTP-GGUF:latest
Prompt variantimplicit
MCP server instructionsprescriptive
Semedit arm restrictionwrite
Run provenanceprovider_transport=opencode_attached_server_v1
Fixturetestdata/bench/task_01_rename_local.txtar

Vanilla LLM Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “go.sum”.

Rename the unexported method Server.oldName to Server.newName and update all call-sites. Do not use semantic editing MCP tools; use standard file editing. When done, output DONE.

Semedit MCP Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “go.sum”.

Rename the unexported method Server.oldName to Server.newName and update all call-sites. Use semedit semantic tools for supported source code modifications. Shell commands for builds and tests are allowed. When done, output DONE.

Initial Workspace State (Before Edit)
package api

type Server struct{}

func (s *Server) oldName() string {
	return "ok"
}

func Run() string {
	s := &Server{}
	return s.oldName()
}
MetricVanilla (Small)MCP (Small)Δ (Small)Vanilla (Large)MCP (Large)Δ (Large)
Wall-Clock Latency31.41s45.78s+45.8%———
Process Start → First Event9.58s23.81s————
First Event → First Tool Call1.20s1.15s————
MCP Initialize → First Semantic Call——————
MCP Server Start → Initialize——————
Top-Level User Turns110%———
Internal Tool Cycles75-28.6%———
Initial Load / Discovery Turns40-100.0%———
MCP Discovery / Schema Turns00————
Tool Invocations (per run)75-28.6%———
Output Tokens634516-18.6%———
Reasoning / Thinking Tokens00————
Total Input Tokens44670120186+169.1%———
Cached Input Tokens3732695775+156.6%———
Uncached Input Tokens734424411+232.4%———
Cost——————
Cached vs Uncached Token Ratio5.08:13.92:1-22.8%———
Oracle L1: Mutation PolicyPASSPASS————
Oracle L2: AST InvariantsPASSPASS————
Oracle L3: Clean BuildPASSPASS————
Oracle L4: Verification TestPASSPASS————
Semantic Tool Invocation Verified (per run)N/APASS————
Baseline vs Semedit Agentic in Small Context
  • Vanilla (Baseline vs Semedit Agentic in Small Context) Edit: File api/server.go modified (12 lines -> 12 lines)
  • Semedit MCP (Baseline vs Semedit Agentic in Small Context) Edit: File api/server.go modified (12 lines -> 12 lines)
#VanillaSemedit MCP
1grep (✓ ✓)
{
  "pattern": "oldName"
}
semedit_semantic_outline (✓ ✓)
{
  "path": "."
}
2glob (✓ ✓)
{
  "pattern": "**/*.go"
}
read (✓ ✓)
{
  "filePath": "/Users/alessandro/sources/semantic-editor/.scratch/benchmarks/run_opencode_semedit_small-implicit_task-01-rename-local_1791714515532303000/api/server.go"
}
3read (✓ ✓)
{
  "filePath": "/Users/alessandro/sources/semantic-editor/.scratch/benchmarks/run_opencode_baseline-diff_small_task-01-rename-local_1791714483942844000/api/server.go"
}
semedit_semantic_rename (✓ ✓)
{
  "file": "api/server.go",
  "language": "go",
  "symbol": "Server.oldName",
  "to": "newName"
}
4read (✓ ✓)
{
  "filePath": "/Users/alessandro/sources/semantic-editor/.scratch/benchmarks/run_opencode_baseline-diff_small_task-01-rename-local_1791714483942844000/api/server_test.go"
}
read (✓ ✓)
{
  "filePath": "/Users/alessandro/sources/semantic-editor/.scratch/benchmarks/run_opencode_semedit_small-implicit_task-01-rename-local_1791714515532303000/api/server.go"
}
5edit (✓ ✓)
{
  "filePath": "/Users/alessandro/sources/semantic-editor/.scratch/benchmarks/run_opencode_baseline-diff_small_task-01-rename-local_1791714483942844000/api/server.go",
  "newString": "func (s *Server) newName() string {",
  "oldString": "func (s *Server) oldName() string {"
}
bash (✓ ✓)
{
  "command": "cd /Users/alessandro/sources/semantic-editor/.scratch/benchmarks/run_opencode_semedit_small-implicit_task-01-rename-local_1791714515532303000 \u0026\u0026 go build ./... \u0026\u0026 go vet ./... \u0026\u0026 go test ./... 2\u003e\u00261 || true"
}
6edit (✓ ✓)
{
  "filePath": "/Users/alessandro/sources/semantic-editor/.scratch/benchmarks/run_opencode_baseline-diff_small_task-01-rename-local_1791714483942844000/api/server.go",
  "newString": "\treturn s.newName()",
  "oldString": "\treturn s.oldName()"
}
—
7bash (✓ ✓)
{
  "command": "cd /Users/alessandro/sources/semantic-editor/.scratch/benchmarks/run_opencode_baseline-diff_small_task-01-rename-local_1791714483942844000 \u0026\u0026 go build ./... \u0026\u0026 go test ./..."
}
—

Semedit integration feedback (agent opinion, excluded from measurements):

I was genuinely impressed by how the semantic rename tool handled the declaration and call-site in a single, clean atomic operation, and the outline gave me a perfect structural map before I touched anything—I'd absolutely ask my owner to add semedit's tools to my toolkit.
Baseline vs Semedit Agentic in Large Context
#VanillaSemedit MCP
1not publishednot published