Write a Reddit post and pick a draft
Read the subreddit, write a plan, get three blind options and record the one you pick
This guide writes a Reddit post for r/running from start to finish. You need a key from an owner or admin with reddit:signals:read and reddit:posts:write (the Models and data preset), plus curl and jq.
1. Read the subreddit
curl -s "https://app.makesmores.com/api/v1/top-posts?subreddit=running" \
-H "Authorization: Bearer $SMORE_API_KEY" > top.json
jq '{ai_policy, plan_hints, base_rate}' top.json
Check ai_policy.status before anything else:
| Status | What to do |
|---|---|
banned | Stop. S'more does not draft for this subreddit |
possible_ban | Show the person ai_policy.rule_untrusted. Draft only if they confirm the rules allow AI-written posts, and then send confirm_rules_allow_ai: true |
no_rule_found, unknown | Go ahead, and still read rules_untrusted before posting |
plan_hints gives a length and a format that do well in the subreddit. example_plan shows a complete plan.
2. Write the plan
A plan holds the facts. The writer supplies the voice, so keep the plan plain:
angle: one sentence on what the post is about.points: 2 to 8, each with itsevidence. Put the numbers and names inevidence.author_specifics: 1 to 8 details about the writer, only ones the person told you.format: must say text only.length_words: 80 to 150.- No links, no
[slots], nothing about images or video.
3. Submit it
curl -s https://app.makesmores.com/api/v1/drafts \
-H "Authorization: Bearer $SMORE_API_KEY" \
-H "Content-Type: application/json" \
-d @- <<JSON | tee draft.json
{
"platform": "reddit",
"type": "post",
"idempotency_key": "guide-$(date +%s)",
"subreddit": "running",
"plan": {
"format": "personal experience, text only",
"length_words": 140,
"angle": "First half marathon went better than expected after moving most training to easy runs",
"points": [
{ "point": "Most weekly mileage was run at an easy pace", "evidence": "about 80% of mileage, heart rate under 145" },
{ "point": "Finished faster than the goal time", "evidence": "1:52 against a 2:00 goal" }
],
"author_specifics": ["Started running eight months before the race", "Had a calf strain in the third month"],
"closing": "ask readers how they paced their second half marathon"
}
}
JSON
The answer comes back at once with draft_id and state: "queued". If the plan breaks a rule, you get 422 plan_invalid with each problem in details; fix those fields and send again with a new idempotency_key.
The draft deducts its maximum now, about 3,750 credits ($3.75), and refunds what it does not use when it finishes.
4. Poll until it is ready
DRAFT_ID=$(jq -r .draft_id draft.json)
curl -s "https://app.makesmores.com/api/v1/drafts/$DRAFT_ID" \
-H "Authorization: Bearer $SMORE_API_KEY" | jq '{state, poll_after_s, gpu}'
Read it again every poll_after_s seconds until state is ready or failed. The first draft after a quiet spell waits a few minutes for a GPU to start; gpu.state shows waiting, starting or running. In bash:
while :; do
curl -s "https://app.makesmores.com/api/v1/drafts/$DRAFT_ID" \
-H "Authorization: Bearer $SMORE_API_KEY" > read.json
state=$(jq -r .state read.json)
[ "$state" = queued ] || [ "$state" = writing ] || break
sleep "$(jq -r .poll_after_s read.json)"
done
jq '{state, error, options: [.options[] | {option, model, title, p_top10, facts}]}' read.json
5. Check the options, then show them
Before showing an option, check it against your plan. facts holds S'more's own number and name check: local_check is pass when nothing was added or dropped. The read's fact_check.how is a rubric your agent can run against fact_check.plan_facts to catch anything else. Drop any option that adds a fact the plan does not hold.
Show the remaining options with their titles, bodies and scores, without naming any model: model is null until you record a choice.
6. Record the pick
curl -s "https://app.makesmores.com/api/v1/drafts/$DRAFT_ID/choice" \
-H "Authorization: Bearer $SMORE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"option": "B"}' | jq '.options'
Now the answer names the writer behind each option. Your picks over time show which writer suits your subreddits; pin it with model next time to get three options from it.
7. Post it yourself
Show rules_to_check_untrusted and get a yes for each rule. Then open open_url, switch Reddit's editor to Markdown, and paste title into Title and body into Body exactly as they are. S'more never posts.
Over MCP, an agent does the same with smore_get_top_posts, smore_draft_reddit_post, smore_get_draft and smore_choose_draft.