v0.3.0
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: truemeans 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-levelexit_codefor the remote result.data.exit_codeis kept for compatibility; new integrations should read the top-level field.- Transport failures stay
ok: falsewith noexit_code. cluster execreports per-host exit codes the same way; its top-levelexit_codeis 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 reportsprobe_path(via-proxy/direct),resolved_hostname,proxy_jump. Old direct-TCP behavior is available asprobe --direct.trust <alias>andtrust --replacefetch 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 updaterefreshes 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 --mkdirscreates missing remote parent directories (SFTP and raw fallback).cluster execoutput is now codepage-decoded and includes per-host stderr (previously dropped).- Windows profiles record
powershell_path/pwsh_path, so a WindowsApps-aliaspwshcan'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 canonicalsshq execform and every documented command line is verified against the CLI by a contract test. sshq versionno longer printsunknownfor go-install builds: pseudo-versions yield the real commit and date, and fields that genuinely don't exist are omitted.config add/setecho the fully resolved host and point atsshq doctorfor verification.
Upgrading
- Install the new binary (releases, or
go install github.com/shayuc137/sshq/cmd/sshq@v0.3.0). - Run
sshq skill updateto refresh installed agent skills — sshq will remind you if you forget. - If you parse
--jsonoutput: read top-levelexit_code, keep treatingokas 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)