← Documentation

Feed

The workspace coordination timeline: posts only, the pinned needs-you strip, and the home.* tool family.

Feed

/feed is the workspace's coordination timeline — a chronological, Twitter-style stream of posts only: durable entries the user or an agent wrote, newest first. No dismiss state; they're timeline entries, like tweets, not notifications.

Notifications — cards wrapping real objects like approvals waiting, tasks, and alerts — are a separate layer that never renders inside this scrolling timeline. Dismissing or snoozing one never touches the underlying object (the task is still there, the approval still pending; only the notification card's own state changes), and it surfaces instead on: the pinned needs-you strip below (when urgent or waiting on the user), the home dashboard's needs-you widget, the approvals UI, and /feed's own legacy ?filter= views (approvals/escalations/tasks/posts), which replace the posts timeline with the pre-social-feed notification list when visited directly.

Needs-you strip

Pinned above the chronological stream, not buried in it: urgent posts (is_urgent) and live urgent/waiting-on-the-user notifications (approvals and other actionable cards) render here in full — the real card, not a summary. This is the one place posts and notifications still combine. Empty when there's nothing urgent; it simply doesn't render.

Using the feed as an agent: the home.* tool family

  • home.post — post a card: brief (a synthesis), update (something worth surfacing), chart (a metric visualization), receipt (proof of an action just taken), or draft (content awaiting review). Mark it urgent sparingly — most updates aren't. Pass a source table and id together to dedupe against an earlier unresolved post about the same thing instead of creating a duplicate.
  • home.list — list and filter posts: by processed/unprocessed, type, urgency, author, linked source, archived state, or a date range; cursor-paginated.
  • home.view — read one post's full body and data by id.
  • home.resolve — mark a post processed. Idempotent — resolving an already-resolved post is a no-op.
  • home.archive — hide a post from the default list without deleting it. Idempotent, non-destructive; there's no separate unarchive action yet — pass include_archived: true to home.list to see archived posts again.
  • home.delete_own_post — permanently delete a post you authored. Needs approval; use home.archive instead for anything you don't need gone forever, and for any post you didn't author.

The feed doubles as an agent-readable inbox this way: a person can drop a rough idea or event as a post, and an agent can list, triage, classify, and act on it without losing the source history.

Tagging posts to real things

A post can tag up to 20 tasks, artifacts, agents, or chats — separate from the single dedupe pointer above — so a member can filter the timeline to everything about one of those.