Help & Documentation

Getting started

From sign-in to your first closed growth loop.

1 · Sign in

Visit the landing page and click Sign in with Google. First sign-in provisions two accounts for you automatically:

  • A personal account (you're the owner — you can create projects here).
  • A viewer seat on the Caldrin Demo public account — read-only access to the seeded CapitalCodersEngine and Vector Agents projects so you can see what the system looks like pre-populated.

2 · Open a project

From the account home, click any project card. You'll be redirected to that project's primary conversation (/c/primary). Fresh projects show a "research in progress" state until the 7-domain audit finishes (~3–5 minutes).

Seeded demo projects already have signals + a master_context loaded, so you can test the Conductor immediately.

3 · Connect LinkedIn and Gmail (for real publishing)

To publish real LinkedIn posts and send real Gmail A/B outreach (instead of sandboxed previews), you need to connect each channel. Connections are stored on the account, not the project — one connection per channel powers every project under it.

  1. On any project's primary conversation, find the pinned project_status card at the top. The Channels section shows Connect LinkedIn and Connect Gmail buttons when no live connection exists for that channel.
  2. Click Connect LinkedIn. You're redirected to Unipile's Hosted Auth page in a top-level window (not an iframe — LinkedIn's checkpoint flow breaks inside frames). Log in to LinkedIn on Unipile's page.
  3. Click Connect Gmail. Same Hosted Auth flow, but this time you complete Google OAuth consent on Unipile's verified app (we skip Google's verification review via Unipile's CASA Tier 2 certification).
  4. For each: Unipile posts back to our /api/webhooks/unipile/accounts endpoint and redirects you to ?linkedin=connected or ?gmail=connected. A toast fires confirming the session is live.
  5. From this point, any LinkedIn publish takes the real path through client.users.createPost; any Gmail send goes through client.email.send.

Role rules: on your personal or team account, owner / admin / editor can connect; viewers can't. On the public Caldrin Demo account only the owner can connect — that's the seat that owns the CapitalCodersEngine sessions for demos.

4 · Ask your first question

Type a question in the composer. The Conductor routes intent-keywords to its tools. A few prompts that reliably trigger each tool:

  • "What do you know about this project?" show_master_context
  • "What signals have we gathered so far?" list_recent_signals
  • "Give me a scorecard of our positioning strengths." generate_artifact (scorecard)
  • "Analyze the competitive landscape." analyze_domain
  • "Re-run the research audit." kickoff_research

5 · Use slash commands (recommended)

Instead of guessing phrasing, type / at the start of the composer. A palette opens with shortcuts covering every tool + every visualization. Arrow keys to navigate, Enter to select, keep typing to add context, then ⌘↵ to send.

See the slash command reference for the full list.

6 · Follow the chips

After every non-trivial response the Conductor emits 2–4 follow-up chips above the composer. Clicking one sends that as your next message. Good for diving deeper without typing.

7 · Draft & publish variants

Once a project has a master context and some signals, draft publishable content using channel-specific shortcuts:

  • /linkedin our pipeline automation angle for RevOps leaders → two LinkedIn post variants (200–900 chars each).
  • /email alice@acme.com, bob@acme.com about our pipeline automation angle → two Gmail variants, one per recipient. Each carries { recipient, subject, body }. Publishes dispatch a send to each recipient's Gmail via Unipile.
  • /blog the multi-department coverage angle with concrete examples → two Sanity blog variants (800–1500 words each).
  • /variants → generic fallback when you want to pick the channel inline. All four land on generate_variants and emit a variant_pair artifact.
  • Click Publish A, B, or both. The Conductor calls publish_variant, which dispatches the matching channel task.
  • If the channel resolves to real and Quick Publish is off, the artifact lands in awaiting_confirmation — click Confirm publish to dispatch.
  • The status card rolls through publishinglive / sandboxed / failed, and a matching publish_* system_event lands in the conversation.

Whether a publish takes the real path depends on the channel, your account kind, and (for LinkedIn) whether you have a live connection. See the publishing reference for the full decision tree.

8 · Close the loop

After the publish lands, action chips walk you through measurement → comparison → re-curation. With Autopilot OFF (default), each step is a click:

  • Run monitor (chip on publish_succeeded) — for LinkedIn publishes, on-demand triggers the engagement poller for that specific publish, then runs the Signal Synthesizer. For Gmail publishes, just runs the Synthesizer over the replies that already landed via webhook. Writes one learnings row per variant.
  • Compare variants (chip on the variant_pair card) — runs the Variant Comparator once both A and B have learnings. Renders a variant_performance artifact with the winner + reasoning.
  • Update master context (chip on variant_pair_measured) — runs the Curator. Produces master_contexts v(n+1) and renders a master_context_diff artifact.
  • Reply (chip on Gmail publish_succeeded) — draft + send a threaded reply-back to the recipient's Gmail. Conductor asks what to say, previews, sends via reply_to so Gmail clusters the thread correctly. Also works as /reply <intent> when exactly one Gmail thread has replies.

Flip Autopilot ON in the context strip (owner/admin only) and those three steps fire on timers instead of clicks. See Publishing → Manual vs. Autopilot routes.

9 · Create a new conversation

Click the conversation switcher chip (next to the project name in the context strip). The dropdown lists every conversation in the project plus a "New conversation" option. Titles are auto-generated by Haiku after your first exchange.

Routing rule: autonomous events (e.g. research_complete, integration_degraded) always land in primary. User-initiated actions land in whichever conversation you triggered them from.

What's next