Ship the code.Then ship the story.
Pulsor connects to your GitHub repositories and reads what you already do commits, releases, shifting tech stacks then drafts developer-focused threads, code cards, and diagrams, ready to post.
read-only by default · no code leaves your review
feat: cache AST between runs (40% faster cold start)
| No. | Property | Value | Remark |
|---|---|---|---|
| 01 | Repositories per workspace | Unlimited | Public and private |
| 02 | Push to first draft | < 60 s | Median, after a merge |
| 03 | Output formats | 6 | Threads, cards, notes, digests, visuals, cross-posts |
| 04 | Copy written by hand | 0 | You review Pulsor drafts |
From push to post in three moves
Connect
Authorize GitHub and pick the repositories Pulsor may watch. Read-only by default nothing else is touched.
Scan
On every merge, release, or stack change, Pulsor reads the diff and its context not just the commit message.
Ship
Get a drafted thread, snippet card, or changelog. Edit inline, then post or schedule to X and LinkedIn.
Six formats from one source of truth
Text posts & threads
Narrative threads that explain what changed and why it matters, in a builder's voice.
Code snippet cards
Syntax-highlighted cards pulled from the actual diff the line that mattered, framed.
Changelog & release notes
Human-readable release notes generated from tagged commits and pull-request titles.
Visuals & diagrams
Architecture and before/after diagrams drawn from your file tree and dependencies.
Weekly digest
A Friday summary of the week's progress across every watched repo, ready to send.
LinkedIn / X cross-post
One draft, reformatted for each network's length and tone, posted on your schedule.
What Pulsor drafts from a real commit
Three commits, three formats written in Pulsor's voice from real commit patterns, so you can judge the quality before connecting a repo.
fix: cache AST between runs (40% faster cold start)
1/Spent the morning chasing a 40% cold-start regression. Found it: AST wasn't cached between runs, so every request re-parsed the same files from scratch.
2/Fix was smaller than expected — hash the file content, cache the parsed tree, invalidate on hash mismatch. ~30 lines.
3/Before: 340ms cold start. After: 205ms. The parse step was quietly eating more than a third of every request.
4/Lesson: “it's just parsing, it's fast” is the kind of assumption that survives until you actually profile it. Always profile it.
fix: race condition in webhook dedup
const seen = new Set();const seen = await redis.setnx(eventId, 1, { EX: 60 });One in-memory Set per process meant duplicate webhooks slipped through under load-balanced replicas. Moved dedup to Redis with a 60s TTL — now it's actually distributed, not per-instance.
release: v2.4.0
- Faster cold starts — AST caching between runs cuts cold-start latency ~40%
- Fixed — duplicate webhook delivery under multi-replica load
- New — /health endpoint now reports queue depth, not just liveness
Hooks into the workflow you already run
GitHub first, read-only, scoped to the repositories you name. Publishing and scheduling connect out to the networks you post on.
The parts engineers ask about
Does Pulsor need write access?
No. It reads your repositories read-only by default. Publishing uses separate, revocable tokens for each network you connect.
Will it post without me?
Never automatically. Every draft waits for your review you post or schedule it when it reads right.
What about private repos?
Supported. Nothing is stored beyond what's needed to draft, and your code never leaves the review step.
Which languages does it read?
Any language in your diff. Pulsor reads the change and its context, not a fixed set of parsers.
Point Pulsor at a repo
Join the waitlist and get early access, plus a sample thread generated from a public repo of your choice.