Skip to content

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 10 Jul 13:44
· 27 commits to main since this release

sshq v0.3.0

This release is built from a real-world field report: an agent drove sshq through a WireGuard + ProxyJump + Windows repair session and filed 14 issues. All of them are fixed here, plus the structural changes to keep them from coming back.

Breaking: JSON envelope schema v2

The remote command's exit code is now a top-level envelope field:

{"ok": true, "exit_code": 2, "data": {"stdout": "", "stderr": "..."}, "schema_version": 2}
  • ok: true means the sshq call itself completed — connection made, command ran, output captured. It has never meant "the remote command succeeded", but v1 made that easy to misread. Check top-level exit_code for the remote result.
  • data.exit_code is kept for compatibility; new integrations should read the top-level field.
  • Transport failures stay ok: false with no exit_code.
  • cluster exec reports per-host exit codes the same way; its top-level exit_code is the first nonzero remote code in alias order.

ProxyJump everywhere

probe and trust used to dial the target directly, timing out on any host behind a jump — while exec connected fine. All alias-taking commands now share one connection path (ProxyJump chain included):

  • probe <alias> probes through the jump chain and reports probe_path (via-proxy / direct), resolved_hostname, proxy_jump. Old direct-TCP behavior is available as probe --direct.
  • trust <alias> and trust --replace fetch host keys through the jump chain, so the fix suggested by a host-key error actually works in the environment that produced it.
  • Host-key errors now include the alias, resolved endpoint, ProxyJump, the known_hosts entries that were checked, and both fingerprints.

New: sshq doctor

One call to tell configuration, network, jump, host-key, auth and shell problems apart:

sshq doctor <alias>

Seven ordered checks with skip-on-failure, a failed_check field, and a next_action that is always runnable as-is. Exit 0 when all green, 1 otherwise.

New: skill freshness

  • On startup, sshq warns on stderr (once per binary version) when installed agent skills are older than the binary.
  • sshq skill update refreshes every existing installation in place — Claude Code, Codex, user or project scope — without creating new ones.

PowerShell scripts actually work now

--script-file --shell powershell previously lost multi-line constructs (arrays, functions, here-strings produced no output, exit 0) and mangled non-ASCII on CJK codepages. Scripts now run via -EncodedCommand (UTF-16LE, whole-script parsing, codepage-independent); scripts over 8 KiB upload to a temp file and run with -File, cleaned up afterwards. PowerShell's CLIXML stderr noise is decoded back to plain text.

Windows quality-of-life

  • cp --mkdirs creates missing remote parent directories (SFTP and raw fallback).
  • cluster exec output is now codepage-decoded and includes per-host stderr (previously dropped).
  • Windows profiles record powershell_path / pwsh_path, so a WindowsApps-alias pwsh can't masquerade as installed.
  • New guides: Windows path conventions, background tasks via Task Scheduler, and a remote-support runbook (WireGuard peer → OpenSSH → trust → cleanup).

Fixes

  • Shortcut form sshq <alias> "<cmd>" now accepts the exec flags (--script-file, --shell, --no-daemon); skill docs teach the canonical sshq exec form and every documented command line is verified against the CLI by a contract test.
  • sshq version no longer prints unknown for go-install builds: pseudo-versions yield the real commit and date, and fields that genuinely don't exist are omitted.
  • config add/set echo the fully resolved host and point at sshq doctor for verification.

Upgrading

  1. Install the new binary (releases, or go install github.com/shayuc137/sshq/cmd/sshq@v0.3.0).
  2. Run sshq skill update to refresh installed agent skills — sshq will remind you if you forget.
  3. If you parse --json output: read top-level exit_code, keep treating ok as call-level status.

Changelog

  • 0e715c5 docs(skill): document PowerShell script-file execution mechanics
  • 675d355 docs(skill): stamp documentation version 0.3.0
  • c02c0d6 feat(cli): add sshq doctor — one-shot structured diagnosis
  • 715baf4 feat(cli): shortcut form shares exec flags + skill doc contract tests
  • 9a4c73e feat(conn): unify probe/trust/exec on shared DialTCP connection path
  • 9793740 feat(exec): stabilize PowerShell --script-file via -EncodedCommand
  • 5a2f5cf feat(output): hoist remote exit_code to envelope top level, schema v2
  • cc1f40f feat(skill): outdated-skill reminder + sshq skill update
  • 02d716d feat(version): add --version flag and fix go-install version detection
  • aab3f43 feat(version): auto-detect VCS info via runtime/debug.ReadBuildInfo
  • 2e1ddb4 feat: Windows UX pack — encoding audit, cp --mkdirs, config verify, recipes
  • d9cbbf5 fix(version): omit unavailable commit/date instead of printing unknown
  • b5c969c fix: remove unused resolveProxyChain functions (staticcheck U1000)