35a8a07152
Client (sic) frames argv as netstrings and pipes it over ssh to a daemon (sicd) that execvp's it, so no shell re-parses the arguments. exec mode by default; opt-in sh mode for pipes/redirects/globs. Go client + daemon, Python reference daemon, design doc, quoting-hell demo, and foreground/background agent skills. Renamed from the climcp prototype. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EWpfhDgYNA21tETDP9ueBE
48 lines
1.5 KiB
Markdown
48 lines
1.5 KiB
Markdown
---
|
|
name: sic
|
|
description: Run a command on a remote host without shell quoting bugs. Lighter than a per-host MCP server.
|
|
---
|
|
|
|
# sic — remote command execution
|
|
|
|
`sic <host> <command> [arg ...]` runs the command on `<host>`. Arguments go to
|
|
`sicd` on the host as netstrings and are passed to `execvp` directly, so no
|
|
shell re-parses them. `ssh host touch 'a b'` makes two files; `sic host touch
|
|
'a b'` makes one file named `a b`.
|
|
|
|
## Usage
|
|
|
|
```
|
|
sic <host> <command> [arg ...] # exec mode (default)
|
|
sic --sh <host> '<shell string>' # sh -c on the host
|
|
sic <host> -- <command> [arg ...] # explicit separator if host/command starts with --
|
|
```
|
|
|
|
Pass each argument as a separate argument to `sic`. Do not construct netstrings;
|
|
`sic` frames them.
|
|
|
|
```
|
|
sic quotesu echo hello world
|
|
sic quotesu touch 'my file.txt'
|
|
sic quotesu echo '$HOME' # literal, no expansion
|
|
sic quotesu python3 -c 'import sys; print(sys.argv)' a 'b c'
|
|
sic --sh quotesu 'grep foo *.log | wc -l'
|
|
```
|
|
|
|
## exec vs --sh
|
|
|
|
- Default (exec): a program with arguments. Quoting cannot break, but there are
|
|
no pipes, redirects, or globs.
|
|
- `--sh`: use only when you need a pipe, redirect, or glob. The single string is
|
|
parsed by `sh -c` on the host.
|
|
|
|
## Deploy sicd to a new host
|
|
|
|
```
|
|
scp gateway/sicd <host>:/tmp/sicd # Python reference; or bin/sicd (Go)
|
|
sic --sh <host> 'sudo install -m755 /tmp/sicd /usr/local/bin/sicd'
|
|
sic <host> id # verify
|
|
```
|
|
|
|
For long-running commands, use the background skill (`SKILL-bg.md`).
|