HandToHumanCLI referenceAll commands
DocsCLIgui

Public command

gui

Serve the installed product's graphical importer for retaining existing request data as unfunded drafts.

Exact invocation
handtohuman gui --listen <LOOPBACK_ADDRESS>
01

Start the workspace

handtohuman gui binds the loopback address it is given, prints the workspace URL and fleet database name, and waits. It never opens a browser. Open the complete printed URL, including its #token= fragment, yourself and stop the server with Ctrl-C. The tab retains that session when refreshed.

--listen <ADDRESS>

Required loopback socket, for example 127.0.0.1:0; port 0 lets the system choose an available port. No address is assumed. Non-loopback addresses are refused.

handtohuman

The fleet database selected by the product, not a local file. Stado resolves its credential item and Skarbiec supplies the connection URL and CA.

Loopback port
handtohuman gui --listen 127.0.0.1:8788
02

Import and persisted readback

The page selects one JSON file and collects the same destination kind, title, and optional stable draft id as market draft-import. The original filename remains the source identity. The browser sends those inputs to the existing Rust Marketplace::import_work_brief operation; there is no browser-side parser and no second storage path.

The result presents all four source outcomes: imported, unchanged, conflicting, and rejected, including every returned summary or reason. For imported and unchanged work, the server reads the persisted draft back from the fleet ledger. The readback form can retrieve a retained draft again by id or remove one; removal is refused while an order names the draft.

Import is not submission. The GUI server exposes static assets, draft import, readback and removal. Removal refuses a draft already attached to an order. It has no route for order creation, funding, dispatch, human assignment, invitations, payments, or external execution.

03

Duplicates, conflicts, refusals, and security

  • An identical kind, title, request digest, and identity returns unchanged; it does not insert a second draft.
  • A stable id already naming different work returns conflicting. The same content under a different id or title also conflicts. Existing state is preserved because no replace mode exists.
  • An empty file, more than 100,000 bytes, malformed JSON, duplicate object field at any depth, non-object or empty-object root, title outside 1–200 characters, or invalid id returns rejected with the source-derived reason.
  • A missing file, unknown or repeated form field, or unknown kind refuses the HTTP request before the marketplace call. A request above the multipart cap is refused before form parsing.
  • A non-loopback --listen value refuses startup with the import workspace may bind only to a loopback address.
  • An unexpected Host returns request host does not match this local workspace. API calls require the random session token supplied only in the printed URL, not in the public page; a missing or incorrect token returns invalid workspace token. Mutations require the exact Origin. Responses disable storage and framing and use a same-origin content policy.
04

Packaging and prerequisites

The HTML, CSS, and JavaScript are compiled into the handtohuman binary. A normal Rust 1.85+ cargo build --release ships the complete workspace; Node.js and a separate asset install are not required.