Skip to content

Pipeline

Pipeline is a lightweight CRM that lives inside your LinkWorld workspace. No separate login, no third-party connector to maintain, no monthly seat fees — your contacts, deals, and notes are just records in the platform’s app-private KV store, scoped to your tenant.

  • Contacts — people you’re working with (leads, customers, partners). Indexed by email, free-text searchable on name + company.
  • Deals — opportunities tied to a contact, moving through a customizable stage pipeline (defaults to New → Qualified → Meeting → Proposal → Negotiation → Won / Lost).
  • Notes — free-form annotations on a contact or deal, with author attribution.
  • Cross-app integration — sister apps (Sales Guy for outbound, Office Assistant for inbox) read and write Pipeline data via the platform’s cross-app RPC mechanism. You get a unified CRM view even though the apps are independently deployable.
  1. Activate Pipeline from the Marketplace. No scopes to grant — all data lives in ctx.kv, no external integration required.
  2. Wait for the install hook — Pipeline seeds the seven default deal stages (New, Qualified, Meeting booked, Proposal sent, Negotiation, Won, Lost) on first activation.
  3. Open the app from your sidebar. You’ll see an empty Kanban board until contacts + deals land.

If you also installed Sales Guy, the bilateral cross-app wire auto-approves at activation time — Sales Guy’s register_qualified_lead calls will start pushing contacts in as soon as it qualifies a lead.

Open the Pipeline chat panel (right-side chrome) and use natural language:

“Add Jane Doe at Acme Corp, email [email protected], role VP Sales”

The pipeline_admin agent parses your prompt, calls pipeline_contact_create, and returns the new contact’s ID. The Kanban board reflects the change immediately.

Same chat panel:

“Show me contacts from Acme”

pipeline_contact_search runs, results render as a table.

“Which deals are in negotiation?”

pipeline_list_records(record_type='deal', status='negotiation'), table again.

Drag-and-drop on the Kanban board, OR via chat:

“Move the Acme deal to Proposal Sent”

The agent looks up the deal by company name, calls pipeline_deal_update_stage, and emits a deal_stage_changed event so any subscribed apps (e.g. Sales Guy pausing outreach when a deal reaches Negotiation) react automatically.

Annotate any contact or deal:

“Add a note to the Acme deal: ‘Demo went well, sending proposal Tuesday’”

pipeline_note_create, attached to the deal, timestamped + authored.

  • Real-time UI — the Kanban + contact list refresh on every event emit (deal_created, contact_updated, etc.). No polling.
  • Soft-delete only — discarding a contact marks it suppressed=true instead of removing the row. Restoring is trivial via pipeline_contact_update.
  • No approvals — Pipeline reads + writes are LOW-risk and run without a confirmation flow. The Security Gate sits in front of cross-app RPC, so a sibling app writing through ctx.apps.invoke is still gated by tenant-level grants.
  • Tenant-isolatedctx.kv is scoped to your (tenant, app) namespace; another tenant on the same instance can never see your contacts.

If you’re building an app that pushes data into Pipeline, the pipeline_admin agent accepts a structured RPC verb format. Full contract in docs/strategy/sales-guy-pipeline-contract.md; the short version:

await ctx.apps.invoke(
"pipeline", "pipeline_admin",
'contact_create: [email protected], name="Jane Doe", company=Acme',
max_tokens=200,
)
# → {"ok": true, "id": "abc-123", "created": true}

Supported verbs: contact_create, contact_update, contact_search, deal_create, deal_update_stage, note_create. Sales Guy uses these to keep its outbound flow in sync with the CRM.

“My contact didn’t appear in the Kanban after chatting” — the Kanban shows deals, not contacts. Switch to the Contacts tab. If the contact still isn’t there, check the chat history for a JSON error response from the agent (it’ll start with {"ok": false, ...}).

“I see two contacts with the same email” — concurrent creates can briefly race past the dedup check (known limit; ctx.kv has no compare-and-set). Merge via pipeline_contact_update and discard the duplicate.

“Sales Guy isn’t pushing leads to me” — check that both apps are active (Marketplace → Installed) and that the cross-app wire shows approved in Workspace Control. Without the wire, Sales Guy’s register_qualified_lead returns a soft forbidden and the lead stays Sales-Guy-local.

This section is auto-generated from the app’s manifest. It updates whenever the app publishes a new version.

  • Pipeline Admin (default)
  • pipeline_list_records — Read-only view into Pipeline’s ctx.kv records. record_type is one
  • pipeline_contact_create — Create a Contact (idempotent on email). If a Contact with the
  • pipeline_contact_update — Patch an existing Contact by id or email. Returns the updated record.
  • pipeline_contact_search — Look up Contacts by email exact-match, or partial name/company
  • pipeline_deal_create — Create a Deal linked to a Contact, in a given stage (default ‘new’).
  • pipeline_deal_update_stage — Move a Deal to a new stage. Emits deal_stage_changed + (deal_won /
  • pipeline_note_create — Attach a free-form Note to a Contact or Deal.
  • contact_created
  • contact_updated
  • deal_created
  • deal_stage_changed
  • deal_won
  • deal_lost
  • activity_logged