Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
c13bba5
refactor: extract reusable agent output validation
robbycochran Sep 10, 2026
7f69ac5
docs: define harness architecture boundary
robbycochran Sep 10, 2026
9350359
docs: clarify workflow boundaries and credential model
robbycochran Sep 10, 2026
cbb82fe
docs: name validated agent output
robbycochran Sep 10, 2026
d922b5e
docs: describe interactive workflow debugging
robbycochran Sep 10, 2026
4986fec
feat: accept positional workflow paths
robbycochran Sep 10, 2026
86a5aa8
feat!: scope cli to workflow execution
robbycochran Sep 10, 2026
0d531ab
fix: update workflow command fixtures
robbycochran Sep 10, 2026
3513bda
docs: describe workflow-only command surface
robbycochran Sep 10, 2026
2091575
test: match workflow apply command
robbycochran Sep 10, 2026
016d605
test: assert native sandbox cleanup
robbycochran Sep 10, 2026
e74d8fd
test: preserve lifecycle sandbox name
robbycochran Sep 10, 2026
8da026d
test: accept native sandbox not-found error
robbycochran Sep 10, 2026
a915da3
docs: define harness as declarative OpenShell runner
robbycochran Sep 10, 2026
97f44af
docs: broaden runner intent beyond pr review
robbycochran Sep 10, 2026
a605e27
refactor!: name workflow document OpenShellWorkflow
robbycochran Sep 10, 2026
7bb3f5d
docs: clarify provider bootstrap ownership
robbycochran Sep 10, 2026
97d5781
refactor!: simplify workflow document format
robbycochran Sep 10, 2026
c60d5c0
fix: align workflow grouping and validation docs
robbycochran Sep 10, 2026
e7d03bb
fix: allow bounded review of larger refactors
robbycochran Sep 10, 2026
d6dbd31
refactor: derive provider references from workflow use
robbycochran Sep 10, 2026
72f03f4
docs: state sandbox cleanup default
robbycochran Sep 10, 2026
6834445
ci: update actions to Node 24 releases
robbycochran Sep 10, 2026
2eaf547
fix: close workflow contract review gaps
robbycochran Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .agents/skills/validate/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ make test-suite
```

This includes config parsing and rendering, CLI behavior, structured output,
and v1alpha1 plan coverage. Some gateway-dependent checks are expected
and version 1 plan coverage. Some gateway-dependent checks are expected
to skip when no gateway is reachable.

### 3. Canonical Kind integration
Expand All @@ -62,7 +62,7 @@ and a working Docker or Podman daemon.
CI=true CONTAINER_CLI=docker make test-kind
```

CI mode is the credential-free, canonical v1alpha1 SDK create/exec/delete
CI mode is the credential-free, canonical version 1 SDK create/exec/delete
lifecycle used by pull-request CI. Substitute `podman` only when its machine is
running. Confirm the temporary cluster is removed unless `KEEP=1` was requested.

Expand Down
6 changes: 3 additions & 3 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ reviews:
provisioning are external platform responsibilities.

Key architecture:
- internal/config/: strict harness.openshell.dev/v1alpha1 model
- internal/config/: strict version 1 flat workflow model
- cmd/workflow_apply.go: apply orchestration and request construction
- internal/run/: SDK-native sandbox lifecycle
- internal/openshell/: credential-free SDK boundary
Expand All @@ -32,7 +32,7 @@ reviews:
- Correct error handling (wrap with context, don't swallow)
- Credential handling (never log secrets, never pass via CLI args if avoidable)
- SDK firewall usage (credential material must not cross internal/openshell)
- Strict v1alpha1 parsing and flag > env > config target precedence
- Strict version 1 parsing and flag > env > config target precedence
- repo clone (happens outside sandbox, git creds never enter unless needed)
- path: "README.md"
instructions: |
Expand All @@ -46,7 +46,7 @@ reviews:
instructions, and upstream references are current.
- path: "profiles/harness-*.yaml"
instructions: |
Canonical workflow scaffolds. Check strict v1alpha1 schema compliance.
Canonical workflow scaffolds. Check strict version 1 schema compliance.
- path: "profiles/providers/**"
instructions: |
OpenShell provider profile examples consumed by platform bootstrap.
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,4 @@ jobs:
- uses: actions/setup-go@v7
with:
go-version-file: go.mod
- uses: golangci/golangci-lint-action@v8
- uses: golangci/golangci-lint-action@v9.3.0
2 changes: 1 addition & 1 deletion .github/workflows/integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ jobs:
install_only: true

- name: Install helm
uses: azure/setup-helm@v4
uses: azure/setup-helm@v5.0.1

- name: Run kind integration
run: make test-kind
Expand Down
6 changes: 2 additions & 4 deletions .github/workflows/pr-review-reusable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,17 +53,15 @@ jobs:
ref: ${{ inputs.harness-ref }}
path: harness
persist-credentials: false
- name: Prepare default review skill
working-directory: harness
run: install -D -m 0644 examples/github-pr-reviewer/skills/pr-review/SKILL.md skills/pr-review/SKILL.md
- name: Install caller skill
if: inputs.skill-path != ''
env:
SKILL_PATH: ${{ inputs.skill-path }}
run: |
[[ "$SKILL_PATH" != /* && "$SKILL_PATH" != *..* ]] || exit 1
test -f "caller/$SKILL_PATH"
install -D -m 0644 "caller/$SKILL_PATH" harness/skills/pr-review/SKILL.md
install -D -m 0644 "caller/$SKILL_PATH" harness/examples/github-pr-reviewer/skills/pr-review/SKILL.md
cmp -s "caller/$SKILL_PATH" harness/examples/github-pr-reviewer/skills/pr-review/SKILL.md
- uses: actions/setup-go@v7
with:
go-version-file: harness/go.mod
Expand Down
10 changes: 6 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,12 @@ policy format. A policy written for the harness should be byte-compatible with
what `openshell-image-builder` generates.

### Provider abstraction
`kind: provider` is an abstraction layer, not a thin wrapper around
`openshell provider create`. The backend may change to gateway.toml entries
(#1886) or K8s CRDs (#1719) as upstream settles. Implement the imperative
CLI backend today. Do not hard-code the execution strategy.
Workflow provider fields are reference-only. Harness verifies that
`inference.provider` and `sandbox.providers` already exist, but never creates,
updates, deletes, stores, or serializes provider credentials. Providers and
their masked proxy configuration are owned by OpenShell or trusted platform
bootstrap. Do not reintroduce a `kind: provider` document or an imperative
provider-management backend.

### Plugin compatibility
The binary may eventually be discoverable as an OpenShell plugin via
Expand Down
25 changes: 14 additions & 11 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,18 @@
## [Unreleased]

### Changed
- `harness apply` now accepts only strict `harness.openshell.dev/v1alpha1`
workflows and executes every sandbox lifecycle through the OpenShell Go SDK,
including uploads, policy, interactive TTY, and cleanup. Local image build
contexts are rejected; use a registry image reference.
- `harness init` and `harness doctor` use the canonical workflow model. Doctor
verifies gateway provider registration and no longer requires local provider
credentials or an OpenShell executable for direct SDK/OIDC targets.
- `apply -o yaml|json` redacts interpolated values and values in provider config
and sandbox environment maps.
- `harness workflow apply` now accepts the strict version 1 workflow format and
executes every sandbox lifecycle through the OpenShell Go SDK, including
uploads, policy, interactive TTY, and cleanup. Local image build contexts are
rejected; use a registry image reference.
- Workflow documents are flat (`version`, `name`, and workflow fields); the
Kubernetes-style `kind`, `apiVersion`, `metadata`, and `spec` envelope was
removed.
- Provider references now come from `inference.provider` and
`sandbox.providers`; the redundant top-level `providers` list was removed.
- Sandboxes are deleted by default; omit `sandbox.keep` for normal runs and set
it to `true` only when debugging a retained sandbox.
- `apply -o yaml|json` redacts interpolated values and sandbox environment maps.
- Cloned repos now use URL-hashed bare mirrors (`~/.cache/harness-openshell/mirrors/`)
plus per-run, self-contained checkouts (`~/.cache/harness-openshell/checkouts/`)
instead of the basename-keyed `repos/` cache. Distinct repositories that share a
Expand All @@ -22,8 +25,8 @@
manually.

### Removed
- The unused `spec.agent.model` field. Select inference models with
`spec.inference.model` and pass agent-specific model flags in `spec.agent.args`.
- The unused `agent.model` field. Select inference models with
`inference.model` and pass agent-specific model flags in `agent.args`.
- The unversioned agent config model, compatibility adapter, `migrate` command,
legacy task/agent flags, CLI sandbox execution bridge, and harness-owned
credentialed-provider bootstrap were removed in a hard cutover. Providers
Expand Down
Loading