pub struct PersonaBlogConfig {Show 15 fields
pub persona: String,
pub enabled: bool,
pub poll_interval_seconds: u64,
pub interval_jitter_pct: u32,
pub active_hours: Option<ActiveHoursConfig>,
pub posts_dir: String,
pub out_dir: String,
pub seed_lookback_days: i64,
pub candidates_per_draft: usize,
pub site_url: String,
pub site_title: String,
pub writer_provider: Option<AgentProviderConfig>,
pub deploy_command: Option<String>,
pub x_announce: Option<XAnnounceConfig>,
pub github_readme: Option<GithubReadmeConfig>,
}Expand description
Personal-blog publishing configuration.
When present, the daemon registers a PersonaBlogScheduler that
fires DaemonCommand::PersonaBlog on a weekly cadence (with jitter).
The handler picks the highest-engagement X post from the prior
seed_lookback_days (default 7) as the topic seed, drafts a
long-form essay via the blog_writer agent, routes through
Telegram for review, writes the picked draft as Markdown to
posts_dir, and re-renders the static site into out_dir.
Configured under [daemon.persona_blog] (single block, not a
list — one blog per daemon).
Fields§
§persona: StringPersona registry name (e.g. "heartbit-ghost:x"). Must match an
existing persona whose post history + engagement store are
already configured under [[daemon.persona_posts]] for the same
slug — the blog reuses those stores for seed selection.
enabled: boolWhether the blog scheduler is enabled.
poll_interval_seconds: u64Polling interval in seconds. Default 604_800 (7 days = weekly). Validation: must be ≥3600 (1 hour) — anything tighter is almost certainly a misconfig and produces thin posts.
interval_jitter_pct: u32Jitter percentage applied to the cadence. Default 10 — tighter than X posts because weekly is already coarse and operators usually want a predictable day-of-week.
active_hours: Option<ActiveHoursConfig>Optional active-hours window for the scheduler.
posts_dir: StringDirectory holding the generated Markdown post files. Relative to
the daemon’s CWD; tilde-expanded.
Default: "blog-site/posts".
out_dir: StringDirectory where the rendered static site is written. Relative to
CWD; tilde-expanded. This is what gets deployed to Cloudflare
Pages (commit + push triggers deploy).
Default: "blog-site/public".
seed_lookback_days: i64How many days back to look for the highest-engagement X post
used as the topic seed. Default 7. Set to 0 to disable
X-derived seeding (forces the operator to set topic_brief).
candidates_per_draft: usizeNumber of candidate essay drafts per tick. Default 2 — long-form drafts are expensive (~3-5k tokens each); 2 is enough for meaningful comparison without blowing the budget.
site_url: StringPublic site URL (required) — used to build canonical URLs, OpenGraph tags, the sitemap, and the RSS feed.
site_title: StringSite title rendered in <title> and the index page header.
Default: "pascal.heartbit.ai".
writer_provider: Option<AgentProviderConfig>Optional override LLM provider for the blog_writer + critic.
None falls back to the global [provider]. Same shape as
persona_posts.writer_provider.
deploy_command: Option<String>Optional shell command run after a successful BlogOutcome::Posted.
Runs from the daemon CWD; env is inherited (use this with
CLOUDFLARE_API_TOKEN exported in the daemon shell to invoke
wrangler pages deploy …). Empty/None skips the hook.
x_announce: Option<XAnnounceConfig>Optional X self-amplification — when Some(cfg) and cfg.enabled,
each successful blog publish (after deploy_command succeeds or is
absent) enqueues a DaemonCommand::BlogAnnounceX that drafts an
announcement thread through the existing X persona pipeline +
Telegram review.
github_readme: Option<GithubReadmeConfig>Optional GitHub Profile README auto-update — when Some(cfg) and
cfg.enabled, each successful blog publish re-renders the
operator’s profile README to feature the 3 most recent essays
and pushes the change to GitHub via the local repo clone.
Trait Implementations§
Source§impl Clone for PersonaBlogConfig
impl Clone for PersonaBlogConfig
Source§fn clone(&self) -> PersonaBlogConfig
fn clone(&self) -> PersonaBlogConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more