Optimize raw engineering output (buildlog entries, GH synthesis, daily notes, session logs) into high-quality ::linkedin Obsidian notes that produce the best possible LinWheel reshape output. Structures content around proven LinkedIn post anatomy: hooks, tension, specifics, and angle-ready beats. Use when writing vault notes destined for the LinWheel pipeline.
Turn raw engineering output into ::linkedin notes that reshape loves.
The LinWheel content engine (analyze + reshape) produces output proportional to input quality. This skill optimizes the INPUT — the Obsidian note that triggers the cadence pipeline — so reshape has the richest possible material to work with across all 7 angles.
You are NOT writing LinkedIn posts. You are writing source material that the LLM reshape step will decompose into angle-specific posts. Think of yourself as a journalist filing notes that a columnist will turn into articles.
::linkedin notes to the Obsidian vault (Buildlog/ or Writing/Drafts/)/Users/peleke/Library/Mobile Documents/iCloud~md~obsidian/Documents/ClawTheCurious/Buildlog/
Filename: YYYY-MM-DD-{slug}.md (e.g., 2026-02-27-github-watcher-shipped.md)
Each of the 7 angles looks for different raw material in the source text:
| Angle | What It Needs in the Source | Example Beat |
|---|---|---|
| field_note | Concrete "I did X, Y happened" sequences | "Shipped 3 PRs across 2 repos. The overlay mount fix took 4 attempts." |
| contrarian | A conventional wisdom + evidence it's wrong | "Everyone says microservices. We went monolith and deploy 10x faster." |
| demystification | A complex thing + a simple explanation | "Overlayfs inotify doesn't fire for lower-layer changes. Here's why." |
| identity_validation | A relatable struggle + resolution | "I spent 3 hours debugging a mount unit. Turns out: one backslash." |
| provocateur | A sacred cow + a reason to question it | "Most AI agent frameworks are overengineered. A shell script beats them." |
| synthesizer | Two unrelated ideas + a surprising connection | "The same pattern that makes Obsidian plugins great makes MCP servers great." |
| curious_cat | A genuine open question + why it matters | "Why does every dev tool assume you'll use their dashboard? What if you won't?" |
A good source note contains 3-5 beats (discrete story units). Each beat is 2-4 sentences that capture one moment, decision, or insight. Reshape picks different beats for different angles.
BAD source note (generic, no beats):
Today I worked on the GitHub Watcher responder. It scans repos and generates LinkedIn content.
I also fixed some bugs. The tests pass now. Overall productive day.
GOOD source note (beat-rich, angle-ready):
The GitHub Watcher shipped today — 14 files, 1500 lines, 33 tests.
It runs on a cron, scans every Peleke/* repo for the day's PRs and buildlog entries,
then synthesizes a narrative via LLM. The output is a ::linkedin-tagged Obsidian note.
The existing pipeline carries it the rest of the way: ObsidianWatcher detects the file,
LinWheel reshapes it into 21 drafts, Telegram pings me to review.
The hardest part wasn't the code — it was the overlay mount. Writing to the upper dir
directly bypasses inotify on the merged mount. Chokidar never sees the file. I burned
2 hours before realizing the write path matters more than the write content.
Every dependency is injectable: GitHub client, file writer, clock, LLM. The tests
mock everything. No network calls in CI. This is the pattern I wish every framework
taught instead of "just mock the module."
Here's the thing nobody talks about: most "content creation tools" require you to
stop working and start creating content. What if the content was a side effect of
the work itself? That's what this pipeline does. Ship code → content appears.
Count the beats:
Reshape can pull from any of these to generate posts for different angles.
---
linkedin_angles:
- field_note
- contrarian
- demystification
---
::linkedin
# {Title — Descriptive, Not Clickbait}
{Beat 1: The headline fact. What shipped, what changed, what happened.
Include numbers: PRs merged, lines written, tests passing, hours spent.}
{Beat 2: The "how" — architecture, approach, or process. One specific
technical decision explained simply enough for a senior non-specialist.}
{Beat 3: The struggle or surprise. Something that went wrong, took longer
than expected, or challenged an assumption. Be specific about the failure.}
{Beat 4: The insight or lesson. What you'd tell someone starting this
from scratch. Frame as "the thing nobody tells you" or "what I wish I knew."}
{Beat 5 (optional): The bigger picture. Connect this work to a trend,
a contrarian position, or an open question in the industry.}
The linkedin_angles frontmatter tells the LinWheel publisher which angles to use
instead of the defaults (field_note, demystification, contrarian).
Choose angles based on the strongest beats:
field_notecontrariandemystificationidentity_validationprovocateursynthesizercurious_catPick 2-4 angles maximum. More angles = thinner material per angle.
These rules produce source material that reshape handles well:
split instead of reshape.1. READ the raw input (buildlog entry, GH synthesis, session notes)
2. IDENTIFY the 3-5 strongest beats:
- What's the most concrete thing that happened?
- What was surprising or counterintuitive?
- What would a technical peer find interesting?
- What's the relatable human moment?
- What's the bigger industry connection?
3. SELECT 2-4 angles that match the beats
4. WRITE the source note following the template
5. ADD frontmatter with linkedin_angles
6. WRITE to vault: {vaultPath}/Buildlog/YYYY-MM-DD-{slug}.md
1. EXTRACT the key claims, decisions, or insights from the session
2. PICK the single strongest thread (don't try to cover everything)
3. FIND the tension: what was the debate? what was counterintuitive?
4. WRITE 3-4 beats around that single thread
5. ADD frontmatter, write to vault
1. READ the PR title, description, and diff summary
2. TRANSLATE technical changes into impact: "what does this enable?"
3. FIND the story: why was this built? what problem existed before?
4. INCLUDE one specific technical detail that demonstrates craft
5. WRITE 3-4 beats, add frontmatter, write to vault
| Anti-Pattern | Why It Fails | Fix |
|---|---|---|
| Laundry list of commits | Reshape can't find a narrative thread | Pick the 1-2 most interesting commits, tell the story |
| All abstract, no specifics | "Made progress on infrastructure" gives reshape nothing | Add numbers, names, outcomes |
| Already formatted for LinkedIn | Short lines, emojis, hashtags confuse reshape | Write natural prose, let reshape format |
| Too many topics | 800 words covering 5 different projects | One thread per note. Split into multiple notes. |
| No tension | "Everything worked great" | Find the struggle. There's always one. |
| Passive voice throughout | "The system was deployed" hides the author | "I deployed" — LinkedIn is personal |
| Marketing language | "Excited to announce" "game-changing" | Be specific and direct. No hype. |
Before writing the note to the vault, verify:
::linkedin marker (line 1 after frontmatter, or line 2 if H1 on line 1)linkedin_angles in frontmatter with 2-4 anglesYYYY-MM-DD-{slug}.md conventionToday's GitHub activity focused on the OpenClaw sandbox project. PR #100 was merged,
adding the GitHub Watcher responder to the cadence pipeline. This responder scans all
Peleke/* repos nightly, collects merged PRs, open PRs, and buildlog entries, then
synthesizes them via LLM into a narrative engineering log. The output is tagged with
::linkedin and written to the Obsidian vault, where the existing pipeline processes it.
---
linkedin_angles:
- field_note
- contrarian
- synthesizer
---
::linkedin
# The Code That Writes Its Own LinkedIn Posts
PR #100 shipped today: a GitHub Watcher that scans every repo I own, collects the day's
PRs and buildlog entries, and synthesizes them into a LinkedIn-ready note via Opus. 14
files, 1500 lines, 33 tests. Merged on the first review.
The architecture is boring on purpose. A cron fires at 9 PM. The watcher subscribes to
that signal, scans repos sequentially (rate limits), and writes one markdown file to the
Obsidian vault. The existing pipeline — ObsidianWatcher, LinWheel publisher, Telegram
notifier — carries it from there. No new infrastructure. No new dashboards. Just one
more subscriber on the signal bus.
The part that almost broke me: overlay mounts. I wrote to the upper directory and
Chokidar never saw the file. Turns out overlayfs inotify only fires on the merged mount.
Two hours of "why isn't this working" before I realized the write PATH matters more than
the write CONTENT.
Every dependency is injectable — GitHub client, filesystem, clock, LLM provider. The
test suite mocks all of them. Zero network calls in CI. I've written enough untestable
code in my career to know: if you can't test the happy path without a network connection,
the architecture is wrong.
Here's what I keep coming back to: most content tools ask you to stop working and start
creating content. But what if content was a side effect of the work itself? I ship code.
The pipeline notices. Drafts appear in my queue. I approve the good ones over coffee.
That's it. What other workflows could work this way?
Notice: same facts, completely different source quality. The optimized version has 5 clear beats, tension (the overlay debugging), a contrarian position (injectable deps), and an open question at the end. Reshape will produce dramatically better posts from this input.