Skip to content

feat: add Harbor eval runner - #9138

Merged
DOsinga merged 1 commit into
mainfrom
lucas/poc/harbor-devtool
May 20, 2026
Merged

feat: add Harbor eval runner#9138
DOsinga merged 1 commit into
mainfrom
lucas/poc/harbor-devtool

Conversation

@Raptors65

@Raptors65 Raptors65 commented May 11, 2026

Copy link
Copy Markdown
Collaborator

Summary

This is another attempt at adding a way to run Terminal-Bench 2.0 on goose locally.

The approach in #9092 mostly worked, but was a little flawed in that goose still kinda thought it was running outside the benchmark container; even though we gave it tools that took action within the container, its system prompt would still think it was running outside the container (i.e., the "current directory" would be one outside the container). Also, the idea of needing to create custom MCP servers for every file tool that we want to give goose as part of a benchmark doesn't seem like the best long-term approach; ideally it should just work, without needing any additional work for new tools.

So here's another approach. I wouldn't say it's strictly better than the previous one, but the nice thing is that we're not doing anything janky to get tool calls to work within the container. Here, we just take in an already built goose Linux executable as input to a script, and use it to run any Harbor task, which includes Terminal-Bench 2.0. The main downside is that this requires a build step.

For now, this is a script that's separate from the CLI, in the evals folder, more in the style of the existing "open model gym". If/when we do want to add this to the CLI as a goose bench command, that should be fairly easy (only thing is we'll need to bundle the Python files into the executable using include_str! or something). Whether that should be done is a different question, which is why I haven't done this as part of this PR. (For example, one could argue benchmarking is purely a dev tool that shouldn't be exposed to end users through the CLI.)

Testing

I'm currently doing a run of Terminal-Bench using Qwen3.6-27B as the model (via OpenRouter), and the tasks are running successfully (the failures that I do see seem to be model failures and not an issue with how we're running the benchmark)

To test this yourself, the following should work:

cd evals/harbor

caffeinate -dimsu uv run ./run \
  --goose-binary <path-to-linux-executable> \
  --goose-profile <path-to-goose-config-with-credentials> \
  --dataset terminal-bench/terminal-bench-2 \
  --model <model> \
  --trials 1 \
  --concurrency 1 \
  --job-name <some-memorable-job-name>

Related Issues

N/A

Screenshots/Demos (for UX changes)

N/A

@Raptors65

Copy link
Copy Markdown
Collaborator Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@Raptors65
Raptors65 force-pushed the lucas/poc/harbor-devtool branch from 898b0f3 to bb81748 Compare May 11, 2026 19:35
@Raptors65 Raptors65 changed the title poc: add Harbor benchmark runner feat: add Harbor eval runner May 11, 2026
@Raptors65
Raptors65 force-pushed the lucas/poc/harbor-devtool branch from bb81748 to 7f316b3 Compare May 11, 2026 20:13
@Raptors65
Raptors65 marked this pull request as ready for review May 12, 2026 12:30

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7f316b345e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread evals/harbor/goose_harbor/goose_binary.py
@Raptors65
Raptors65 force-pushed the lucas/poc/harbor-devtool branch from 7f316b3 to 964598b Compare May 12, 2026 13:06
@DOsinga DOsinga added the needs_human label to set when a robot looks at a PR and can't handle it label May 13, 2026

@DOsinga DOsinga left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey! The core idea here is solid — the agent adapter in goose_binary.py is the real substance and handles the container setup well (profile routing, non-root ownership, secrets handling).

The main feedback: config.py and its tests feel like generated blubber. You have a 156-line module whose entire job is building a dict and writing it as JSON, with a dataclass that duplicates argparse, single-use 3-line helpers extracted into named functions, a separate validator, a separate writer — all called exactly once. Then 130 lines of tests asserting that the mapping function maps correctly.

Just inline it into runner.py. Parse args, build the dict, write it. That's 30 lines, not a module. Kill the tests that are just asserting the code is implemented the way it's implemented (validation raises ValueError, static method returns a string, write_text writes a file). Keep the tests that cover actual logic: resume detection, mismatch handling, the chown fix, the heredoc avoidance.

Ask yourself for each abstraction: is this called from more than one place? Does it have a branch worth testing? If no to both, inline it.

@Raptors65
Raptors65 force-pushed the lucas/poc/harbor-devtool branch 5 times, most recently from e50a0b9 to aee0a95 Compare May 14, 2026 14:55

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: aee0a9541e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread evals/harbor/goose_harbor/goose_binary.py Outdated
@Raptors65
Raptors65 force-pushed the lucas/poc/harbor-devtool branch 2 times, most recently from 0f43739 to 31c1d91 Compare May 14, 2026 17:55

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 31c1d91ba7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread evals/harbor/goose_harbor/goose_binary.py Outdated
@Raptors65
Raptors65 force-pushed the lucas/poc/harbor-devtool branch from 31c1d91 to 8f0c80f Compare May 14, 2026 18:36

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8f0c80f83f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread evals/harbor/goose_harbor/goose_binary.py
@Raptors65
Raptors65 force-pushed the lucas/poc/harbor-devtool branch from 8f0c80f to 2ec561a Compare May 14, 2026 19:25

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2ec561a2ff

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread evals/harbor/goose_harbor/goose_binary.py Outdated
@Raptors65
Raptors65 force-pushed the lucas/poc/harbor-devtool branch 3 times, most recently from 49670a5 to f1c3f83 Compare May 14, 2026 20:35

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f1c3f83e3a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread evals/harbor/goose_harbor/runner.py Outdated
@Raptors65
Raptors65 force-pushed the lucas/poc/harbor-devtool branch from f1c3f83 to 245883d Compare May 14, 2026 20:54

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 245883d186

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread evals/harbor/goose_harbor/runner.py
Comment thread evals/harbor/goose_harbor/runner.py
@Raptors65
Raptors65 force-pushed the lucas/poc/harbor-devtool branch from 245883d to 82fbbfc Compare May 20, 2026 16:12
@DOsinga
DOsinga added this pull request to the merge queue May 20, 2026
Merged via the queue into main with commit 49f1ade May 20, 2026
21 checks passed
@DOsinga
DOsinga deleted the lucas/poc/harbor-devtool branch May 20, 2026 20:16
lifeizhou-ap added a commit that referenced this pull request May 22, 2026
* main: (38 commits)
  [Prompt injection mitigation] Update pattern-based detection to reduce FPs (#9350)
  feat: add Harbor eval runner (#9138)
  chore(release): bump version to 1.35.0 (minor) (#9150)
  Include request URL in provider error messages (#9232)
  fix(databricks): ensure parallel tool image responses don't interleave tool results (#9241)
  Surface resolved Databricks model metadata (#9206)
  Add unified thinking effort control across all providers (#9242)
  Add Linux desktop Vulkan packages (#9323)
  chore: update canonical model registry (#9331)
  feat: slash commands (built-in, skill, recipe) in acp server (#9238)
  feat: add /goal command for agent self-evaluation before finishing (#9069)
  Feat/summon subagent instructions (#9325)
  feat: open-plugins generalization + skills (#9112)
  feat(hooks): PreToolUse denial (#9304)
  Add support for optional api_key configuration for declarative openai-engine providers (#9202)
  fix(cli): use plain '> ' prompt instead of goose emoji (#9305)
  flag for login shell PATH (#9313)
  Remove popular chat topics from new chat screen (#9307)
  fix: stop killing goosed when a window closes (#9302)
  Remove vendored Windows binaries (#9318)
  ...
shafqatevo pushed a commit to shafqatevo/goose that referenced this pull request Aug 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs_human label to set when a robot looks at a PR and can't handle it

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants