linkedin-archive
Archive Marcel's recent LinkedIn posts into the Obsidian vault as weekly markdown files matching the social-corpus format.
Skill by marcelfahle
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/marcelfahle-linkedin-archive
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, backend
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/linkedin-archive
What's inside
- Skill name
linkedin-archive- Description
- Archive Marcel's recent LinkedIn posts into the Obsidian vault as weekly markdown files matching the social-corpus format. Use when Marcel says "archive my LinkedIn", "pull my LinkedIn", "/linkedin-archive", "update the social corpus", or "what did I post on LinkedIn this week — and capture it". Runs as a Claude cowork skill on Marcel's own machine (logged-in browser session); does NOT run on the gateway VM. Companion to the Twitter side (`~/.openclaw/bin/social-archive-x.mjs`, auto-cron Sat 21:00 Madrid) which uses the X API and runs unattended. LinkedIn API doesn't allow own-timeline reads at consumer tier, so this is intentionally manual/assisted.
- License
- MIT
- Instructions
- 127 lines in SKILL.md · view on GitHub
Agent Skills spec issues
- files: referenced but missing: scripts/linkedin-archive.mjs
Files (1)
- SKILL.md
SKILL.md (first lines)
# linkedin-archive
Capture LinkedIn posts into the Obsidian vault for the social-media-calendar corpus. Weekly files at `_WORK/Social/linkedin/YYYY-WXX.md` mirror the Twitter side so Merrick can read both as one source when planning content.
This skill runs in **Claude cowork** on Marcel's laptop — i.e. a Claude instance with browser tools and direct access to the synced Obsidian vault on disk. It does NOT run on the gateway VM (Albert). The OpenClaw side reads the vault but does not write to it from this skill.
## When to invoke
Trigger when Marcel says:
- "archive my LinkedIn" / "pull my LinkedIn"
- "/linkedin-archive"
- "update the social corpus" (LinkedIn half — pair with the Twitter cron status)
- "what did I post on LinkedIn this week" + any "and capture it" framing
- "catch up the LinkedIn archive" (backfill mode)
Do NOT trigger when:
- The request is about drafting *new* LinkedIn posts → that's a content task, not archiving.
- The request is about *competitors'* LinkedIn → use `linkedin-research` (Apify-based) instead.
## Vault layout (read first, don't re-derive)
```
<vault-root>/_WORK/Social/
├── linkedin/
│ └── YYYY-WXX.md # ISO-week, this skill writes here
└── twitter/
└── YYYY-WXX.md # ISO-week, written by the X API cron — read-only for this skill
```
Find `<vault-root>` once per session: it's the Obsidian vault folder that contains `_WORK/`. On Marcel's Mac it's typically `~/obsidian/mf/` (matches the gateway VM path). If unsure, ask once, then remember for the rest of the session.
## File format (match exactly)
Each weekly file:
```markdown
---
source: linkedin
profile: https://www.linkedin.com/in/marcelfahle/
week: YYYY-WXX
---
# LinkedIn — YYYY Week NN
## YYYY-MM-DD — Title (first clause, ≤70 chars)
Reactions: N · Comments: N · Reposts: N
[View post](https://www.linkedin.com/feed/update/urn:li:activity:NNNNNNNNNNNNNNNNNNN/)
<full post text, preserving paragraph breaks>
<!-- id:NNNNNNNNNNNNNNNNNNN -->
---
```
Rules:
- `id` = the numeric portion of `urn:li:activity:NNNN…`. Stable across renames.
- ISO week of `YYYY-MM-DD` (Mon–Sun, year-of-Thursday) decides which file an entry lands in.
- Order entries newest-first inside each week file.
- Preserve emoji, line breaks, and link text exactly as posted. Don't summarize or paraphrase the body.
- For shared/reposted/comment-only items: still capture if Marcel authored the comment; mark `Type: Comment on @<author>'s post` and quote the parent in a `>` blockquote, mirroring the Twitter side's reply context.
## Workflow
### Step 1 — Pick a mode
**Mode A: Browser scrape (default if cowork has a working browser tool).**
1. Open `https://www.linkedin.com/in/marcelfahle/recent-activity/all/`.
2. Scroll until the earliest visible post is older than the most recent `<!-- id:… -->` marker already present across the linkedin/ weekly files (find that marker first to know where to stop).
3. For each visible activity card, extract:
- `activity_id` (from the `data-urn` attribute or the "Copy link to post" menu — `urn:li:activity:NNN`)
- `posted_at` (the relative date on the card — resolve to absolute YYYY-MM-DD using today as anchor)
- `text` (full body — expand "see more" before extracting)
- `reactions`, `comments`, `reposts` (footer counters; treat blank as 0)
- Post URL: `https://www.linkedin.com/feed/update/urn:li:activity:NNN/`
4. Skip cards Marcel didn't author (likes/saves of others). Keep comments Marcel wrote on others' posts — they're part of his voice.
**Mode B: Paste mode (use if browser scrape is blocked or rate-limited).**
1. Ask Marcel to scroll to his recent activity and paste a chunk (multiple posts) of the page text.
2. Parse the paste for activity blocks. LinkedIn's copy-paste leaves the same fields recognizable: byline, relative date, body, reaction counts.
3. For activity IDs, Marcel can right-click → "Copy link to post" per item; ask for a small batch of links once you've parsed the bodies so you can fill in the `id` and URL fields.
### Step 2 — Dedup against existing files
For every candidate post:
1. Read the target week file (compute it from `posted_at`).
2. If the file already contains `<!-- id:<this-id> -->`, skip.
3. Otherwise, insert the new entry **newest-first** (above existing entries in that week's H2 stream, after the frontmatter + H1).
If the week file doesn't exist, create it with the frontmatter + H1 header shown above, then add the entry.
### Step 3 — Write to disk
Write the markdown files directly to `<vault-root>/_WORK/Social/linkedin/YYYY-WXX.md`. Obsidian Sync will push to the gateway VM where Merrick can read it.
### Step 4 — Report back
End with a short summary in this shape (≤6 lines), so Marcel can spot misses:
```
LinkedIn archive: <total new> posts added across <N> weeks
YYYY-WXX: +N (top: <title>, eng=R/C/R)
YYYY-WYY: +N
Vault: <vault-root>/_WORK/Social/linkedin/
```
## Anti-patterns
1. **Never invent post text, dates, or engagement numbers.** If a field is missing from the source page or paste, leave it blank rather than guess. Engagement counts are a known LinkedIn-UI hide pattern at low values — `0` is fine, made-up `2` is not.
2. **Never overwrite an existing entry.** Idempotency depends on the `<!-- id:N -->` markers. If you spot a wrong entry, fix it in place; do not delete + re-add.
3. **Never publish, edit, or react to LinkedIn posts from this skill.** Read-only.
4. **Don't write to `_WORK/Social/twitter/`** — that side is owned by the X API cron on the gateway. Crossing the lane will fight the dedup on that side.
5. **Don't summarize the body.** The corpus is for Merrick to read Marcel's actual voice; paraphrase ≠ voice sample.
6. **Don't fall through to `linkedin-research`.** That skill is for *other people's* LinkedIn (competitors, prospects), not Marcel's own archive.
## Cadence
- Marcel triggers this manually, typically weekly (Saturday or Sunday), to keep parity with the Twitter cron.
- A future companion (`scripts/linkedin-archive.mjs`) could be added if Marcel decides to let cowork drive Playwright on a schedule. Not built yet — LinkedIn's anti-automation makes the manual trigger less brittle.From marcelfahle/skills, MIT.
More from marcelfahle/skills
- 0.524score
brand-dossier
marcelfahle
Research a prospect/company/creator (from names or URLs) and produce a Bold demo-prep brand dossier — a folder with a paste-ready markdown file (org context…
SkillBFreshness: BClaude Code +9 - 0.479score
alpha-humanizer
marcelfahle
Transform AI-generated content into prose that reads as 100% human-written.
SkillCFreshness: CClaude Code +9 - 0.479score
keyword-research
marcelfahle
Run real keyword research with DataForSEO.
SkillCFreshness: CClaude Code +9 - 0.479score
x-read
marcelfahle
Read tweets, threads, user timelines, mentions, bookmarks, likes, and search results from X (Twitter) via the official X API v2.
SkillCFreshness: CClaude Code +9 - 0.474score
zight
marcelfahle
Analyze Zight screenshots and screen recordings from share.zight.com links.
SkillCFreshness: CClaude Code - 0.252score
template-skill
marcelfahle
Describe what this skill does and when to use it.
SkillCFreshness: CClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Jun 2, 2026 (4 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/marcelfahle/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from marcelfahle
- 0.524score
brand-dossier
marcelfahle
Research a prospect/company/creator (from names or URLs) and produce a Bold demo-prep brand dossier — a folder with a paste-ready markdown file (org context…
SkillBFreshness: BClaude Code +9 - 0.479score
alpha-humanizer
marcelfahle
Transform AI-generated content into prose that reads as 100% human-written.
SkillCFreshness: CClaude Code +9 - 0.479score
keyword-research
marcelfahle
Run real keyword research with DataForSEO.
SkillCFreshness: CClaude Code +9 - 0.479score
x-read
marcelfahle
Read tweets, threads, user timelines, mentions, bookmarks, likes, and search results from X (Twitter) via the official X API v2.
SkillCFreshness: CClaude Code +9 - 0.474score
zight
marcelfahle
Analyze Zight screenshots and screen recordings from share.zight.com links.
SkillCFreshness: CClaude Code
Cite this page
linkedin-archive skill. Agent Mart. https://agentmart.dev/skills/marcelfahle-linkedin-archive (last updated 2026-10-24)