Skip to content

feat(agents): add manifest-driven gator agent#1826

Open
johntmyers wants to merge 36 commits into
mainfrom
feat/gator-gate-skill
Open

feat(agents): add manifest-driven gator agent#1826
johntmyers wants to merge 36 commits into
mainfrom
feat/gator-gate-skill

Conversation

@johntmyers

@johntmyers johntmyers commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

Summary

Add a manifest-driven sandbox agent launcher and the first concrete agent, Gator, for validating and monitoring OpenShell issues and PRs. The launcher packages shared runtime adapters, provider profiles, skills, subagents, and prompts into supervised OpenShell sandboxes so gator can run bounded Codex cycles in watch mode.

Related Issue

None.

Changes

  • Add openshell-agents/run.sh, shared runtime entrypoint, supervisor, Codex harness adapter, and subagent dispatch support.
  • Add the openshell-agents/gator/ manifest, prompt, README, Dockerfile, scoped GitHub/Codex provider profiles, and sandbox policy.
  • Add the gator-gate skill for the gator state machine, validation rules, human-response disposition, reviewer invocation, CI/test gating, and scoped GitHub auth guidance.
  • Add gateway-managed Codex access-token refresh handling and preserve/repair behavior for long-running watch sandboxes.
  • Harden watch mode so transient transport failures, malformed cycle results, and legacy failure statuses retry without exiting the sandbox.
  • Document the agent runtime and provider placeholder behavior in openshell-agents/README.md.

Testing

  • mise run pre-commit passes
  • Unit tests added/updated
  • E2E tests added/updated (if applicable)

Additional checks:

  • bash openshell-agents/runtime/supervisor_test.sh
  • Live gator sandboxes relaunched and observed Ready on docker-dev
  • Verified provider-backed Codex and GitHub placeholder resolution inside gator sandboxes

Checklist

  • Follows Conventional Commits
  • Commits are signed off (DCO)
  • Architecture docs updated (not applicable; agent docs live under openshell-agents/)

@johntmyers johntmyers requested a review from a team as a code owner June 9, 2026 05:15
Comment thread scripts/agents/gator/Dockerfile
Comment thread scripts/agents/run.sh
@elezar

elezar commented Jun 10, 2026

Copy link
Copy Markdown
Member

While exercising the gator state machine on #1850, I hit one transition that is worth clarifying in this PR.

When a PR is in gator:approval-needed and a maintainer approval arrives, gator currently re-checks the PR and stays in gator:approval-needed until the PR is merged or closed. Mechanically that is fine, but the label reads as if approval is still missing after approval has already been received.

Can we make this explicit in the gator support added here? Two reasonable options:

  • Document/comment-template wording: after approval, gator:approval-needed means "maintainer merge decision pending" for an open PR.
  • Add a distinct state such as gator:merge-ready or gator:merge-pending so the post-approval state is not overloaded.

The current behavior is not blocking #1850, but without this clarification users will reasonably ask why an approved PR still says approval-needed.

@copy-pr-bot

copy-pr-bot Bot commented Jun 10, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@johntmyers johntmyers force-pushed the feat/gator-gate-skill branch from a89ff4d to 9779477 Compare June 18, 2026 14:27
@johntmyers johntmyers requested a review from maxamillion as a code owner June 18, 2026 14:27
@github-actions

Copy link
Copy Markdown

Comment thread scripts/agents/README.md
@johntmyers johntmyers force-pushed the feat/gator-gate-skill branch from fec9f3e to cc78ee2 Compare June 26, 2026 19:29
@johntmyers

Copy link
Copy Markdown
Collaborator Author

@drew @elezar refactored to be under scripts/agents and implemented other suggestions w/ the exception of factoring out Ruby. would like to just merge this so its at least in main and can iterate more later.

Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
Comment thread architecture/sandbox.md
where that socket directory is hidden before privilege drop.

Credential placeholders in proxied HTTP requests can be resolved by the proxy
when policy allows the target endpoint. For GCP providers, a loopback metadata

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: This is now not a complete sentence.

(is_service_name || is_cluster_local_service) && labels.iter().all(|label| !label.is_empty())
}

fn uses_reserved_placeholder_revision_namespace(key: &str) -> bool {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are we ok duplicating this function accross the openshell-core and this crate? (It would be nice to at least use a consistent name though).

@elezar elezar left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks @johntmyers.

Happy to get this in and iterate further.

One question would be whether we want to pull out the changes to OpenShell into a more focussed PR and then add the agent skill here? Not a blocker though.

Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants