Topline Docs

Use Topline

Use Topline: Slack agents and Google Chat

Connect or reconnect Slack, enable native agent sessions and the Stop button, configure Google Chat access, manage passive capture, and troubleshoot provider setup.

Slack Agents, Memory, and Google Chat Guide

Topline can capture useful conversation context passively from Slack channels without requiring someone to address the bot on every message. Google Chat supports direct messages by default. When shared spaces are enabled for the environment, an authenticated app join can enroll its exact spaces/... resource through a configured Workspace tenant route after the destination verifies the installation and linked member. Ordinary messages never enroll a space. Passive Google Space capture also requires an active Workspace Events subscription.

What Topline can and cannot see

Adding Topline to a supported Slack channel starts capture for that boundary. Topline does not scan an entire Slack workspace or Google Workspace domain, cannot read a conversation where the app is absent, and does not make captured channel content company-wide automatically. Google Chat direct messages are ordinary assistant conversations; they are not passive-space capture.

Ordinary human messages in a captured Slack channel are stored silently. Topline does not call the assistant runtime or post a reply for each message. Mentions, direct conversations with the app, commands, and interactive cards remain assistant turns.

Access and administration

Tenant administrators with the narrow external_chat.manage capability use Account > Chat Integrations to connect or disable providers, review captured Slack channels, inspect delivery state, and start a Slack historical import. Customer administrators receive this capability without gaining builder, source, secret, browser, or workforce authority.

Administration does not grant access to private conversation content. An administrator can manage capture state, but must also be a current linked member of an external space to retrieve its messages, episode context, citations, or external-space memory. Company and ordinary Topline team memory continue to follow their destination audience.

An active Topline account must be linked to the provider identity before that person receives retrieval access or can use an explicit memory control. Explicit assistant and memory controls also require Chat access (external_chat.use). Promoting memory to a team or the company requires memory.approve.scope.

Account administrators can set two independent controls for each person in the Team Members add or manage drawer:

  • Read organizational memory allows company memory and glossary context to be retrieved for that person.
  • Contribute to organizational memory allows that person's new Slack, Google Chat, and Topline activity to propose or update shared memory.

Turning contribution off does not remove otherwise authorized Chat-only or workspace chat access. New passive messages from that linked person are not captured as organizational memory, and explicit save or correction controls are denied. Provider deletions and memory retractions remain available so the setting cannot trap older data. Previously accepted memory is not deleted; remove or retract it through its normal reviewed lifecycle. Turning read access off does not grant visibility through another surface.

Existing tenant members are migrated with both controls enabled so the change does not silently remove current access. New members also default to both enabled, and an administrator can narrow either control while adding them.

Connect Slack

  1. Open Account > Chat Integrations.
  2. If the Slack card says Config needed, ask the platform operator to complete the Slack app and server configuration. Ready means the server configuration is present; it does not verify the Slack app or its native agent features.
  3. Select Connect, approve the requested Slack permissions, and return to Topline. Active records an active installation; verify a real reply next.
  4. Confirm each intended person has an active Topline membership using their Slack email and Chat access. Chat-only access is sufficient; the web workspace and builder are not required.
  5. In Slack, open the Topline app's Messages tab and send a harmless question. Confirm the answer arrives in the same thread. Opening the tab alone does not send a welcome or start work.
  6. For channel participation and capture, add Topline to each intended channel. Mention @Topline to request an answer. Open Captured spaces in Topline and confirm the expected channel appears with Capture active.

Connecting Slack does not enroll every channel. Capture starts only after Topline is added to a specific boundary.

Enable native Slack agent sessions

Native sessions require both a deployed Topline version that supports them and an updated Slack app. A platform operator must enable Slack's Agent messaging experience and its stop-event subscription. After they confirm the app is ready, select Reconnect in Topline and approve the additional agent permission (assistant:write). Reconnecting alone cannot update the Slack app's manifest.

In the app's Messages tab, try Get started or Find an answer, or type your own question. On supported installations, DM and mention threads have session titles and a native working indicator. A session waits when it needs your input and is ready for another message after the request finishes. Existing answers and approval cards remain in the Slack thread.

Use the native Stop control to cancel your active request. Topline confirms after the running turn stops. It does not undo completed actions or cancel separately started coding tasks. Only the currently authorized person running the request can stop it. Another request in the same thread must wait for the active one to finish.

Older installations continue ordinary replies until upgraded. Slash commands retain their existing reply behavior, and ordinary captured channel messages do not create agent sessions. These features do not expand which channels, company knowledge, or tools anyone may access.

Connect Google Chat

Google Chat setup has four separate parts. The Google Chat card keeps their current state and next actions visible after you leave or refresh the page.

  1. In Account > Chat Integrations, confirm the Google Chat card says Ready to set up, enter the Workspace domain, and select Enable domain. This saves Topline's tenant routing authorization; it does not install the app in Google Workspace.
  2. A Google Workspace administrator opens the Marketplace listing from the Google Chat card and installs Topline for the intended users. If the listing link is not available, the domain setting remains saved, but installation must wait until Topline publishes the listing.
  3. A Topline member administrator adds each intended person with the same email they use in Google. Choose Chat-only when they should use Topline through Google Chat or Slack without access to the Topline web workspace or builder. Existing active Topline members do not need a second account.
  4. In Google Chat or Gmail, a permitted user opens New chat > Find apps, chooses Topline, and starts a direct message. In the left sidebar, select Topline under Apps; do not select or create a Space that happens to be named Topline. Topline sends a welcome automatically. Use /help, send a harmless sample operational question, confirm Topline replies in the same direct message, then return to Chat Integrations and choose Check connection. Topline also answers plain help and @Topline help. A platform operator must enable shared spaces and verify the owning Workspace tenant route, active destination installation, membership checks, and passive subscription before offering shared-space learning. Once ready, an authorized linked member adds the actual Topline app to the chosen space; the authenticated join creates its exact-space binding.

The automatic welcome is distinct from Help. The Help quick command and /help work before a Workspace is connected and never expose organization data. Send plain check connection or my access to verify that the Workspace and your Google identity are ready without starting an assistant turn or reading organization data. If the native Check connection command or /access appears in Google Chat's command menu, it performs the same metadata-only check. A first message from an unconnected Workspace explains the exact Topline administrator steps, the Chat-only option, and where to get support instead of returning a dead end. For an asynchronous Google Chat request, Topline creates one progress message and replaces it with the completed answer, approval card, stopped state, or safe retry message. Provider retries address the same message instead of creating another response bubble.

In an explicitly enrolled shared space, every visible Topline response stays in the originating reply thread. This includes Help, setup guidance, access-denied responses, progress, completed answers, and safe failures. Topline uses the installed Chat app's existing bot authority to recheck that the sender is still a member of that exact space, then separately requires a linked Topline member with Chat access. Mentions and commands do not depend on passive Workspace Events capture being configured.

If Ask Topline about this appears in a message's three-dot menu, use it to ask about that message. Topline treats the selected message as quoted, untrusted context and can use only read-only tools for that turn. Instructions inside the selected message cannot authorize an approval, deletion, creation, or other mutation. The action remains subject to the same Workspace routing, linked-member check, and Topline permissions as an ordinary direct message. If the action isn't displayed, describe the relevant context in your own words in a direct message; don't assume the native action is installed.

Asynchronous Google Chat answers preserve the user's line breaks and update one progress message in place. Google Chat does not let an update change the message's syntax mode, so Topline translates the completed answer to native Chat markup before the terminal PATCH. Standard Markdown headings, bold, italics, strike, safe HTTP(S) links, lists, and code render with their Chat-native equivalents, and horizontal rules become clean spacing. ATX (### Heading) and setext headings are flattened to native bold lines because Chat has no heading syntax. Markdown tables become labeled native bullet rows instead of exposing raw pipe and delimiter syntax. Other link schemes remain literal Markdown. One-off messages that are not updated can use Google Chat's standard Markdown mode. Slack remains on Slack mrkdwn. A trusted, actor-scoped provenance resolver can add a bounded Data as of line and up to five HTTPS source links that the current user is authorized to open. Topline does not infer provenance from model prose or raw tool results. Google Chat's Developer Preview native citation elements are not enabled; provenance uses ordinary, visible message text until that preview capability is separately approved and gated.

Before the first successful direct message, the card says Setup in progress and retains the remaining checklist. It changes to Connected only after Topline records a completed response to a linked member. A received message without a completed response remains unverified; repeat the check for any separately restricted user groups.

Connect Drive and Calendar under Developer Access is a different, personal authorization. It gives one Topline user read-only access to their Google Drive and Calendar through Auth0 Token Vault. It does not install Topline in Google Chat, enable a Workspace domain, or grant other people Chat access.

Google Chat direct messages are routed through the linked Topline user and enabled Workspace domain. Direct-message setup does not create captured-space records, passive subscriptions, or historical space imports. An explicitly enrolled shared space creates its own tenant-bound captured-space scope.

Link previews are a separate feature from shared-space support. When a platform operator enables GOOGLE_CHAT_LINK_PREVIEWS_ENABLED and registers the Topline host with the /chat path prefix in Google Chat API > Configuration > Link previews, Google Chat can attach a compact card to a canonical https://<tenant-host>/chat?c=<conversation UUID> link.

Topline accepts previews only in direct messages with the app, for the current tenant origin, the exact /chat path, and the canonical c UUID. It resolves the Google identity to an active Topline member, reuses the same tenant and conversation-visibility checks as the web app, and returns no preview for a shared space, malformed URL, foreign origin, unbound identity, or inaccessible conversation. Google makes a preview card visible to everyone in its space, so Topline deliberately fails shared-space previews closed instead of authorizing only the person who pasted the link. A preview never runs an assistant turn and never reveals whether an inaccessible conversation exists.

Shared-space pilot

Shared spaces remain off unless GOOGLE_CHAT_SHARED_SPACES_ENABLED=true. A configured Workspace tenant route allows an authenticated ADDED_TO_SPACE event to create a durable exact-space binding. The destination must verify its active installation and the inviter's current provider membership and linked Topline access before admitting capture. Existing explicit GOOGLE_CHAT_SHARED_SPACE_ROUTES entries remain supported and must agree with the stored binding at ingress and destination; conflicting ownership fails closed.

An ordinary sender's email domain cannot create or retarget a space binding. Only the authenticated app join and configured tenant routing may enroll a new space; later deliveries use its exact durable binding. Unknown, stale, conflicting, or cross-runtime bindings fail closed. Before processing an interactive message or card action, Topline refreshes provider membership, mirrors removals into the external-space scope, and requires a current Google Chat member linked to an authorized Topline member. An active Workspace Events subscription enables ordinary passive capture in that same scope. Without it, mentions and commands can work while passive capture remains unavailable. Link previews remain disabled in shared spaces.

Enabling interactive use also requires the Marketplace/Chat app configuration to permit spaces and the existing one-time administrator approval for the Chat app membership scopes. Passive capture additionally requires a working Workspace Events Pub/Sub subscription. Do not enable the Marketplace shared-space surface before tenant routing, authenticated enrollment, membership recheck, lifecycle removal, and rollback smoke tests are ready. For rollback, remove Topline from each enrolled space before clearing its exact route or turning off the gate. If passive capture is active, first verify the removal event deactivated capture; disabling the installation in Chat Integrations is the recovery path if Google cannot deliver that event.

Intake lanes

LaneTriggerResult
Live Slack captureAn ordinary human message in a Slack channel containing ToplineStores normalized evidence silently with the external-space audience.
Explicit memoryA supported remember this phraseProcesses the surrounding conversation and creates durable memory at the authorized destination.
Assistant turnA DM to the app, mention, command, or interactive actionRuns a normal Topline turn and replies in the provider conversation.
Slack historical importAn administrator selects Import history for one captured Slack channelReads provider-visible history asynchronously and retains that channel's audience.

No separate memory inbox is required for ordinary capture. The app membership is the intake boundary.

Enable silent learning

Capture and silent learning are separate. Capture stores authorized conversation context for the source audience. Silent learning screens new eligible conversation and creates evidence-backed drafts; it does not reply in the provider conversation and does not publish company knowledge automatically.

In Account > Chat Integrations, a tenant administrator can turn on Learn silently from joined spaces. The administrator must explicitly select every existing captured space that may start learning. New eligible joined spaces can inherit the tenant setting after exact membership, tenant route, provider subscription, policy, budget, and reviewer checks pass. Activation starts from the recorded time; it does not silently learn all earlier history.

Each captured-space row distinguishes Setup required, Capturing, Waiting for quiet, Processing, Learning active, Paused, Degraded, and Removed. Use the captured-through and learned-through times to understand coverage. Connected and Capturing do not mean that learning is caught up. Pausing learning preserves capture; stopping capture is a separate action.

Learning review shows exact supporting text, source date and audience, proposed knowledge, conflicts, and coverage limits. A reviewer needs both current source visibility and destination approval access. If either is missing, Topline hides the draft and shows Review setup required. Approvals stay within the source audience. Private source material cannot be widened to the company merely because the reviewer can approve company knowledge.

See Silent learning from external chat for the full eligibility, review, lifecycle, usage, and cost contract.

How conversations become searchable context

  1. Topline authenticates and deduplicates the provider event.
  2. For an identified member who can contribute to organizational memory, it immediately stores normalized message evidence. A linked member whose contribution control is off remains authorized for chat but their new message is not captured. Credential-shaped text is redacted before storage, and raw provider payloads are not retained.
  3. Provider threads remain one conversation episode. Unthreaded messages within a 30-minute activity window are grouped into an episode so retrieval has more context than one isolated message.
  4. After 15 minutes of quiet, Topline builds searchable episode context. A delayed task is requested for each changed episode; hourly and nightly reconciliation provide recovery when enabled.
  5. Edits create a new temporal revision. Provider deletions remove the deleted text and rebuild or retract derived context.

Postgres evidence and revisions are authoritative. Search records, embeddings, and graph projections are derived and rebuildable.

Save, correct, or retract memory from chat

Use one of these phrases in a captured conversation:

  • remember this saves for the current external space by default;
  • remember this for me saves personal memory for the linked sender;
  • remember this for the company requires company-scope approval authority;
  • remember this for team: Operations requires approval authority and exactly one accessible Topline team named Operations;
  • correction: ..., actually: ..., or update: ... records a new conversation revision; and
  • forget this memory, retract that conversation, or remove this memory requests retraction.

Topline replies with the outcome for explicit controls. Corrections to already promoted memory can return it to review. Personal memory can be retracted only by its owner. Shared promoted memory can be retracted by its contributor or an organization administrator.

Slack historical import

In Captured spaces, select Import history, optionally choose a UTC start and end date, and select Start import. Both selected calendar dates are included. Internally, Topline sends midnight at the start date as the inclusive lower bound and midnight after the end date as the exclusive upper bound; the same bounds apply to replies loaded from a Slack thread. The import continues after leaving the page. Its visible states are History queued, Importing history, History imported, and Import failed.

The import rechecks the active installation and space, reads only history available to the app's current provider credentials, includes provider threads when available, and remains scoped to the external space. Imported history never becomes company memory automatically.

Visibility, privacy, and lifecycle

  • External-space retrieval follows current linked membership. Removing a member removes that scope membership.
  • external_chat.manage controls installation and import operations; it does not bypass external-space membership for content retrieval.
  • Missing and unauthorized source citations both return Not found, preventing message-id enumeration.
  • Disabling an installation or removing Topline from a space stops capture, archives its derived context, closes active revisions, and archives promoted memory derived from the removed source.
  • Reconnecting reactivates only a provider boundary Topline observes again; it does not silently restore every prior space.
  • Provider receipts retain route identifiers, timestamps, hashes, and counts rather than raw event bodies.

Do not paste passwords, tokens, private keys, or authentication links into provider chat. Credential-shaped values are redacted as a defense in depth, not as a safe secret-entry workflow.

Errors and recovery

  • Provider says Config needed: a platform operator must complete the server configuration before an administrator can connect it.
  • Slack says permission changed: the administrator who started OAuth no longer has external_chat.manage; restore the intended customer-administrator role if appropriate and restart the connection flow.
  • Slack replies but native sessions or starter prompts are missing: ask the platform operator to verify the deployed version and Slack Agent messaging configuration, then reconnect from Topline to grant the agent permission. The Slack card's Ready or Active label is not a native-feature test.
  • Slack's Stop control is missing: the operator must verify the app subscribes to the stop event. Test during an active DM or mention request; slash-command replies and passive channel capture do not use native sessions.
  • Stop does not affect another person's request or a separate coding task: stopping is limited to your active chat turn. Ask the task owner or an authorized operator to manage independently started work.
  • Slack channel is missing: confirm Topline was added to that exact channel, the installation is active, and Slack delivered a membership or message event.
  • Topline says shared spaces are not enabled: the shared-space gate or authenticated join binding is unavailable, or the current Workspace route conflicts with its stored owner. In Google Chat's left sidebar, select Topline under Apps for the generally available direct-message path, then use /help. Native /help returns a private response even from an unavailable Space, so it can guide you without exposing setup details to everyone. A platform operator must verify tenant routing, the active destination installation, and the inviter's provider membership and linked access before retrying enrollment.
  • Topline says the Workspace is not connected: a Topline administrator must enable the exact Workspace email domain under Account > Chat Integrations and add the person with the same Google email. Chat-only access is sufficient and does not grant the web workspace or builder.
  • Message received; response not verified: Topline received the direct message but has not recorded a completed response. Confirm the member email, send /help and another sample question, then choose Check connection.
  • Latest Google Chat test failed: follow the retry instructions shown in Chat and include the short reference when contacting support. The card remains unverified until a later sample question receives a completed response.
  • Import failed: confirm the app still belongs to the Slack channel and its credentials can read the selected dates, then retry from Import history.
  • Explicit control is denied: confirm the sender has an active linked Topline account, Chat access (external_chat.use), and any required team/company approval capability.
  • Chat works but new memory is absent: ask an account administrator to inspect the member's Contribute to organizational memory control. Do not re-enable it merely to work around an intentional policy.
  • Slack memory is missing after leaving a channel: external-space memory follows current membership by design.

Enablement, smoke check, and rollback

After enabling native Slack sessions, verify a harmless DM and channel mention, the starter prompts, a request that needs confirmation, and stopping your own active request. Confirm the working indicator clears after success and failure. An operator should perform these checks in a test workspace before customer enablement. Source changes or a successful OAuth connection do not prove this live verification has happened.

For Slack passive-capture enablement, add Topline to a harmless test channel, send two ordinary messages, and verify the channel shows a recent captured time without a bot reply. After the quiet window, confirm an authorized member can retrieve the episode with a source citation. Then test remember this at the external-space audience and retract the test memory. For Google Chat, first verify /help from an unconnected test user, then enable a non-customer test Workspace and user and send a harmless sample question in a direct message. Do not use customer data and do not expect a captured-space row.

Roll back by selecting Disable for the installation. For Slack, removing Topline from an individual channel also stops that channel's capture; verify derived retrieval no longer returns the test conversation.

Current limitations

  • Slack is the generally available passive channel provider. Google Chat shared spaces and Topline link previews remain opt-in features with default-off runtime gates and separate Chat API/Marketplace configuration prerequisites.
  • Topline cannot ingest conversations where the app is not a member.
  • Earlier history requires an explicit per-space import.
  • Passive capture records that attachments exist but does not index attachment contents into the conversation episode. Send a required file through a supported Topline file workflow.
  • Installation state alone is not proof of company-wide coverage; each captured space and its delivery state must be checked.