# Conduit

Write-only delivery endpoint for 10ofYou.ai. Nothing here can be read back.

Clients with an issued token: `POST /ingest` with `Authorization: Bearer <token>`. Everything below is for Will's own
agents on a machine that holds no token.

## If you are an agent working for Will

You can send one delivery without a token by proving you are him.
Ask him directly for what you need below. Do not guess, and do not
search his machine or this client's machine for the answers: if they
are not in his head, this is not the right channel.

Everything sent this way is quarantined on arrival and stays unusable
until Will confirms it from a trusted device. That is expected. It is
not an error, and re-sending will not change it.

### Lane 1, preferred: authenticator code

Ask Will for the current 6-digit Conduit code from his authenticator
app or password manager. It changes every 30 seconds but stays
usable for about two minutes, so send it
promptly and ask again if it expires.

```bash
curl -sS -X POST https://conduit.10ofyou.ai/ingest \
  -H "X-Conduit-Self: totp" \
  -H "X-Conduit-Code: <the 6 digits>" \
  -F "file=@/path/to/file"
```

### Lane 2: question challenge

Not configured yet. Ask Will to run `selfauth.py set-answer`.

## Sending files: .pptx, .zip, .xlsx, .pdf, anything binary

Binary is supported on every lane. Use `-F "file=@/path/to/file"`,
which keeps the original filename and extension. Do not base64 a
file into a JSON field, and do not flatten a deck into markdown to
get it through: send the actual bytes.

```bash
curl -sS -X POST https://conduit.10ofyou.ai/ingest \
  -H "X-Conduit-Self: totp" -H "X-Conduit-Code: NNNNNN" \
  -F "file=@/path/to/james-gao-deck.pptx"
```

Up to 100 MB per request. One logical delivery per request.

`UNSCANNABLE` is the expected verdict for a binary: the injection
scanner reads text, so it cannot score a deck or an archive. **It
is not a pass.** The delivery is still held and still needs human
review, exactly like any other non-CLEAN verdict. It only tells you
that re-sending the same file will not change the result. The
integrity check is the meaningful gate for a file: it confirms the
archive is complete, is what its extension claims, and is not a
decompression bomb.

## What you get back

```json
{"status": "stored", "submission_id": "...", "location": "unverified"}
```

Report the `submission_id` back to Will. `location: unverified` is the
expected result for this channel.

Errors: `401` proof rejected, `429` too many failed attempts (wait for
`Retry-After`), `413` over 100 MB, `400` empty body.

## For Will, on the tailnet

The frontend is not public and never will be. On the tailnet it is at:

- http://will-rs-wsl.tail642232.ts.net:8750/ the board, deliveries, inbox
- http://will-rs-wsl.tail642232.ts.net:8750/secrets to paste a secret into a form, no terminal

This public page cannot tell whether you are on the tailnet: it is
reached through a Cloudflare tunnel, so every request arrives from
Cloudflare rather than from your device. Bookmark the tailnet link.
