Skip to main content

Comments, notes, and activity

Every post carries its own collaboration layer: live co-editing of the post's text, a comment thread for team discussion, free-form notes for context, and an append-only activity log that records every change with who made it. None of it is ever published — it's internal, visible only to teammates who can see the post.

Editing together

Two or more teammates can open the same post and edit a variant's text — or an X thread — at the same time. You see each other's cursors as coloured carets, and the post header shows an N editing chip while more than one person has it open. Changes merge automatically as you type, so there's no manual save and no locking.

A Synced / Syncing / Offline indicator shows the editor's save state. If you lose connection, your edits buffer locally and merge back in when you reconnect; if real-time editing can't be reached at all, the editor falls back to plain autosave so nothing is lost.

Comments

The Comments & activity feed sits below the variants on the post detail page, with a composer at the bottom — write a comment and click Comment. Comments are team discussion about the post, not comments on the live social post.

You can edit or delete your own comments from the pencil and trash buttons on each one. Comments appear in the feed chronologically, interleaved with activity entries.

Notes

Notes live in the property pane on the right. Use them for research, references, inspiration links — context that doesn't belong in the discussion thread. Click + to add one:

  • Title is optional; content is required.
  • Notes use the rich-text editor: / commands for AI actions and blocks (headings, lists, quotes, dividers) and :emoji: autocomplete.

Edit or delete a note from its Edit and trash buttons — you can manage notes you created; workspace admins and owners can manage anyone's (see members and roles).

Peer review

Want a second pair of eyes? Request a Peer review from any teammate via the Approvals section of the property pane. The reviewer can approve, reject, or request changes — optionally with a note for the author — and the request grants them access to the post even while it's private. Peer review is feedback only — it never satisfies a channel's publishing approval.

Who sees a post

Posts are private by default: only you and the people involved (channel owners, peer reviewers, approvers) can see them. The Visibility control in the property pane switches a post between Private and On org calendar, which opens it to the whole workspace. See permissions.

Activity: the audit trail

Everything that happens to a post is recorded as an activity entry — one line per event with the actor, what changed, and when. Requests from the app, the REST API, and AI agents over MCP all act as a user, so the entry names that user; events triggered by WriteMars itself (like the scheduler publishing a variant) show as System.

What gets logged:

CategoryEvents
Postcreated, updated (title, description, cover image), deleted, state changed, campaign assigned/removed, labels added/removed
Variantsvariant created, updated, removed, scheduled, published, failed
Auto-engagementengagement executed, engagement failed
Collaborationcomment added, note added, attachment added/removed, approval requested, approval superseded, approved, rejected, changes requested

Entries store the old and new values, so state changes read like "changed state from Drafting to Review" and schedules like "scheduled LinkedIn for Jun 20, 9:00 AM". Failed publishes log the error alongside the variant's error message. When you edit content that was already approved, the approval is superseded and logged as its own entry so the record stays honest about needing another look.

Rapid edits don't spam the feed: a run of autosaves to the same field by the same person within a 15-minute window folds into a single entry that tracks how many edits it covers, rather than one row per keystroke.

The log is append-only — it can't be edited or deleted from the app — which makes it the audit trail for the post. To consume it programmatically, use GET …/posts/<post_id>/activity/ (paginated); see the API quickstart.