Pulse — Internal Communications Agent¶
Thinklio Built-in Agent Specification Version 0.2 | March 2026
1. Purpose and Problem Statement¶
Pulse is the internal communications layer for Thinklio. It handles messaging between users within a workspace, and between agents and users — all within a single, coherent interface governed by an attention management philosophy.
The founding principle: communication should be quiet by default and surface what actually matters.
Most messaging tools are designed to demand attention continuously. Every message arrives as an interruption. The cognitive cost is real — context switching, notification fatigue, the pressure to respond immediately. Pulse is designed to work the other way. Messages arrive silently. The AI scores each one for attention urgency. Only what genuinely warrants interruption breaks through. Everything else is accessible when the user chooses to engage.
This is not a limitation — it is the product. Users who want to think deeply, work without interruption, or manage their communication on their own terms get that by default. Users who prefer more active communication can adjust their settings. The architecture serves different working styles rather than imposing one.
The second founding principle: agents are first-class message participants.
Agents can already respond to users through the chat interface — users go to an agent and ask it things. Pulse adds the complementary capability: agents can come to users, through the same channel as human colleagues. An agent completing a long-running job, a monitor detecting an important signal, a colleague's agent responding to a query — all arrive as messages in Pulse. The user's AI scores all of them for attention the same way, regardless of whether the sender is human or agent.
This opens up workflow flexibility that the platform would otherwise lack. Users who prefer to manage their Thinklio experience through messaging rather than through the chat interface can do so. Users who want their agents to communicate with them in the same place their team communicates with them can do so. The architecture supports different preferences without privileging any single pattern.
2. Attention Management Model¶
Every message that arrives in Pulse is assigned an attention score — a rating of how urgently it warrants the user's conscious engagement.
2.1 Attention Score¶
AttentionScore
├── level enum (interrupt | surface | available | silent)
├── reason string (why this score was assigned)
└── expires_at timestamp | null (after which the score may be re-evaluated)
| Level | Meaning | Default behaviour |
|---|---|---|
interrupt |
Requires the user's attention now | Push notification; appears at top of queue |
surface |
Worth seeing soon, but not urgent | Shown prominently on next Pulse open; no push |
available |
Accessible when the user chooses to look | In the thread, no prominence; no notification |
silent |
Background information; no action needed | Archived immediately; accessible via search |
2.2 Scoring Factors¶
The AI scores each incoming message using:
| Factor | Weight | Description |
|---|---|---|
| Sender relationship | High | Direct reports, manager, close collaborators score higher |
| Explicit mention | High | @mention or addressed directly to the user |
| Content urgency signals | High | Deadline language, urgent keywords, questions requiring a decision |
| Sender type | Medium | Human colleagues score higher than agents by default (configurable) |
| Thread context | Medium | Active threads the user is engaged in score higher |
| Time sensitivity | Medium | Messages referencing imminent events |
| User history | Medium | Topics the user typically responds to quickly |
| Time of day | Low | Respects focus hours and quiet hours settings |
| Message volume | Low | High-volume senders are down-weighted over time |
Scores are recalculated if context changes — a message scored available can be promoted to interrupt if a subsequent message in the same thread raises urgency.
2.3 User Override¶
Attention scores are AI suggestions, not constraints. Users can:
- Manually promote or demote any message's score
- Mark specific senders as always interrupt or always silent
- Temporarily silence all messages below a threshold (focus mode)
- Review the AI's reasoning for any score
The AI learns from user overrides over time — if a user consistently promotes a certain sender from surface to interrupt, the model adjusts for that sender.
3. Thread Types¶
3.1 Human-to-Human Thread¶
Direct or group conversation between workspace users. Conventional direct messaging with attention scoring applied on the recipient side. The AI's role is scoring and optionally assisting with drafting.
3.2 Agent Thread¶
A persistent thread between a user and a specific agent. Unlike the chat interface (which is session-based), an agent thread is continuous — the agent can post to it whenever it has something worth surfacing, and the user can reply directly.
Agent threads are the mechanism for agents to initiate communication. Appropriate uses:
- A Research Agent completing a deferred job posts its results
- A Monitor Agent detecting a triggered condition posts an alert
- The Personal Assistant proactively posts the morning briefing
- The Enquiry Agent notifies the user of a new high-priority Item
- A colleague's agent responds to a query on their behalf
Every agent the user interacts with can have a persistent thread. Threads for less active agents stay quiet — the attention model ensures this.
3.3 Hybrid Thread¶
A thread with both human and agent participants. Used when a conversation naturally involves both:
- A project thread where the Project Coordinator agent participates alongside team members, posting status updates and flagging blockers
- A support thread where the Enquiry Agent posts new Items and human team members respond
- A broadcast thread where an admin posts an announcement and agents can respond on behalf of recipients
Agent-sent messages in hybrid threads are always visually distinguished. A message from the Project Coordinator agent shows as "Project Coordinator" with an agent icon; a message from a colleague's personal agent shows as "[Name]'s agent."
4. Agents as Message Senders¶
Any agent in the Thinklio platform can send a message to a Pulse thread, subject to the following rules:
The agent must have a configured relationship with the recipient. Agents can message users they are assigned to, or users who are members of a team the agent is assigned to. Agents cannot cold-message users they have no connection to.
The message carries a declared intent. Agent messages carry a structured intent field (alert, result, update, question, response) used by the attention scoring model and displayed as context in the UI.
Frequency limits apply. A configurable per-agent message frequency limit prevents agents becoming noise sources. The default is conservative.
The user controls which agents can message them. In the Agent tab, users allow or block specific agents. By default: agents assigned directly to the user can post; team-level agents can post; org-level agents cannot post without explicit permission.
5. Workflow Preferences¶
Different users work differently. Pulse accommodates this through configurable workflow preferences.
5.1 Preference Profiles¶
Chat-first: The user primarily uses the chat interface for agent interaction. Pulse handles human communications and critical agent alerts only. Agent threads exist but are scored conservatively.
Message-first: The user manages everything through Pulse — agent results, colleague messages, and task notifications all arrive here. The attention model prevents this from becoming overwhelming.
Async-first: The user wants long stretches of uninterrupted time. Only interrupt-level messages surface during focus hours. Everything else accumulates silently and is reviewed in a batch at configured times.
Email-first: The user prefers email as their primary surface. Pulse is used only for urgent real-time communication. Non-urgent messages route to email via the Mail Agent.
These profiles are starting points, not fixed modes. Every setting can be customised individually.
5.2 Focus Modes¶
Focus modes temporarily override the standard attention model:
| Mode | Effect | Typical use |
|---|---|---|
| Deep work | Only interrupt messages surface; all others held |
Writing, complex analysis |
| Meeting | All messages held silently until mode ends | Back-to-back meetings |
| Offline | No messages delivered; queue held for return | Travel, genuine offline time |
| Catch-up | All held messages surface at once | Returning from offline period |
Focus modes can be set manually, scheduled, or triggered automatically by the Calendar Agent when a meeting begins.
6. Presence¶
Presence is real-time availability information — a live signal of whether the user is engaged.
| State | Source | Meaning |
|---|---|---|
| Active | Automatic (recent platform activity) | User is in the platform and responsive |
| Idle | Automatic (no activity for N minutes) | User may be present but not engaged |
| Focus | Manual or Calendar Agent trigger | Present but not accepting interruptions |
| Away | Manual | Not at their desk |
| Agent-only | Manual | User's agent is responding; user is not available |
| Offline | Automatic (no platform connection) | Not connected |
Presence is implemented as a real-time signal via Supabase Realtime subscriptions on a presence table. It reflects actual platform connection and interaction state — not AI inference. Where a user has multiple sessions (devices or tabs), the most active session determines the presence state.
Presence is visible to workspace members in the People tab and alongside sender names in threads. Users can configure visibility scope (all workspace / team only).
7. UI Structure¶
Chat Tab¶
The active conversation view. All thread types — human-to-human, agent thread, hybrid — use the same interface, with sender type indicated visually on each message. A context bar above the thread shows participants with presence indicators and any active agent in the thread.
Suggested replies appear below the compose field, not pre-filled — the user actively selects them rather than having text injected into their compose field.
Threads Tab¶
The message queue — threads sorted by attention score then recency. This is not a chronological feed.
Grouped by attention level:
- Needs attention (interrupt) — shown prominently at top
- When you're ready (surface) — clearly delineated below
- Background (available and silent) — collapsed by default, expandable
This visual grouping is the core of the attention surfacing experience.
People Tab¶
Workspace directory with real-time presence indicators. Each person shows: name, role, team, presence state, agent availability, and message / ask-their-agent actions.
Agent Tab¶
Personal Pulse configuration:
Attention settings: Sender overrides, focus mode schedule, push notification threshold, quiet hours.
Workflow preferences: Profile selection, focus mode triggers, message routing rules.
Agent messaging permissions: Which agents can post to threads, per-agent frequency limits, routing preferences (Pulse vs. email vs. notification only).
Proxy settings: Enable/disable proxy mode, topics the agent may respond to, activation conditions, knowledge sharing permissions.
8. Inter-Agent Behaviour¶
| Agent | Relationship |
|---|---|
| Personal Assistant | Primary source of proxy and assist mode intelligence in Pulse |
| Messenger Agent | Handles external platforms. A unified attention queue spanning both internal and external messaging is a natural future capability |
| Calendar Agent | Triggers focus modes on meeting events; feeds time context into attention scoring |
| Taskmaster | Pulse threads generate tasks; task due dates feed into attention scoring |
| Monitor Agent | Posts alerts to agent threads; interrupt intent by default for triggered conditions |
| Enquiry Agent | Posts new high-priority Item assignments to relevant users |
| Mail Agent | Routes non-urgent Pulse messages to email for email-first users; replies flow back |
9. Data Model¶
Thread
├── thread_id UUID
├── type enum (human | agent | hybrid)
├── name string | null
├── created_by_type enum (user | agent)
├── created_by_id UUID
├── created_at timestamp
└── participants[] ThreadParticipant[]
ThreadParticipant
├── thread_id UUID
├── participant_type enum (user | agent)
├── participant_id UUID
├── joined_at timestamp
└── last_read_at timestamp | null
Message
├── message_id UUID
├── thread_id UUID
├── sender_type enum (user | agent)
├── sender_id UUID
├── on_behalf_of UUID | null (user_id if agent is acting as proxy)
├── content string
├── intent enum (message | alert | result | update | question | response) | null
├── attention_score enum (interrupt | surface | available | silent)
├── attention_reason string | null
├── sent_at timestamp
└── edited_at timestamp | null
UserPresence
├── user_id UUID
├── state enum (active | idle | focus | away | agent_only | offline)
├── state_since timestamp
├── state_until timestamp | null
└── updated_at timestamp
UserPulsePreferences
├── user_id UUID
├── workflow_profile enum (chat_first | message_first | async_first | email_first)
├── push_threshold enum (interrupt | surface | all)
├── quiet_hours_start time | null
├── quiet_hours_end time | null
├── sender_overrides JSONB
├── agent_permissions JSONB
└── proxy_config JSONB
10. Use Cases¶
UC-1: Uninterrupted deep work¶
A user spends two hours writing. No notifications arrive. When they open Pulse: one thread in "Needs attention" (a team lead asking for a decision), three threads in "When you're ready" (a routine question, a resolved Monitor alert, and a completed Research Agent briefing). The user handles what matters first. They never felt the other messages arrive.
UC-2: Agent result via thread¶
A user kicked off a research job yesterday. Their workflow preference is message-first. Rather than checking the chat interface, the Briefing Agent posts to their agent thread when complete: "Your briefing on aged care regulatory changes is ready. [Preview] [Open full briefing]." Scored surface — it waits in "When you're ready."
UC-3: Colleague's agent responding¶
User A asks User B's status on a deployment. User B is in Agent-only mode. User B's PA responds from its knowledge: "Sam's agent: The deployment is staged and ready. Sam was planning to go live after the 3pm review. No blockers as of this morning." User A gets a useful answer without interrupting User B.
UC-4: Project hybrid thread¶
A project team thread includes the Project Coordinator agent alongside team members. During the week, the agent posts daily summaries: task completion, blockers, upcoming milestones. Summaries are scored available — informative, no action required. When a blocker needs human attention, the agent posts with interrupt intent and the message surfaces immediately.
UC-5: Focus mode from calendar¶
A user's calendar has a two-hour block labelled "Deep work." The Calendar Agent activates Focus mode automatically at the start. During those two hours, 11 messages arrive — only one scores interrupt (a direct question from the CEO about a deadline). The rest queue silently. At the end of the block, the user gets a catch-up summary: "11 messages while you were in focus. 1 needed attention — you saw it. 10 are waiting when you're ready."
11. Open Questions¶
- Should attention score be visible to the message sender? Transparency argues for it; gaming the model (flooding messages with urgency language) argues against.
- The unified attention queue spanning Pulse and Messenger Agent (internal + external) is the natural evolution. What triggers that integration — user opt-in, or automatic once both agents are configured?
- Persistent agent threads accumulate over time into a meaningful record of agent activity. What is the retention policy, and can users export or search this history?
- The attention scoring model learns from user overrides. This learning lives in the user knowledge layer and must not influence scoring for other users. This is structurally guaranteed by the knowledge model but worth explicitly confirming in the platform security review.
- For the proxy model: should there be a way for User A to know, before sending, whether User B's agent is available to respond? Showing this in the People tab (alongside presence) would help set communication expectations.
Previous: Foundational Chat Agent | See also: Messenger Agent (external platforms), Personal Assistant (proxy mode)