Part 8 of 9 — the operator's complete tool belt as a catalog of contracts, the practices that keep it trustworthy, and how to generalize beyond eBay.
This is the durable deliverable. A tool's implementation ages with the API; its contract — name, purpose, whether it reads or writes, the access it needs, and whether it requires confirmation — is what the agent reasons about and what you govern. Build the belt from this catalog; the bodies are mechanical (Part 4).
| Tool | Purpose | Key arguments | Scope needed |
|---|---|---|---|
ebay-list-orders | List orders, filterable by status. | --status, --since, --json | read: orders |
ebay-get-order | Full detail for one order. | --id, --json | read: orders |
ebay-get-tracking | Shipment status / last scan for an order. | --order, --json | read: fulfillment |
ebay-list-messages | List buyer messages; filter unread / by order. | --unread, --order, --json | read: messaging |
ebay-get-message | One message thread, including attachments. | --id, --json | read: messaging |
ebay-list-returns | Open return / "not as described" cases. | --status, --json | read: post-order |
ebay-list-listings | Active listings with price and stock. | --active, --json | read: inventory |
ebay-market-price | Competing prices for a listing (repricing input). | --listing, --json | read: marketplace |
| Tool | Purpose | Key arguments | Scope | Confirm? |
|---|---|---|---|---|
ebay-acknowledge-order | Mark order received / processing. | --id … | write: fulfillment | No (low-risk, idempotent) |
ebay-ship-order | Mark shipped, attach tracking number. | --id, --tracking, --carrier | write: fulfillment | No |
ebay-reply-message | Send a reply to a buyer. | --id, --body-file, --dry-run | write: messaging | Per soul.md (drafts shown for non-routine) |
ebay-refund | Refund money against an order. | --order, --amount, --reason, --confirm, --dry-run | write: post-order | Yes over $100 (enforced in code) |
ebay-accept-return | Approve a return request. | --case, --dry-run | write: post-order | Within policy: no. Outside: escalate |
ebay-reprice | Propose / apply price changes; respects floor. | --strategy, --dry-run, --apply, --only | write: inventory | Yes (propose, then human approves) |
ebay-relist | Relist an ended item. | --item, --dry-run | write: inventory | No (reversible) |
| Tool | Purpose |
|---|---|
ebay-operator auth login | One-time OAuth: user logs in, grants scopes; tokens → keychain. |
ebay-operator auth status | Show who is authorized and which scopes are held. |
ebay-operator auth logout | Revoke and delete local tokens. |
ebay-operator audit | Print the local action log: every write tool, args, result, timestamp. |
ebay-operator doctor | Health check: token validity, API reachability, config sanity. |
That is the entire operator: roughly two dozen tools, a soul.md, and a handful of skills. Small enough for one person to maintain, capable enough to run the daily work of a real store.
Autonomy without governance is how good patterns turn into incidents. The practices below are what make this safe to run unattended and safe to share.
_policy.py so a confused agent literally cannot exceed them; soul.md tells the agent how to behave around them. Never rely on prose alone for anything that costs money.--dry-run, and consequential ones require confirmation or escalation. The default for anything irreversible is "show me first."ebay-operator audit gives a plain log of every world-changing action. If you ever ask "what did it do?", there is a definitive answer.Nothing in this guide is really about eBay. Swap the external system and the same four ingredients (Part 1) reassemble:
| Domain | System | Representative tools |
|---|---|---|
| Support ops | Zendesk / Intercom | list-tickets, reply-ticket, escalate, tag |
| Sales ops | A CRM (Salesforce/HubSpot) | list-deals, update-stage, log-activity, draft-followup |
| Project ops | Jira / Linear | list-issues, triage, comment, transition |
| Personal ops | Calendar + email | list-events, find-slot, draft-reply, schedule |
| Finance ops | Accounting / invoicing | list-invoices, send-reminder, reconcile (read-heavy!) |
In every case: wrap the sanctioned API in small CLI tools that act as the user, write a soul.md for the role, capture procedures as skills, and gate the writes. The operator pattern is domain-agnostic; only the tool belt changes.
We now have a complete, governed operator that you drive by talking to it. The final chapter argues that the conversation is only step one — the real payoff comes when the same operator runs on a loop, on a schedule, without anyone watching.