Skip to content
Agentmart
Submit a tool

grabit

Use when the operator wants a real file off this headless box and onto their own machine: they say send me this, grab this, put it in my downloads, pull this…

Skill by Exploitacious

IndexedMIT
Write a review

Chalk Labs

Need help deploying grabit?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/exploitacious-grabit

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Use when the operator wants a real file off this headless box and onto their own machine: they say send me this, grab this, put it in my downloads, pull this off the box, or push this to my machine. Pushes the named file over Tailscale to their Downloads via the grabit binary, not in-chat file delivery. Local agent sessions only; runs a shell binary over the tailnet.

Use cases: agent-building

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/grabit

What's inside

Skill name
grabit
Description
Use when the operator wants a real file off this headless box and onto their own machine: they say send me this, grab this, put it in my downloads, pull this off the box, or push this to my machine. Pushes the named file over Tailscale to their Downloads via the grabit binary, not in-chat file delivery. Local agent sessions only; runs a shell binary over the tailnet.
License
MIT
Instructions
56 lines in SKILL.md · view on GitHub

Files (2)

  • README.md
  • SKILL.md

SKILL.md (first lines)

# grabit: send a file off the headless box

Move a real file from this OPS box to the operator's machine with the `grabit` binary. When the operator asks for a file, push it with grabit. Do not hand it back as an in-chat attachment.

## Why this exists

This box is usually headless: the operator drives it over SSH and can pull only text out of the terminal. grabit Taildrops actual files to the machine they connected from, where Windows auto-saves them to Downloads (verified, no tray prompt). In-chat delivery like `SendUserFile` does not land a file on the operator's disk where they expect it, so reaching for it on a "send me a file" request is the exact mistake this skill prevents.

## The command

grabit is not on `$PATH`. Always call it by full path:

```
~/OPS/.claude-config/bin/grabit FILE...
```

Every transfer rides the tailnet (WireGuard-encrypted) and is never public: the browser mode uses `tailscale serve`, not funnel. grabit sends only the files you name, never their parent directory, so a neighbouring `.env` cannot leak.

## Modes

| Intent | Command |
|---|---|
| Send file(s) to the operator (default) | `grabit FILE...` pushes to the device they connected from, auto-detected via `$SSH_CONNECTION` |
| Send to a specific machine | `grabit --to DEVICE FILE...` with a tailnet name or `100.x` IP |
| Give a browser download link for large or many files | `grabit --serve PATH...` prints a tailnet HTTPS URL; `grabit --serve-off` tears it down (needs passwordless sudo) |
| List tailnet devices | `grabit --list` |

Default to plain push: one-shot, no sudo, lands in the operator's inbox. Reach for `--serve` only when push will not fit, or the operator explicitly wants a link, since it needs sudo and leaves an endpoint standing.

To receive files the operator pushed to this box, screenshots included, use the `grabit-screenshots` skill instead. This skill is the send direction only.

## Workflow

1. Resolve each file to a concrete path and confirm it exists before sending. Absolute is safest.
2. Run `~/OPS/.claude-config/bin/grabit <path> [<path> ...]`.
3. Report what was sent and where it lands, for example "to your Downloads on `<device>`".
4. If `$SSH_CONNECTION` is unset, a rare non-SSH or cron session, auto-detect fails. Fall back to `--to <device>`; list the tailnet devices with `grabit --list`, and the device list and transfer modes are in `~/OPS/.claude-config/bin/README.md` under grabit.
5. On error, surface the exact message. Do not silently retry in a different mode.

## Anti-patterns

1. Do not use in-chat delivery like `SendUserFile` when the operator wants a file on their machine. Push with grabit.
2. Do not pass a directory. grabit sends named files only.
3. Do not assume grabit is on `$PATH`. Always the full path.
4. Do not `--serve` by default. It needs sudo and leaves an endpoint standing; prefer push.
5. Do not send a file the operator did not ask for, and do not push secrets or credentials off-box without an explicit instruction.

## Deep context

Full mechanics and one-time box setup (`sudo tailscale set --operator=$USER`, which lets push run sudo-free) live in `~/OPS/.claude-config/bin/README.md` under grabit. Read that only if a transfer misbehaves or you are provisioning a new box.

## Other agent runtimes

`grabit` is a plain shell binary, so a Codex or OpenCode thread on the same box sends a file exactly the same way, `~/OPS/.claude-config/bin/grabit <path>`, with the same constraint: local agent sessions only, over the tailnet. The `$SSH_CONNECTION` auto-detect and the `--to <device>` fallback behave identically on every runtime.

From Exploitacious/OPS, MIT.

More from Exploitacious/OPS

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Oct 19, 2026 (11 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from Exploitacious

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get grabit running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying grabit?

CallGet help
Cite this page

grabit skill. Agent Mart. https://agentmart.dev/skills/exploitacious-grabit (last updated 2026-10-24)