- name
- bux-fetch
- description
- Read the operator's machine (their laptop) read-only via `bux fetch`. Use whenever you need context, code, configs, or data that lives on the operator's computer rather than on your own. Every call is approved by the operator and runs read-only.
# bux fetch — read the operator's machine
You are operating across **two computers**, and you must use both:
1. **Your own machine** (this VPS/sandbox). Explore it normally with `ls`, `cat`, `grep`, etc.
2. **The operator's machine** (their laptop) — reachable **only** through `bux fetch`. This is
where the operator's real code, configs, notes, and data usually live.
**Do not assume everything you need is on your own machine.** A large fraction of the useful
context — the project the operator is actually working on, their local files, their
configuration — exists on *their* laptop, not yours. When a task refers to "my project", "my
files", "the repo on my machine", or anything you can't find locally, reach for `bux fetch`
before concluding the information doesn't exist.
## What it is
`bux fetch` asks the operator's laptop to perform a **read-only** operation. Each request is
shown to the operator, who **approves or denies** it; approved requests run with read-only
primitives (there is no way to write, edit, delete, or execute anything on their machine).
```
bux fetch list <path> # like `ls` on the operator's machine
bux fetch read <path> # like `cat` (text files; large files are truncated)
bux fetch grep <pattern> <path> # like `grep -rn` (regexp, recursive, read-only)
bux fetch get <path> [dest] # copy a file from the operator's machine to here
```
Examples:
```
bux fetch list ~/Projects
bux fetch read ~/Projects/app/README.md
bux fetch grep "def main" ~/Projects/app # find where something is defined/used
bux fetch get ~/Projects/app/data.csv ./data.csv
```
`grep` takes a Go/RE2 regexp and searches a file or a whole directory tree, returning
`path:line:text`. It skips binary files and noise dirs (`.git`, `node_modules`, …) and
stops at 500 matches — so it's the cheapest way to *locate* something before reading.
Any absolute or `~`-relative path is allowed — the operator decides per request.
## Use it EFFICIENTLY — every call costs the operator a click
A human approves each request, so calls are **slow, interruptive, and may be denied**. Treat
the operator's attention as the scarce resource:
- **Locate before reading.** Use `grep` to find which files matter (one approval searches a
whole tree), then `read` only those — far cheaper than reading dozens of files to find one.
- **Explore top-down.** `list` a directory first, then do a few **targeted** `read`s — don't
read dozens of files speculatively.
- **Pull once.** If you need to work over a file repeatedly, `get` it to your machine once and
then use it locally — don't `read` the same file again and again.
- **Ask for what you need, not what you might need.** No scattershot reads "just in case".
- **A denial is a normal answer.** If a request comes back `denied`, do **not** retry it or
rephrase and ask again — move on, and tell the operator what you were trying to do and why.
- **Batch your reasoning, not the network.** Decide the few files that actually matter, then
request those.
## What it is NOT
- It is **not** a way to modify the operator's machine. Writes/edits are impossible by design —
don't try.
- It is **not** your own filesystem. `bux fetch list ~` reads the *operator's* home, not yours.
## Enabling it — tell the operator how
You don't set anything up; the operator does, from their laptop. If `bux fetch` reports it
**can't reach the operator**, they're just not sharing right now. Don't retry in a loop —
instead, **tell the user exactly how to enable it**:
> To let me read files from your machine, run `bux share` on your laptop. It serves the
> approvals and auto-connects this box — nothing else to run.
If this box has never been provisioned for read access, they run `bux setup <project> <box>`
once first (or `bux share --setup <project> <box>` to do both at once).
Then wait for them to do it — a failed `bux fetch` is a normal "not sharing yet" state, not an
error to work around.
Ver en GitHub