Automatically generate post-ready build-in-public drafts from your git history (and optionally on merged PRs)
Turn your code commits into social media content — automatically.
Auto Build In Public is a plug-and-play tool that:
- ✅ Works locally (fastest) — Generate drafts from a git range (or “after a command”)
- ✅ Works in GitHub Actions (optional) — Generate drafts on PR merges and schedules
- ✅ Generates social drafts — Creates X thread and LinkedIn post drafts for every change
- ✅ Commits drafts to your repo — Reviewable, versionable markdown files
- ✅ Scales your content — Stop writing updates manually; let your commits tell the story
Result: After shipping code, you get post-ready drafts automatically so you actually share consistently.
This is the fastest way to get value right now: generate drafts from your local git history (including “work backwards” after you ran a command).
- Set your OpenAI key:
export OPENAI_API_KEY=your_key_here- Install the CLI (dev from this repo):
cd action
npm run build
npm link- Run the agent:
bipDrafts are written to .build-in-public/drafts/.
One-shot alternatives:
bip after "shipped v0.1.0"
bip range v0.1.0..HEADCreate .github/workflows/auto-build-in-public.yml:
name: Auto Build in Public
on:
workflow_dispatch:
inputs:
mode:
description: 'Execution mode'
required: true
type: choice
options: [pr, roundup]
default: pr
pr_number:
description: 'PR number (for pr mode)'
required: false
type: string
period:
description: 'Period identifier (for roundup mode)'
required: false
type: string
permissions:
contents: read
jobs:
generate-drafts:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
# Pin by major version tag (recommended)
- uses: auto-build-in-public/auto-build-in-public/action@v1
id: generate
with:
mode: ${{ github.event.inputs.mode }}
pr_number: ${{ github.event.inputs.pr_number }}
period: ${{ github.event.inputs.period }}
- name: Commit drafts
run: |
git config user.name 'github-actions[bot]'
git config user.email 'github-actions[bot]@users.noreply.github.com'
git add .build-in-public/drafts
git commit -m "chore(bip): update drafts [skip bip]" || true
git push
shell: bashFor other repos, prefer pinning by major version tag:
- uses: auto-build-in-public/auto-build-in-public/action@v1Create .build-in-public/config.yml:
# Persona preset: indie-hacker, oss-maintainer, or dev-tool-builder
persona: indie-hacker
product:
name: "Your Product Name"
links:
- "https://yourproduct.com"Go to Actions → Auto Build in Public → Run workflow to generate your first drafts.
Merged PR → Analyze Context → Generate Drafts → Commit to Repo → Review & Post
- Trigger: Run manually, on PR merge, or on a schedule
- Context Collection: Reads PR metadata, diff summary, and README
- Draft Generation: Creates 3 angles per event (ship/update, lesson learned, behind the scenes)
- Writeback: Commits markdown drafts to
.build-in-public/drafts/ - Review: You review, edit, and copy/paste to X and LinkedIn
Choose from 3 built-in personas:
| Persona | Voice | Best For |
|---|---|---|
indie-hacker |
Casual, first-person, transparent | Solo founders building in public |
oss-maintainer |
Community-focused, gratitude-centered | Open source maintainers |
dev-tool-builder |
Value-focused, problem-solution | Developer tools and APIs |
Control detail level and redaction:
safety:
detail_level: "high-level" # Options: high-level, technical-but-redacted
redaction:
enabled: true
denylist_patterns:
- "**/*.env"
- "**/secrets/**"
custom_regex:
- "(?i)api[_-]?key"
validation:
block_code_blocks: true
block_secrets: trueCustomize hashtags and emoji per platform:
platforms:
x:
emoji_policy: minimal
hashtags: ["#buildinpublic", "#indiedev"]
linkedin:
emoji_policy: none
hashtags: minimalGenerated drafts include frontmatter metadata:
---
platform: x
source:
type: pr
pr_number: "123"
generated_at: 2026-01-28T00:00:00Z
safety_level: safe
---
🚀 Just shipped: [Feature Name]
[Thread content...]This is active development. We're shipping incrementally by phase:
| Phase | Description | Status |
|---|---|---|
| 1 | Manual workflow + deterministic writeback | ✅ Complete |
| 2 | Repo configuration & persona controls | ✅ Complete |
| 3 | Bounded GitHub context ingestion | ✅ Complete |
| 4 | Safety & privacy gate | 🚧 In Progress |
| 5 | Posting-quality draft generation | ✅ Complete |
| 6 | Automation triggers (merge + schedule) | ✅ Complete |
| 7 | MCP server integration | ✅ Complete |
| 8 | Tool-first onboarding + distribution | 📋 Planned |
| 9 | Solo-dev content workflow UX | 📋 Planned |
| 10 | OSS maintenance & trust | 📋 Planned |
See .planning/ROADMAP.md for details.
- Node.js 20+
- npm or yarn
cd action
npm install
npm run buildexport OPENAI_API_KEY=your_key_here
node dist/cli/index.jsauto-build-in-public/
├── action/ # GitHub Action implementation
│ ├── src/ # TypeScript source
│ │ ├── config/ # Config schema & loader
│ │ ├── context/ # GitHub context collection
│ │ ├── drafts/ # Draft generation & writing
│ │ └── safety/ # Privacy & security utilities
│ ├── lib/ # Compiled JS (npm run build)
│ ├── dist/ # Bundled action + CLI (ncc)
│ └── action.yml # Action metadata
├── .github/workflows/ # Example workflows
├── .planning/ # Project documentation (PROJECT.md, ROADMAP.md, etc.)
└── .build-in-public/ # Generated drafts (committed)
This action is safe by default:
- 🔒 AI-first — Requires
OPENAI_API_KEYfor LLM draft generation - 🔒 Redaction-first — Strips sensitive patterns before processing
- 🔒 Bounded context — Never scans your entire repo or raw code by default
- 🔒 Safe logging — GitHub Actions logs never contain full prompts or outputs
- 🔒 Least-privilege — Only requires
contents: writepermission
We welcome contributions! Please read .planning/REQUIREMENTS.md to understand the roadmap and constraints.
MIT License — see LICENSE file for details.
Built for indie hackers, OSS maintainers, and dev-tool builders who want to ship in public without the work.