Skip to content

Publishing

Once the post is ready, you put it up on Blogger. Before publishing, the two gates (AI-smell, AdSense) screen the post once more, and only a post that clears them gets uploaded. It’s safer to confirm with a dry-run first before the actual upload.

An actual publish needs three files.

  • BLOG_ID_KO and BLOG_ID_EN in .env
  • scripts/credentials.json (Google OAuth client)
  • scripts/token.json (generated automatically on first publish)

If you don’t know the blog IDs, the list-blogs command shows your account’s blog list and IDs. Write the IDs you find into .env.

BLOG_ID_KO=1234567890
BLOG_ID_EN=9876543210

There’s no need to make token.json ahead of time. It’s created automatically once you consent to Google in the browser on your first publish.

Look at the post that’s ready to go up first. Tell Claude Code “show me posts awaiting publish” or run the command directly.

Terminal window
./scripts/deploy.sh staging

Normal screen: the list of posts awaiting publish under _workspace/posts/new/ shows. If the slug of the post you just wrote shows, it’s fine.

Preview the result before the actual upload.

Terminal window
./scripts/deploy.sh publish-new --slug {slug} --dry-run

Replace {slug} with the slug of the post you just wrote. The dry-run shows which post goes to which blog without actually putting it up. The two gates are re-checked at this step too.

Stuck screen:

  • AI-smell gate fail → the post gets blocked. It means the AI flavor is heavy, so saying “rewrite it with less AI flavor” sends the orchestrator back to Phase 2 to fix it.
  • Credentials missing → it runs only through dry-run and preflight, then stops. It reports which file is missing, so go back to the OAuth item in prerequisites.

When the dry-run is clean, put it up for real.

Terminal window
./scripts/deploy.sh publish-new --slug {slug}

On the first publish, the browser opens here and asks for Google consent. Once you consent, token.json is created and the upload proceeds.

Be sure to name the slug. Without a slug, every post in staging becomes a target, and posts you didn’t mean to put up yet can go up together.

Once the upload finishes, see that the post moved to archive and the metadata is planted.

Terminal window
find _workspace/posts/ko _workspace/posts/en -iname "{slug}.md" -print

Normal screen: the post moves from posts/new/ to posts/, and blogger_url gets filled into the frontmatter. Open that URL and you see the actually-published post. If you put up both the Korean and English versions, two file paths should show.

When you fix a published post and put it back up, the base backs up the prior version first. A republish sometimes has to bypass the AI-smell gate, so there’s a --skip-gate flag, but you don’t use it for a new post’s first publish. The first publish has to clear the gate normally.

Once your first post is up, see what got screened automatically before publishing in automated-safety-net. If you want to spread the published post, go to promote.