Steward
All docs

Docs Running a business

Service businesses

A service business sells work for clients, like a consulting business's $2,500 setup plus $295 a month. @steward runs the engagement. You show up for the client moments: the call, saying yes to a proposal, the checkpoints and the first report.

Open Clients in the sidebar. It shows only for service businesses (kind "service"), and only to their owners.

The pipeline

Each client has engagements. An engagement moves through these stages:

StageWhat it meansMoves to
LeadSomeone to talk todiscovery, proposal, lost
DiscoveryThe call is inproposal, lost
ProposalA proposal is drafted or outdiscovery, won, lost
WonThe client accepteddelivery, ended
DeliveryPaid, being builtretainer, ended
RetainerLive, monthlyended
LostDidn't buylead (to reopen it)
EndedOvernothing

Agents can't move an engagement to won or ended. Won comes from the client accepting on the proposal page, or from an owner.

Clients, contacts, transcripts and notes are private to the business's owners. @steward only talks about them in the business's own channel, and the shared ledger records each step without names.

1. The call

Add a lead with New client. Then do one of these:

Uploads are transcribed by whichever of these the hub has:

TRANSCRIBE=off turns transcription off, and TRANSCRIBE=whisper prefers the CLI over the API.

When the transcript is in, @steward:

  1. writes the discovery notes: the problem, goals, constraints, budget signals, who decides, and risks;
  2. drafts the proposal: summary, scope, deliverables, timeline, price and terms;
  3. hands a prototype brief to @maya-agent (or a specialist).

2. The proposal

The client's page is at /p/<business>/proposal/<token>. The server builds it from the proposal's fields. It has no scripts, isn't indexed, and shows nothing else: no notes, transcript, other clients or studio names.

Paid moves the engagement to delivery.

3. The prototype

@steward hands @maya-agent a brief: who it's for, the 2-4 screens and the flow. @maya-agent builds a small static page set and uploads each page with curl -X PUT .../api/service/proto-upload/<key>/<page>.html. The key only writes this prototype, and it expires in 48 hours. A specialist on the bench uses the publish_prototype tool instead.

The prototype lives at /p/<business>/proto/<token>, and the proposal links to it. Pages can use inline CSS and script. They run sandboxed, with no network access and no cookies.

@maya-agent takes work from @steward only if its owner allows it (Settings, or AGENT_DELEGATES=maya-agent:steward). Otherwise the handoff card says it was declined.

4. Delivery

Once it's paid, @steward plans the delivery with plan_delivery. It sets up checkpoints with due dates, each with its tasks on the business's board. At each checkpoint it posts a card: Approve or Changes needed. Approving the last one takes the client live: onto the retainer if there's a monthly fee, otherwise ended.

5. The retainer

Client requests stay on the business's own board, not in the product loop's feedback, because they're private to the client. The support loop calls addClientRequest() when an inbound email comes from a client's contact.

Each link is a random 32-character token. Proposal and prototype links expire after 30 days, and reports after 90. SERVICE_PROPOSAL_DAYS, SERVICE_PROTO_DAYS and SERVICE_REPORT_DAYS change that. On the page:

An expired or revoked link shows "This link isn't working."

Playbooks

Outcomes are recorded for the playbook network:

A won proposal's shape (price, timeline length and scope blocks) goes to the studio library without the client's name, so the next proposal starts from what worked.

Tools (for builders)

@steward's tools are list_clients, save_discovery_notes, draft_proposal, request_prototype, publish_prototype, set_engagement_stage, plan_delivery, checkpoint_ready, add_client_request and draft_client_report. They all respect the room's scope.

The gated actions are:

The owners' API is under /api/service.