Skip to content

feat: harness init, doctor, and docs overhaul#76

Merged
robbycochran merged 12 commits into
mainfrom
rc-docktar
Jun 17, 2026
Merged

feat: harness init, doctor, and docs overhaul#76
robbycochran merged 12 commits into
mainfrom
rc-docktar

Conversation

@robbycochran

@robbycochran robbycochran commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • harness init generates a customized harness.yaml by prompting for entrypoint, providers, and gateway target. Discovers available providers from openshell provider list-profiles.
  • harness doctor validates the environment with a two-phase CheckFunc pipeline: offline checks (openshell binary, target deps, provider env vars) + online checks (provider registration if gateway reachable).
  • Provider names aligned with upstream OpenShell profile IDs across all configs and tests.
  • README rewritten around one-shot task workflows: point a skill at a repo, get results. Marks the project as experimental, explains OpenShell as a foundation layer and the harness as a workflow layer on top. References the upstream operator direction (#1719).
  • Added README docs for profiles/, profiles/providers/, and profiles/gateways/ explaining YAML formats, all four supported providers with credential details, scope policy, and gateway deployment targets.
  • TODO upstream tracking updated: #1886 rejected by core team in favor of operator/CRD path, #1520 and #1814 have no maintainer engagement.

Test plan

  • make test -- all tests pass (vet + 5 packages)
  • harness init -> answer prompts -> generates valid harness.yaml
  • harness doctor -> reports target/provider/openshell status
  • harness doctor -o json -> stable JSON output with no credential values
  • harness init --non-interactive -> writes embedded default

harness init generates a customized harness.yaml by asking entrypoint,
providers, and gateway target. Discovers available providers from
openshell provider list-profiles (falls back to built-in list).
Supports --non-interactive, --force, and --output flags.

harness doctor validates the environment can run the configured sandbox
with a two-phase CheckFunc pipeline:
- Phase 1 (offline): openshell binary, target deps (podman/docker for
  local, kubectl+kind for kind, kubectl+kubeconfig for remote), and
  provider env vars (via openshell provider profile export).
- Phase 2 (online): provider registration status if gateway reachable.

Outputs grouped by target/provider/openshell with -o table|json|yaml.
29 tests covering all codepaths including credential masking.
Rewrite Quick Start to show the three-step onramp: init -> doctor ->
apply. Add init and doctor to the commands reference. Update the hero
code block and flow diagram. Move advanced examples under "More examples"
subsection.
@robbycochran robbycochran marked this pull request as ready for review June 17, 2026 18:02
Two fixes:
- Map harness provider names to OpenShell profile IDs (vertex-local ->
  google-vertex-ai, gws -> google-workspace) so profile export finds
  the right profile.
- Skip env var checks for gateway-managed credentials (those with a
  refresh strategy). Instead check the actual auth state: ADC file for
  vertex, gws auth export for GWS.
podman info --format with .Host.Os fails on podman 5.x (field removed).
Use plain podman info instead and get version from podman version.
Also fall through to docker when podman is installed but not responding.
Init wrote OpenShell profile IDs (google-vertex-ai, google-workspace) as
provider names, but apply expects harness names (vertex-local, gws).
Added harnessProviderName mapping to translate on output.

Simplified gateway targets to local/kind/ocp. Removed 'remote' alias
that had no matching gateway profile.
Rename vertex-local to google-vertex-ai and gws to google-workspace
across the entire codebase. Eliminates the providerProfileType and
harnessProviderName mapping tables that caused init to generate configs
incompatible with apply.

One namespace: harness uses the same provider IDs as openshell.
README: add experimental banner, rewrite intro to explain OpenShell
foundation-layer architecture and the harness as a workflow layer.
Reference upstream operator discussion (#1719) and explain that the
gateway is narrowing to data-plane while control-plane moves to CRDs.

TODO: update upstream issue tracking to reflect core team comments on
#1886 (rejected in favor of operator/CRD path) and note #1520/#1814
have no maintainer engagement.
@robbycochran robbycochran changed the title feat: harness init and doctor commands feat: harness init, doctor, and upstream alignment Jun 17, 2026
Lead with the primary use case: point a skill at a repo, get results.
Example shows cpp-pro skill running against stackrox/collector for
highest-priority remediation. Explains OpenShell as a foundation layer
and the harness as a workflow layer on top. Trimmed reference section
into tables.
@robbycochran robbycochran changed the title feat: harness init, doctor, and upstream alignment feat: harness init, doctor, and docs overhaul Jun 17, 2026
Document the agent config YAML format with all fields, multi-document
composition, provider profiles with credential details for all four
supported providers (github, vertex-ai, atlassian, google-workspace),
scope policy via refresh.scopes, and gateway profiles for all three
deployment targets.
@robbycochran robbycochran merged commit 86fdb91 into main Jun 17, 2026
6 checks passed
@robbycochran robbycochran deleted the rc-docktar branch June 17, 2026 23:21
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.

1 participant