Files
sic/SKILL.md
T
marfrit 35a8a07152 sic — quoting-proof remote command execution
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
2026-07-19 12:10:51 +02:00

1.5 KiB

name, description
name description
sic 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).