id = "trezor-agent"
name = "trezor-agent"
homepage = "https://github.com/romanz/trezor-agent"
description = "Hardware-based SSH/GPG/age agent."
executables = ["trezor-agent"]
[dotfiles]
paths = ["~/.ssh/agent.conf"]
exclude = []
secret = []
side_effect = false
[commands]
format = 1
label = "Run SSH agent"
description = "Start a hardware-backed SSH agent for one identity: connect, open a shell, run a command, or run in the foreground. The command to run goes after the identity. PIN/passphrase helpers, GPG and age modes are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = true }
[[commands.source]]
id = "src"
kind = "manual"
url = "https://raw.githubusercontent.com/romanz/trezor-agent/HEAD/libagent/ssh/__init__.py"
revision = "2026-10-27"
evidence = """
-v, --verbose
-e, --ecdsa-curve-name CURVE specify ECDSA curve name
--timeout timeout for accepting SSH client connections
--debug log SSH protocol messages for debugging.
--log-file Path to the log file (to be written by the agent).
--sock-path Path to the socket of the agent.
-d, --daemonize Daemonize the agent and print its path
-f, --foreground Run agent in foreground with specified path
-s, --shell run ${SHELL} as subprocess under SSH agent, allowing regular SSH-based tools to be used in the shell
-c, --connect connect to specified host via SSH
identity proto://[user@]host[:port][/path]
ARGUMENT command to run under the SSH agent
trezor-agent -e ed25519 bob@example.com -- rsync up/ bob@example.com:/home/bob
trezor-agent identity@myhost -- COMMAND --WITH --ARGUMENTS
"""
[[commands.field]]
id = "identity"
label = "Identity"
description = "Host identity such as user@host, optionally with port and path."
type = "string"
position = 0
sources = ["src"]
[[commands.field]]
id = "command"
label = "Command to run"
description = "Program and arguments run under the agent (placed after --)."
type = "string"
position = 1
multiple = true
sources = ["src"]
[[commands.field]]
id = "curve"
label = "ECDSA curve"
type = "string"
option = ["--ecdsa-curve-name", "-e"]
suggestions = [{ value = "ed25519", label = "ed25519" }, { value = "nist256p1", label = "nist256p1" }]
sources = ["src"]
[[commands.field]]
id = "connect"
label = "Connect via SSH"
type = "boolean"
option = ["--connect", "-c"]
sources = ["src"]
[[commands.field]]
id = "shell"
label = "Open a shell under the agent"
type = "boolean"
option = ["--shell", "-s"]
sources = ["src"]
[[commands.field]]
id = "foreground"
label = "Run in foreground"
type = "boolean"
option = ["--foreground", "-f"]
sources = ["src"]
[[commands.field]]
id = "sock_path"
label = "Socket path"
type = "path"
option = ["--sock-path"]
path = { kind = "any", role = "output" }
sources = ["src"]
[[commands.field]]
id = "timeout"
label = "Connection timeout (seconds)"
type = "number"
option = ["--timeout"]
sources = ["src"]
[[commands.field]]
id = "log_file"
label = "Log file"
type = "path"
option = ["--log-file"]
path = { kind = "file", role = "output" }
effect = "overwrite"
sources = ["src"]
[[commands.field]]
id = "debug"
label = "Log SSH protocol messages"
type = "boolean"
option = ["--debug"]
sources = ["src"]
[[commands.field]]
id = "verbose"
label = "Verbose"
type = "count"
option = ["--verbose", "-v"]
sources = ["src"]
[[commands.task]]
id = "connect_host"
label = "Connect to a host"
fields = ["identity", "curve", "connect", "verbose"]
required = ["identity"]
set = { connect = [true] }
[[commands.task]]
id = "shell_session"
label = "Shell with the agent"
fields = ["identity", "curve", "shell", "verbose"]
required = ["identity"]
set = { shell = [true] }
[[commands.task]]
id = "run_command"
label = "Run a command under the agent"
fields = ["identity", "curve", "command", "verbose"]
required = ["identity", "command"]
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["identity", "curve", "connect", "shell", "command"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["foreground", "sock_path", "timeout", "log_file", "debug", "verbose"]