Skip to content

keryx social

Compose the copy a piece of an article is announced with, per platform: a reel's (--workspace <slug>, or --article <dir> --reel <slug>) or a post's (--article <dir> --post <id>, made with post new). Both live in the article's social.json with each outlet's status, due hour and result.

keryx social set <platform> (--article <dir> (--reel <slug> | --post <id>) | --workspace <slug>) --text "…" [--tags "#a,#b"] [--title …] [--description …] [--link …]
keryx social show (--article <dir> [--reel <slug> | --post <id>] | --workspace <slug>)
keryx social gen  (--article <dir> (--reel <slug> | --post <id>) | --workspace <slug>) [--platform <p>]...
keryx social rm <platform> (--article <dir> (--reel <slug> | --post <id>) | --workspace <slug>)
  • set — the inject path: set a piece's fields on a platform directly. Partial updates preserve untouched fields. Prints constraint warnings (text/title overflow, link clickability).
  • show — list the outlets in scope with per-platform constraint checks (R-SOC-1/2).
  • gen — the LLM path: generate platform-appropriate copy via the configured chat provider (providers.chat.*), one tailored draft per platform (R-SOC-4), not one caption everywhere. A reel is grounded on its storyboard, source and direction as well as the article; a post on the article alone, and a post's image gets alt text if it has none. Without --platform it composes for the piece's own platforms, or, for a piece that targets none yet, for every enabled platform whose publisher can take it (spec 0062 D1).
  • rm — drop a platform from a piece. A piece is for exactly the platforms it has a record on; a posted one cannot be dropped.

Which constraints block, and which only warn

Each platform carries a text cap, a title cap, a link-clickability flag and a hashtag norm. Every field is overridable per platform under platforms.<name>.constraints.* — see configuration keys for the defaults and the key names.

Only text or title overflow blocks: keryx approve refuses that outlet. A title on a platform with no title field, or a link on a platform where links are not clickable, is advisory — you get a warning such as instagram links are not clickable — the URL is kept as the pointer; say "link in bio" and publishing still proceeds.

Status flows draft → approved → posted, per outlet.