Skip to main content

Content editor

The content editor is where you review, refine, and publish generated content. It is also collaborative: teammates edit the same piece in real time, with sharing, comments, and tracked suggestions - see Collaboration.

Editor layout

Every piece autosaves as you edit. Long-form types (blog, email, press release, custom) get a rich-text editor with a formatting toolbar - paragraph and heading styles, lists, and an Image button that inserts images from your library at the cursor - laid out in a centered page-width column. X pieces open the thread composer, one box per tweet with media attached per tweet. Other social captions edit full width, with a Media bar for attaching images or video from the library.

Email pieces add subject and preview-text fields plus content and preview tabs, with an a/b tab when an A/B test is on; see Email drafts and A/B tests.

The menu bar

Actions sit in a text menu bar above the editor, in this order:

  • Publish ▾ - post now to a connected account, create an email draft (email pieces), or Schedule for later…, which opens the connection, date, and time picker. On a scheduled piece the button reads Scheduled and holds Publish Now and Edit time, with the scheduled time shown beside it.
  • Status - move the piece between draft, ready, and published.
  • Share - the sharing dialog: people, roles, links, and expiry. Presence avatars for everyone in the piece sit beside it. See Collaboration.
  • Repurpose ▾ - create a brief for another configured channel (see below).
  • Export ▾ - download the piece as Markdown (.md) or Word (.docx).
  • History ▾ - version history, the same unified control used across the app (see Versions).
  • UTM ▾ - the piece's UTM tracking parameters with a copy button.
  • The trash icon deletes the piece.

Once a piece has published it is locked: no edits, status changes, or deletion.

AI refinement

Refinement runs through the global assistant (⌘L). Because it is page-aware, it sees the draft you have open; ask for any change ("cut the intro", "make this suitable for a technical audience", "write a version 50% shorter") and it returns a proposed revision as a card. Click Review changes to see the edit as an inline diff in the editor, then accept or discard it. Nothing is applied without your review.

Targeted AI edits (per-section or per-tweet) go through the same inline diff review.

Voice Tab

Pause typing for about half a second and the editor can offer a ghost-text continuation in your brand voice, drawn from your verbal identity, lexicon, channel tone, and similar passages from your own library. Tab accepts the suggestion, ⌘→ (Ctrl+→) accepts one word of it, Esc or simply typing dismisses it. Tab is only intercepted while a ghost is visible, so list indentation and normal Tab behavior are untouched.

Every suggestion passes the Guard's deterministic lint before it renders: a completion that would introduce a violation (a banned phrase, an em dash) is dropped, not repaired. You get on-voice text or nothing.

Two switches control it: a session toggle in the editor toolbar, and a workspace-wide Voice Tab suggestions switch on the Anti-Slop Guard page. Published pieces never get suggestions.

Cmd-K selection edits

Select prose and press ⌘K (Ctrl+K) to edit exactly that selection. Type an instruction ("tighten this", "turn it into a question"); Enter replaces the selection in place, and the overlay stays open tracking the new text so you can keep refining. ⌥↵ (Alt+Enter) asks a question about the selection instead: the answer shows in the overlay without touching the document, with a Do it button that applies the instruction as an edit after all. Esc closes.

On phones, selecting text surfaces a floating ✦ Edit with AI pill at the bottom of the screen; tapping it opens the same edit card.

⌘K only activates when something is selected on an editable piece; otherwise the shortcut falls through to the browser. Published pieces are locked.

Guard squiggles

The Guard's deterministic lint runs live in the editor: pure pattern matching, no AI calls, re-checked shortly after you stop typing. Violations get an amber underline (deliberately not spell-check red). Click one to see the rule and two actions: Ignore skips that exact string for the session, and Fix with Guard repairs just the containing paragraph and swaps the result in. The Guard: N chip in the toolbar shows the live count and toggles the underlines per session. On published pieces the underlines are informational; the actions hide.

Claim checks

Generation grounds the draft's checkable factual claims automatically, and the results are stored with the piece. The editor shows them as a row of dismissible chips, one per claim, marked supported, unverified, or contradicted - hover for the note, click a sourced chip to open the evidence. The chips are advisory only; nothing in the publish pipeline reads them as a gate.

The Related bar under the editor lists semantically similar pieces from your library, with their performance where available. Use it to repurpose an angle that worked, or to differentiate from something you already shipped. It loads on first expand and depends on the library's semantic index, which builds automatically as content is created.

Import and repurpose

Content that lives outside Reactor can come in: New ▾ → Import document on the Content page uploads a file (.md, .doc, .docx, or .pdf, up to 15 MB) and creates a draft piece as any of your content types. Importing a URL or pasted text is MCP-only (import_content).

From any open piece, Repurpose ▾ re-shapes it for a different configured channel: pick the channel, confirm, and it generates immediately, landing you on the Generate page's live stream. The new piece preserves the original's substance and joins its content group. Same-platform rewrites don't need Repurpose; that's what AI refinement is for.

Versions

Every piece keeps version history behind History ▾ - the same version control the engine pages use: a baseline, automatic snapshots around AI edits and restores, and manual versions you save yourself. Open the history to compare, and restore any previous version. Restores are themselves recorded, so a restore can be undone.

Publishing from the editor

Publish now

Open Publish ▾ and pick the connected account; the piece posts and its status changes to published. See Publish now for per-platform behavior. On email pieces the menu offers Draft in [provider] instead of a direct post: Reactor builds a ready-to-send draft in your email provider and never sends itself (see Email).

Schedule

Publish ▾ → Schedule for later…, then pick a connection, date, and time. The post lands on the calendar and publishes automatically. Reschedule from the same menu (Edit time) or by clicking the scheduled time in the menu bar.

Export

Content on channels without a publishing connection (press releases, custom channels) exports instead: Export ▾ downloads Markdown or DOCX.

Content status

StatusDescription
generatingAI is still writing
draftGenerated but not yet reviewed
readyMarked as approved
publishedSuccessfully posted to a platform

Move status with the Status control in the menu bar or the set_content_status MCP tool.