Skip to content

Releases: shayuc137/sshq

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 02 Aug 13:47

Changelog

  • e11651f chore(release): prepare v0.4.1
  • dea93d2 docs(skill): add Windows non-ASCII output recipes reference
  • 379620f docs(skill): generate global flags and pin the hand-written tables to code
  • 3c9945f feat(exec): add --raw for envelope-free output with exit code passthrough
  • 7d4d26f feat(output): stamp every envelope with protocol sshq/3
  • 7f0a147 fix(cluster): report exit_code null for hosts that never ran
  • 94fd4f4 fix(cp): honor --timeout on the daemon path and drop the inherited default
  • 6cddafb fix(output): classify dial and run-phase errors instead of internal_error
  • 4cb6d2c style: gofmt alignment drift in policy.go and exec_test.go
  • 823ee18 test(contract): publish envelope JSON Schema and golden contract tests

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 11 Jul 12:12

BREAKING: envelope schema v3

JSON envelopes and process exit codes are redesigned around one rule: the output explains itself. Anything consuming the v2 envelope must update. See CHANGELOG for the full list:

  • Success is {"data": ...} (exec adds a top-level exit_code); errors are {"error": {"code", "hint", "action"}}. The ok and schema_version fields are gone.
  • 14 machine-readable error.code values; result_indeterminate marks operations that may have executed and must never be blindly retried.
  • Process exit codes are tri-state: 0 good answer, 1 completed with a bad answer, 2 sshq failed. Remote exit code passthrough is removed.
  • exec data.host is now data.alias; update --check exits 0 when an update is available (reverses v0.3.1).

Upgrading from v0.3.x with sshq update

The binary updates correctly, but the old updater may print skill_error: "new binary reported an unknown skill update error" and exit 2 at the end. This is a false alarm: the old binary cannot parse the new binary's v3 envelope when refreshing skills. Run sshq skill status to confirm — skills are updated. This affects only the one-time jump from v0.3.x.

Also in this release

  • Daemon freshness: ~/.ssh/config hot-reload and a shared shell-profile cache — config and cache changes apply without restarting the daemon; new sshq cache clear.
  • READMEs rewritten in both languages; sudo-free installation.

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 11 Jul 03:08

Changelog

  • 71a46ae ci(release): drop versioned archive names, keep stable names only
  • 9131675 ci(release): publish stable assets and test updater platforms
  • ad33d3b feat(update): add secure self-update and Windows shell detection
  • 012d55d test(skill): derive version assertions from version.Number()

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 10 Jul 13:44

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)

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 02 Jul 09:38

What's new

Security layer

  • Encrypted credential store — passwords encrypted with age using SSH public key. sshq credential set/list/delete.
  • Capability policy — command whitelist/blacklist, path whitelist, per-host override/append. sshq policy validate/check/list/grant/revoke.
  • Tunnel forward whitelistlocal_forward_whitelist / remote_forward_whitelist restrict tunnel targets. Supports exact match, port wildcard, port range, host wildcard.
  • Temporary grantssshq policy grant with TTL, requires terminal (agents cannot self-grant), never overrides blacklists.
  • Audit logging — JSONL metadata for all operations. Fail-closed. sshq audit query CLI.

New commands

  • sshq docs --verify — detect drift between command tree and skill reference docs.
  • sshq policy check --local-forward/--remote-forward — test tunnel forward policy decisions.

CLI improvements

  • sshq skill install --codex / --project — simplified from --target/--scope.
  • Connecting status moved to verbose — stderr silent by default.

Documentation

  • README rewritten: problem-driven intro, TTY before/after demo, security model, platform-specific install (no Go required).
  • All 8 bilingual guides updated with policy/audit coverage.
  • SKILL.md restructured: environment checks, safety confirmations, JSON-first error handling.
  • Reference docs enhanced with output fields, exit codes, and agent handling notes.

Install

# Linux amd64
curl -L https://github.com/shayuc137/sshq/releases/download/v0.2.0/sshq_0.2.0_linux_amd64.tar.gz | tar xz
sudo mv sshq /usr/local/bin/

# macOS (Apple Silicon)
curl -L https://github.com/shayuc137/sshq/releases/download/v0.2.0/sshq_0.2.0_darwin_arm64.tar.gz | tar xz
sudo mv sshq /usr/local/bin/

# Or with Go
go install github.com/shayuc137/sshq/cmd/sshq@v0.2.0

Full changelog: https://github.com/shayuc137/sshq/blob/main/CHANGELOG.md

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 28 Jun 12:54

Changelog

  • 006e923 feat: C1 config parser and host commands (ls/search/info)
  • 2647a26 feat: C1 remote profile detection and cache
  • 3cfd2e6 feat: C1 sshq cp with SFTP engine
  • 412b634 feat: C2 SSH connect and exec command
  • a19f124 feat: C2 SSH raw stream fallback for cp
  • 94efc60 feat: C2 multi-shell exec with --script-file
  • 3e81519 feat: C3 Windows encoding transcoding and transfer guard
  • 7369733 feat: C3 daemon with connection pool and streaming IPC
  • 7431c4e feat: C3 server-to-server streaming relay
  • f49c006 feat: C4 TCP probe command with batch support
  • ad2d474 feat: IPC v2 protocol upgrade — envelope + typed payload
  • 166541d feat: Phase 0 project skeleton
  • 3cf675e feat: ProxyJump support with recursive chain resolution
  • 6c8e2ba feat: SSH tunnel management (local + remote forward)
  • 7da793b feat: add sshq skill package and docs generator
  • a41a656 feat: auto stdin injection for Windows shells
  • 6573822 feat: auto-generate CLI command reference docs
  • 0388d8e feat: cluster concurrent exec with tag/env filtering
  • b1f69d3 feat: config CRUD — add, set, remove SSH hosts via CLI
  • eb4367c feat: exec pipeline — shell override, timeout, alias shortcut
  • c4a421b feat: fix --env filter, add cluster --hosts, env key compat
  • 7aa8f97 feat: sshq skill install/export/status with embedded skill files
  • 766de23 feat: trust command and structured SSH error messages
  • b53278c fix: Phase 4.5 — close acceptance gaps before Phase 5
  • 331b7ad fix: Windows profile detection and SFTP PosixRename fallback
  • 1a28a48 fix: address trellis-check findings
  • a12c7d7 fix: align go.mod version to 1.26.0
  • 8f081e7 fix: handle MSYS2/Cygwin detection and refine transfer guard
  • 324fa88 fix: handle SIGINT/SIGTERM for transfer cleanup
  • 93ab339 fix: quality check fixes — cluster fallback, proxy cycle guard, sync
  • 65ef00a fix: remove unused stub function and Tunnel struct fields
  • 89b4303 init: project skeleton with MIT license
  • f71852f refactor: architecture cleanup — daemon dispatch, stubs, cache, trust, verbose
  • b041752 refactor: deepen output.Writer — TTY auto-detect, kill compact format
  • 4e78480 refactor: introduce sshclient.Client wrapper type
  • eece836 style: gofmt Phase 1-3 legacy files