← Selected work

An internal system built by Outermost

Keeping work moving between conversations

An assistant and workspace that keep source material, drafts, decisions, and follow-up attached to the same task.

Internal system built by Outermost

Workflow design · Agent systems · Application development

The problem

The work continues after the conversation.

A vendor quote can involve an email thread, an attached document, a question back to the vendor, and a decision days later. I built this internal system to keep that work together as the conversation and evidence change.

In the example below, the user asks the assistant to review a quote and prepare a reply. The task keeps its source correspondence, conversation, prepared work, and next step, so a later request can pick up from the same record.

The mobile workspace.

View full-size screenshot →
Business workspace showing a fictional vendor enquiry with its linked source email and a conversation asking the assistant to prepare a reply.
The working interface, shown with fictional business records and adapted branding.

The work

Carry the task through a change in evidence.

Prepare from the actual source.

The assistant reads the linked email, quote, and task history before preparing a response. Dated context and source identifiers help it resolve which document or earlier decision the user means.

Make the action reviewable.

The user reviews the exact recipient and message before an approved send. The system checks the approval and records the result against the task. Changing the draft requires a new review.

Bring a reply back to the work.

Background checks watch the assigned correspondence for change. New evidence can trigger an assessment of what the reply answers and what remains. Unchanged checks stay quiet, and an acknowledgment alone does not resolve the task.

When a reply arrives

New information. The same task.

The vendor has answered the scope question, but optional support still needs a decision. The earlier session update remains visible beside the newer email update, and the task stays open with a next move.

The vendor quote task after a reply, showing the earlier working-session update, a new-email notice, and the latest recorded update with an outstanding decision.
A later state of the same fictional task. The original source and subsequent update remain distinct.

What it provides

The answer and the remaining decision stay together.

The workspace and Telegram provide two ways to work with the same records. Tasks retain their next step, owner, evidence, and history across conversations. The user can return to the work with both the original context and subsequent updates in view.

Explore more AI systems and workflows →

Implementation details

System architecture

How work returns to the assistant.

Interactive context, continuing work, and memory ingestion
An AI assistant with persistent work, contextual memory and reply monitoring The Next.js and React workspace and Telegram interface connect to a Claude Agent SDK runner with resumable sessions and task-context retrieval. Typed actions pass through a separate TypeScript and Hono broker, which holds provider credentials outside the agent sandbox and applies action-specific approval rules. Providers include Gmail, Google Calendar, and read-only Google Drive search and export. Separate SQLite databases retain runner conversations and event intake, and broker tasks, draft revisions, approvals, action receipts, and monitor state. Graphiti and Neo4j provide long-term contextual memory, distinct from operational task state. Bounded memory context and optional deeper search reach interactive reasoning through the broker. Eligible completed conversational turns enter an outbox and a separate broker ingestion worker that scrubs and classifies material before storing selected user-derived facts and episodes. Background event and delegated turns do not receive broad memory access. Gmail history detection flows through an event gateway and durable runner inbox. Thread-change signals route to broker monitors without starting model turns. Broker checks read the scoped thread and stored schedule; when new evidence needs assessment, a runner worker claims bounded work. Assessments and next checks persist to the same task. These checks do not send follow-up messages or complete tasks. Selected paths are shown, not every internal call. AN ASSISTANT WITH CONTINUING WORK INTERFACES REASONING ACTION CONTROL PROVIDERS Requests Actions Context Interactive memory retrieval Eligible completed turns · outbox Store Session context Work records Scope, evidence and next check Gmail history reads Signals New evidence Thread reads Business workspace Next.js / React Tasks, source material and drafts Telegram Messaging and decisions Two views of the same work Claude Agent SDK AI RUNNER Resumable sessions Task and source context Reasoning and tool selection Restricted execution environment Action broker TypeScript / Hono Typed, scoped calls Provider credentials outside sandbox Per-action approval rules Exact content reviewed when required Google Gmail Read / draft / send Calendar Read / update Drive Read / export Runner state SQLite Conversations and event inbox Session IDs and delivery records Work state SQLite Tasks, draft revisions and approvals Action receipts and monitor state Long-term memory Graphiti / Neo4j Dated facts, relationships and sources Bounded context + optional search Memory ingestion Broker worker · scrub and classify Selected user-derived facts and episodes BETWEEN CONVERSATIONS Event intake Gmail history detector Gateway → durable runner inbox Thread signals route without a model call Reply monitoring & due checks Broker reads scoped threads and checks recorded schedules. Runner worker claims bounded assessment work when needed. Assessments and next steps return to the same task record.

The workspace and Telegram connect to resumable Claude Agent SDK sessions. A TypeScript broker controls provider calls and retrieves Graphiti / Neo4j memory for interactive requests. SQLite retains conversation and work state. Separate ingestion and monitoring workers store selected memory and bring new evidence back to open tasks.

Providers and responsibilities
  1. Interfaces · Next.js / React and Telegram

    The web workspace exposes source material, task conversation, prepared work, and decisions. Telegram accesses the same underlying task records.

  2. Reasoning · Claude Agent SDK

    The runner resumes conversations and retrieves task context before choosing tools. Each turn uses a restricted execution environment.

  3. Action control · TypeScript / Hono

    The broker validates typed requests, checks the caller’s scope, and enforces action-specific approval rules. Provider credentials remain outside the agent sandbox.

  4. Connected services · Google

    Gmail provides correspondence and message actions. Google Calendar supplies availability and calendar operations. Google Drive supports file discovery and retrieval.

  5. Persistent records · SQLite

    Runner storage retains conversations and dispatch state. Broker storage retains tasks, draft revisions, approvals, monitoring progress, and action results.

  6. Long-term memory · Graphiti / Neo4j

    Selected facts and relationships retain dates and source attribution. The broker retrieves relevant memory for interactive turns; deeper search is available as a tool. A separate worker screens eligible completed turns from a durable outbox before storing selected material.

  7. Background work · Event intake and scheduled checks

    Durable event intake and task workers can bring new evidence into a later turn. Correspondence checks compare thread changes before scheduling an assessment; unchanged checks stay quiet.

Memory retrieval supplies eligible interactive turns through the broker. Ingestion follows a separate path from completed conversations. Background reply workers receive scoped task evidence; broad memory retrieval is not part of that path.View the full diagram →

State, memory, and continuing work

SQLite retains operational task state, conversation history, draft revisions, approvals, and action results. Graphiti and Neo4j retain selected facts and relationships with dates and source attribution. The broker retrieves relevant memory for eligible interactive requests; a separate ingestion worker screens completed conversations before storing selected material.

Background reply workers use scoped task evidence rather than broad memory retrieval. Updates carry an expected revision, preventing an older worker from overwriting a newer decision. Assessments must match the messages read, and quoted attachments must have been retrieved.

If a send loses its receipt, recovery checks the saved message identifier and returned content against the prepared reply. An inconclusive result remains unresolved rather than triggering a blind resend.

Across the workspace

See what needs attention.

The morning brief brings calendar events, due work, email assessments, and suggested tasks into one view. It assembles existing records; suggestions become commitments only when accepted.

Morning brief with fictional calendar events, a due vendor task, an email assessment, and a suggested service renewal review.
The morning brief, shown with fictional business records.

One execution boundary

Approval belongs to a specific action.

The review covers the recipient, subject, and message revision. The broker checks that approval before sending; editing the draft requires a new review.

The mobile reply review.

View full-size screenshot →
Reply review showing a fictional vendor email, the prepared response, and controls to confirm sending or return to editing.
The reply review step, shown with the same fictional business records.

Contact

What are you working through?

hello@outermost.us