Pulse Copilot

Pulse Copilot

Pulse Copilot is the AI assistant embedded in the Pulse dashboard. You ask it a question in natural language; it has access to the operations toolkit and can read your data, find a teammate, look up a property, and — when you ask — create a task on your behalf.

Think of it as a chat-driven shortcut for everything you can do from the dashboard, plus a question-answering layer over your operations data.

In this section

  • Overview (this page)
  • Usage — common operator flows, what to ask, what to expect back

Overview

What it can do

  • Answer questions about your operations: "What's on my plate today?", "How many cleanings does Marina have this week?", "Is there a reservation in Vydrica next weekend?"
  • Create tasks for you: "Create a task for Zuzana to buy oven cleaner for the Prístavná flat — here's a photo."
  • Find people and properties: "What's Marina's WhatsApp number?", "Show me the configuration for Castle&River Vydrica."
  • Draft messages: "Draft a check-in message for Johanna's reservation tomorrow."

Where it lives

A floating panel in the bottom-right of the Pulse dashboard. Click the chat icon to open it; click again to dock.

The same chat history persists across page navigations within Pulse. Clear resets the conversation.

Image attachment

You can attach images two ways:

  1. Paperclip icon → native file picker.
  2. Paste (CMD+V / Ctrl+V) with an image on the clipboard — the image attaches as if uploaded. Added in #187, matches Claude.ai's behaviour.

Useful for: a screenshot of a guest WhatsApp thread, a photo of a broken appliance, an Airbnb screenshot of a review.

Max image size: ~5 MB raw (6.67 MB base64). Larger images trigger a toast.


How it handles requests

Behind the scenes the chat runs as a multi-round tool-use conversation:

  1. Operator sends a message + optional images.
  2. The chat model picks up tools — find_teammate, find_property, find_reservation, find_task_template, create_task, query_messages, etc.
  3. The model loops (up to 16 rounds) until it has enough information to respond.
  4. The final response is rendered with a footer showing "Used N tool rounds this turn. Handled by: \<specialist>".

Trust model

Critical: the chat will tell you what tools it called and what they returned. After #186 the UI shows a verification badge — "✓ Created task #N" — only when the corresponding tool actually executed AND returned ok. If the chat says it created a task but no tool was called, a warning banner reads:

⚠ The assistant says it did X but no tool was called — please verify.

If you ever see that banner, verify in Operations → Tasks before assuming the action happened.

Timeout & long requests

Heavy requests (image + multi-round tool work) can take 30–120 seconds. Pre-#186, the Fly proxy timed out at 60 s and the operator saw "Failed to execute 'json' on 'Response': Unexpected end of JSON input". After the fix, the proxy timeout was raised and a clearer error message surfaces when an actual timeout occurs:

The server is taking too long to respond. Your message may still be processing — check back in a moment before retrying.

Retry behaviour

The Retry button does not automatically re-send large images that were part of the failed turn. Before #187 retry was re-sending the heavy payload and re-failing the same way; now it warns first.


  • #186 — empty-response timeout + AI-hallucinated tool execution.
  • #187 — UX (clipped send button + paste-image support).
Source: the FlatsBratislava operator manual.