Initial release: X Bookmark Research for Claude Code
Claude Code extension that transforms Twitter/X bookmarks into structured research markdown files. Reads config for output directory and user interests, fetches bookmarks via bird CLI, and generates categorized notes with key insights, author context, and actionable items. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
commit
816ecd37e0
10 changed files with 867 additions and 0 deletions
16
.gitignore
vendored
Normal file
16
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
# OS files
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Editor files
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
|
||||||
|
# Personal config (users create their own)
|
||||||
|
config.yml
|
||||||
|
|
||||||
|
# Don't commit processed bookmarks
|
||||||
|
output/
|
||||||
21
LICENSE
Normal file
21
LICENSE
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2026 X Bookmark Research Contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
172
README.md
Normal file
172
README.md
Normal file
|
|
@ -0,0 +1,172 @@
|
||||||
|
# X Bookmark Research
|
||||||
|
|
||||||
|
A Claude Code extension that transforms your Twitter/X bookmarks into structured, actionable research notes.
|
||||||
|
|
||||||
|
Stop losing insights in your bookmark graveyard. This slash command fetches your bookmarks via the `bird` CLI, analyzes them with Claude, and writes organized markdown files with key insights, author context, and action items tied to your personal interests.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- **[Claude Code](https://docs.anthropic.com/en/docs/claude-code)** - Anthropic's CLI for Claude
|
||||||
|
- **[bird CLI](https://github.com/ryo-ma/bird)** - Twitter/X API client (must be authenticated)
|
||||||
|
- **Exa MCP Server** *(optional)* - Only needed for `--depth deep` web research mode
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### Option 1: Install Script
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/YOUR_USERNAME/X-bookmark-research.git
|
||||||
|
cd X-bookmark-research
|
||||||
|
./install.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option 2: Manual Copy
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Copy the slash command
|
||||||
|
cp commands/research-bookmarks.md ~/.claude/commands/
|
||||||
|
|
||||||
|
# Copy the skill
|
||||||
|
cp -r skills/x-bookmark-research ~/.claude/skills/
|
||||||
|
|
||||||
|
# Create your config
|
||||||
|
cp config/bookmark-research.example.yml ~/.claude/skills/x-bookmark-research/config.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
Then restart Claude Code.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Edit `~/.claude/skills/x-bookmark-research/config.yml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Where to save processed bookmarks
|
||||||
|
output_dir: ~/Desktop/Research/twitter-bookmarks
|
||||||
|
|
||||||
|
# Your interests (used in "Why This Matters" section)
|
||||||
|
interests:
|
||||||
|
- "My SaaS product"
|
||||||
|
- "AI/ML workflows"
|
||||||
|
- "Content creation"
|
||||||
|
|
||||||
|
# Default depth: quick | standard | deep
|
||||||
|
default_depth: standard
|
||||||
|
```
|
||||||
|
|
||||||
|
The `interests` list is key — it's how Claude connects each bookmark to *your* context instead of writing generic summaries.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```
|
||||||
|
/research-bookmarks # Interactive - asks how many and what depth
|
||||||
|
/research-bookmarks 5 # Process 5 recent bookmarks
|
||||||
|
/research-bookmarks all # Process all unprocessed bookmarks
|
||||||
|
/research-bookmarks <tweet-url> # Research a specific tweet
|
||||||
|
/research-bookmarks 10 --depth deep # 10 bookmarks with full web research
|
||||||
|
```
|
||||||
|
|
||||||
|
### Depth Levels
|
||||||
|
|
||||||
|
| Depth | What's Included | Speed |
|
||||||
|
|-------|-----------------|-------|
|
||||||
|
| `quick` | Tweet content, categorization, action items | Fast |
|
||||||
|
| `standard` | + Author bio and context via `bird about` | Moderate |
|
||||||
|
| `deep` | + Web search for broader context (needs Exa MCP) | Thorough |
|
||||||
|
|
||||||
|
## Output Format
|
||||||
|
|
||||||
|
Each bookmark becomes a markdown file like `2026-02-01-ai-workflow-tips.md`:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
title: "Descriptive Title Capturing the Essence"
|
||||||
|
author: "@handle (Full Name)"
|
||||||
|
date_bookmarked: 2026-02-01
|
||||||
|
original_date: 2026-01-31
|
||||||
|
category: AI & Machine Learning / LLM Applications
|
||||||
|
tweet_url: https://x.com/user/status/123456
|
||||||
|
engagement: 500 likes, 30 replies, 100 retweets
|
||||||
|
---
|
||||||
|
|
||||||
|
## Key Insight
|
||||||
|
[The actual takeaway, not a description]
|
||||||
|
|
||||||
|
## Full Content
|
||||||
|
[Verbatim tweet/thread text]
|
||||||
|
|
||||||
|
## Author Context
|
||||||
|
[Who they are and why their perspective matters]
|
||||||
|
|
||||||
|
## Why This Matters
|
||||||
|
[Connected to YOUR configured interests]
|
||||||
|
|
||||||
|
## Action Items
|
||||||
|
- [ ] Specific next step
|
||||||
|
- [ ] Another concrete action
|
||||||
|
```
|
||||||
|
|
||||||
|
See [`examples/sample-output.md`](examples/sample-output.md) for a complete example.
|
||||||
|
|
||||||
|
## Customization
|
||||||
|
|
||||||
|
### Custom Categories
|
||||||
|
|
||||||
|
Override the default category taxonomy in your config:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
categories:
|
||||||
|
- name: "AI & Machine Learning"
|
||||||
|
subcategories:
|
||||||
|
- "LLM Applications"
|
||||||
|
- "AI Tools"
|
||||||
|
- name: "My Custom Category"
|
||||||
|
subcategories:
|
||||||
|
- "Subtopic A"
|
||||||
|
- "Subtopic B"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Deduplication
|
||||||
|
|
||||||
|
The command automatically skips bookmarks that have already been processed by checking `tweet_url` in existing files in your output directory.
|
||||||
|
|
||||||
|
## How It Works
|
||||||
|
|
||||||
|
1. Reads your config for output directory, interests, and preferences
|
||||||
|
2. Fetches bookmarks from Twitter/X via `bird` CLI
|
||||||
|
3. Deduplicates against already-processed bookmarks
|
||||||
|
4. For each new bookmark:
|
||||||
|
- Parses tweet data (content, author, engagement, threads)
|
||||||
|
- Looks up author context (standard/deep depth)
|
||||||
|
- Searches web for broader context (deep depth only)
|
||||||
|
- Categorizes the content
|
||||||
|
- Generates a structured markdown file connected to your interests
|
||||||
|
5. Writes files to your configured output directory
|
||||||
|
6. Reports summary of created, skipped, and failed items
|
||||||
|
|
||||||
|
## File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
~/.claude/
|
||||||
|
commands/
|
||||||
|
research-bookmarks.md # Slash command (the main logic)
|
||||||
|
skills/
|
||||||
|
x-bookmark-research/
|
||||||
|
SKILL.md # Skill manifest
|
||||||
|
config.yml # Your personal config (not committed)
|
||||||
|
references/
|
||||||
|
output-format.md # Output template spec
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Contributions welcome! This is a Claude Code extension — all logic lives in markdown files that Claude interprets.
|
||||||
|
|
||||||
|
To contribute:
|
||||||
|
1. Fork the repo
|
||||||
|
2. Make your changes
|
||||||
|
3. Test by installing locally (`./install.sh`) and running `/research-bookmarks`
|
||||||
|
4. Open a PR with a description of what changed and why
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT - see [LICENSE](LICENSE)
|
||||||
192
commands/research-bookmarks.md
Normal file
192
commands/research-bookmarks.md
Normal file
|
|
@ -0,0 +1,192 @@
|
||||||
|
# Twitter Bookmark Research
|
||||||
|
|
||||||
|
Transform Twitter/X bookmarks into structured research notes.
|
||||||
|
|
||||||
|
## Arguments
|
||||||
|
|
||||||
|
- `$ARGUMENTS` - Optional: count (number), "all", or tweet URL
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
You are processing Twitter bookmarks into structured research markdown files.
|
||||||
|
|
||||||
|
### Step 0: Load Configuration
|
||||||
|
|
||||||
|
Read the config file at `~/.claude/skills/x-bookmark-research/config.yml`.
|
||||||
|
|
||||||
|
Extract these settings:
|
||||||
|
- `output_dir` - Directory to write processed bookmark files (expand `~`)
|
||||||
|
- `interests` - List of user interests/projects for the "Why This Matters" section
|
||||||
|
- `default_depth` - Default research depth (quick|standard|deep)
|
||||||
|
- `categories` - Optional custom category taxonomy (fall back to built-in defaults)
|
||||||
|
|
||||||
|
**If the config file does not exist**, stop and tell the user:
|
||||||
|
> Configuration not found. Please create `~/.claude/skills/x-bookmark-research/config.yml` with your settings.
|
||||||
|
> You can copy the example config: `cp ~/.claude/skills/x-bookmark-research/config.example.yml ~/.claude/skills/x-bookmark-research/config.yml`
|
||||||
|
|
||||||
|
Then list the required fields and exit.
|
||||||
|
|
||||||
|
### Step 1: Parse Arguments
|
||||||
|
|
||||||
|
Analyze `$ARGUMENTS`:
|
||||||
|
- **Empty**: Ask user how many bookmarks to process and preferred depth (quick/standard/deep)
|
||||||
|
- **Number** (e.g., "10"): Process that many recent bookmarks with the configured default depth
|
||||||
|
- **"all"**: Process all bookmarks, skipping already-processed ones
|
||||||
|
- **URL** (contains "x.com" or "twitter.com"): Research single tweet
|
||||||
|
- **"--depth X"** flag: Override research depth (quick|standard|deep)
|
||||||
|
|
||||||
|
Default depth comes from `default_depth` in config (falls back to `standard` if not set).
|
||||||
|
|
||||||
|
### Step 2: Load Existing Tweet IDs (Deduplication)
|
||||||
|
|
||||||
|
Scan the configured `output_dir` for existing files:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
grep -h "^tweet_url:" <output_dir>/*.md 2>/dev/null | sed 's/.*status\///' | sort -u
|
||||||
|
```
|
||||||
|
|
||||||
|
Store these IDs to skip already-processed bookmarks.
|
||||||
|
|
||||||
|
### Step 3: Fetch Bookmarks
|
||||||
|
|
||||||
|
For bookmark processing (not single URL):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bird bookmarks --json --count N
|
||||||
|
```
|
||||||
|
|
||||||
|
For single URL:
|
||||||
|
```bash
|
||||||
|
bird read "URL" --json
|
||||||
|
```
|
||||||
|
|
||||||
|
Parse the JSON output. Each bookmark contains:
|
||||||
|
- `id` - Tweet ID
|
||||||
|
- `author.handle` - @username
|
||||||
|
- `author.name` - Display name
|
||||||
|
- `text` - Tweet content
|
||||||
|
- `createdAt` - Original post date
|
||||||
|
- `stats.likes`, `stats.replies`, `stats.retweets` - Engagement
|
||||||
|
- `thread[]` - Thread parts if applicable
|
||||||
|
- `quotedTweet` - Quoted tweet if present
|
||||||
|
|
||||||
|
### Step 4: Process Each Bookmark
|
||||||
|
|
||||||
|
For each new (non-duplicate) bookmark:
|
||||||
|
|
||||||
|
#### 4a. Parse Tweet Data
|
||||||
|
Extract all relevant fields from JSON.
|
||||||
|
|
||||||
|
#### 4b. Author Research (standard/deep depth)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bird about @handle --json
|
||||||
|
```
|
||||||
|
|
||||||
|
Get author context: bio, follower count, location, account age.
|
||||||
|
|
||||||
|
#### 4c. Web Search (deep depth only)
|
||||||
|
|
||||||
|
Use Exa MCP `web_search_exa` tool to find:
|
||||||
|
- Author's other notable work
|
||||||
|
- Context on topics mentioned
|
||||||
|
- Related discussions
|
||||||
|
|
||||||
|
#### 4d. Analyze & Categorize
|
||||||
|
|
||||||
|
If custom `categories` are defined in config, use those. Otherwise use the default taxonomy:
|
||||||
|
|
||||||
|
- AI & Machine Learning / [subcategory]
|
||||||
|
- Engineering Practices / [subcategory]
|
||||||
|
- Thought Leadership / [subcategory]
|
||||||
|
- Product & Business / [subcategory]
|
||||||
|
- Career & Hiring / [subcategory]
|
||||||
|
- Tools & Automation / [subcategory]
|
||||||
|
- News & Announcements / [subcategory]
|
||||||
|
|
||||||
|
#### 4e. Generate Markdown
|
||||||
|
|
||||||
|
Create file following template from `~/.claude/skills/x-bookmark-research/references/output-format.md`:
|
||||||
|
|
||||||
|
**Filename**: `YYYY-MM-DD-slug.md` where:
|
||||||
|
- Date is today
|
||||||
|
- Slug is kebab-case title (max 50 chars)
|
||||||
|
|
||||||
|
**Content**:
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
title: [Descriptive title - capture the essence, not first words]
|
||||||
|
author: "@handle (Full Name)"
|
||||||
|
date_bookmarked: [today]
|
||||||
|
original_date: [tweet date]
|
||||||
|
category: [Category / Subcategory]
|
||||||
|
tweet_url: https://x.com/[user]/status/[id]
|
||||||
|
engagement: [N] likes, [N] replies, [N] retweets
|
||||||
|
---
|
||||||
|
|
||||||
|
## Key Insight
|
||||||
|
[1-2 sentence summary of WHY this matters - the insight, not description]
|
||||||
|
|
||||||
|
## Full Content
|
||||||
|
[Tweet text. For threads, use **N/** numbering]
|
||||||
|
|
||||||
|
## Author Context
|
||||||
|
[For standard/deep: who is this person, why their perspective matters]
|
||||||
|
|
||||||
|
## Why This Matters
|
||||||
|
[Connect to user's configured interests from config.yml]
|
||||||
|
|
||||||
|
## Action Items
|
||||||
|
- [ ] [Specific actionable step]
|
||||||
|
- [ ] [Another concrete action]
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4f. Write File
|
||||||
|
|
||||||
|
Write to the configured `output_dir`.
|
||||||
|
|
||||||
|
### Step 5: Report Summary
|
||||||
|
|
||||||
|
After processing, report:
|
||||||
|
- **Created**: N new research files
|
||||||
|
- **Skipped**: N already processed
|
||||||
|
- **Failed**: N errors (with reasons)
|
||||||
|
|
||||||
|
List the files created with their titles.
|
||||||
|
|
||||||
|
## Quality Guidelines
|
||||||
|
|
||||||
|
### Key Insight Section
|
||||||
|
- NOT a description ("This thread discusses...")
|
||||||
|
- IS the insight ("AI literacy is cognitive, not technical...")
|
||||||
|
- Ask: "What's the takeaway someone would remember?"
|
||||||
|
|
||||||
|
### Why This Matters Section
|
||||||
|
Connect specifically to the user's configured interests from `config.yml`. Reference the actual interest names/projects listed there. Be specific, not generic.
|
||||||
|
|
||||||
|
### Action Items
|
||||||
|
- Checkbox format: `- [ ]`
|
||||||
|
- Specific and actionable
|
||||||
|
- 2-4 items typical
|
||||||
|
- Tie actions back to user's configured interests where relevant
|
||||||
|
|
||||||
|
### Thread Handling
|
||||||
|
- Title reflects entire thread thesis
|
||||||
|
- Number all parts: `**1/**`, `**2/**`, etc.
|
||||||
|
- Key Insight covers full thread, not just first tweet
|
||||||
|
|
||||||
|
## Depth Levels
|
||||||
|
|
||||||
|
| Depth | What's Included |
|
||||||
|
|-------|-----------------|
|
||||||
|
| quick | Tweet content, basic analysis, action items |
|
||||||
|
| standard | + Author context via `bird about` |
|
||||||
|
| deep | + Web search for broader context |
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
- If `bird` command fails: Report error, suggest checking authentication
|
||||||
|
- If file write fails: Report path and error
|
||||||
|
- If author lookup fails: Continue without Author Context section
|
||||||
|
- If web search fails (deep mode): Continue with standard depth content
|
||||||
|
- If config file missing: Prompt user to create it (see Step 0)
|
||||||
39
config/bookmark-research.example.yml
Normal file
39
config/bookmark-research.example.yml
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
# X Bookmark Research - Configuration
|
||||||
|
# Copy this file to: ~/.claude/skills/x-bookmark-research/config.yml
|
||||||
|
# Then edit with your personal settings.
|
||||||
|
|
||||||
|
# Output directory for processed bookmarks (~ is expanded automatically)
|
||||||
|
output_dir: ~/Desktop/Research/twitter-bookmarks
|
||||||
|
|
||||||
|
# Your interests and projects (used in "Why This Matters" section)
|
||||||
|
# Be specific - these help Claude connect bookmarks to YOUR context
|
||||||
|
interests:
|
||||||
|
- "My SaaS product"
|
||||||
|
- "AI/ML workflows"
|
||||||
|
- "Content creation"
|
||||||
|
|
||||||
|
# Default research depth: quick | standard | deep
|
||||||
|
# - quick: Tweet content + basic analysis + action items
|
||||||
|
# - standard: + Author context via bird CLI (recommended)
|
||||||
|
# - deep: + Web search for broader context (requires Exa MCP)
|
||||||
|
default_depth: standard
|
||||||
|
|
||||||
|
# Custom categories (optional)
|
||||||
|
# Uncomment and edit to override the default taxonomy.
|
||||||
|
# Each category can have subcategories for finer classification.
|
||||||
|
# categories:
|
||||||
|
# - name: "AI & Machine Learning"
|
||||||
|
# subcategories:
|
||||||
|
# - "LLM Applications"
|
||||||
|
# - "AI Philosophy"
|
||||||
|
# - "AI Tools"
|
||||||
|
# - name: "Engineering Practices"
|
||||||
|
# subcategories:
|
||||||
|
# - "Documentation"
|
||||||
|
# - "Testing"
|
||||||
|
# - "Architecture"
|
||||||
|
# - name: "Product & Business"
|
||||||
|
# subcategories:
|
||||||
|
# - "Strategy"
|
||||||
|
# - "Growth"
|
||||||
|
# - "Pricing"
|
||||||
116
examples/sample-output.md
Normal file
116
examples/sample-output.md
Normal file
|
|
@ -0,0 +1,116 @@
|
||||||
|
---
|
||||||
|
title: "Official Claude Code Tips from the Creator - Boris Cherny's Team Playbook"
|
||||||
|
author: "@bcherny (Boris Cherny)"
|
||||||
|
date_bookmarked: 2026-02-01
|
||||||
|
original_date: 2026-01-31
|
||||||
|
category: Tools & Automation / Claude Code
|
||||||
|
tweet_url: https://x.com/bcherny/status/2017742741636321619
|
||||||
|
engagement: 36633 likes, 644 replies, 3968 retweets
|
||||||
|
---
|
||||||
|
|
||||||
|
## Key Insight
|
||||||
|
The biggest productivity unlock is running 3-5 parallel Claude sessions via git worktrees. Combine this with investing in your CLAUDE.md (have Claude write its own rules), plan mode for complex tasks, and custom slash commands for repeated workflows.
|
||||||
|
|
||||||
|
## Full Thread (12 parts)
|
||||||
|
|
||||||
|
**1/** I'm Boris and I created Claude Code. I wanted to quickly share a few tips for using Claude Code, sourced directly from the Claude Code team. The way the team uses Claude is different than how I use it. Remember: there is no one right way to use Claude Code -- everyones' setup is different. You should experiment to see what works for you!
|
||||||
|
|
||||||
|
**2/** **Do more in parallel**
|
||||||
|
|
||||||
|
Spin up 3-5 git worktrees at once, each running its own Claude session in parallel. It's the single biggest productivity unlock, and the top tip from the team. Personally, I use multiple git checkouts, but most of the Claude Code team prefers worktrees -- it's the reason @amorriscode built native support for them into the Claude Desktop app!
|
||||||
|
|
||||||
|
Some people also name their worktrees and set up shell aliases (za, zb, zc) so they can hop between them in one keystroke. Others have a dedicated "analysis" worktree that's only for reading logs and running BigQuery.
|
||||||
|
|
||||||
|
**3/** **Start every complex task in plan mode**
|
||||||
|
|
||||||
|
Pour your energy into the plan so Claude can 1-shot the implementation.
|
||||||
|
|
||||||
|
One person has one Claude write the plan, then they spin up a second Claude to review it as a staff engineer.
|
||||||
|
|
||||||
|
Another says the moment something goes sideways, they switch back to plan mode and re-plan. Don't keep pushing. They also explicitly tell Claude to enter plan mode for verification steps, not just for the build.
|
||||||
|
|
||||||
|
**4/** **Invest in your CLAUDE.md**
|
||||||
|
|
||||||
|
After every correction, end with: "Update your CLAUDE.md so you don't make that mistake again." Claude is eerily good at writing rules for itself.
|
||||||
|
|
||||||
|
Ruthlessly edit your CLAUDE.md over time. Keep iterating until Claude's mistake rate measurably drops.
|
||||||
|
|
||||||
|
One engineer tells Claude to maintain a notes directory for every task/project, updated after every PR. They then point CLAUDE.md at it.
|
||||||
|
|
||||||
|
**5/** **Create your own skills and commit them to git**
|
||||||
|
|
||||||
|
Reuse across every project. Tips from the team:
|
||||||
|
- If you do something more than once a day, turn it into a skill or command
|
||||||
|
- Build a /techdebt slash command and run it at the end of every session to find and kill duplicated code
|
||||||
|
- Set up a slash command that syncs 7 days of Slack, GDrive, Asana, and GitHub into one context dump
|
||||||
|
- Build analytics-engineer-style agents that write dbt models, review code, and test changes in dev
|
||||||
|
|
||||||
|
**6/** **Claude fixes most bugs by itself**
|
||||||
|
|
||||||
|
Here's how we do it:
|
||||||
|
- Enable the Slack MCP, then paste a Slack bug thread into Claude and just say "fix." Zero context switching required.
|
||||||
|
- Or, just say "Go fix the failing CI tests." Don't micromanage how.
|
||||||
|
- Point Claude at docker logs to troubleshoot distributed systems -- it's surprisingly capable at this.
|
||||||
|
|
||||||
|
**7/** **Level up your prompting**
|
||||||
|
|
||||||
|
a. Challenge Claude. Say "Grill me on these changes and don't make a PR until I pass your test." Make Claude be your reviewer. Or, say "Prove to me this works" and have Claude diff behavior between main and your feature branch.
|
||||||
|
|
||||||
|
b. After a mediocre fix, say: "Knowing everything you know now, scrap this and implement the elegant solution"
|
||||||
|
|
||||||
|
c. Write detailed specs and reduce ambiguity before handing work off. The more specific you are, the better the output.
|
||||||
|
|
||||||
|
**8/** **Terminal & Environment Setup**
|
||||||
|
|
||||||
|
The team loves Ghostty! Multiple people like its synchronized rendering, 24-bit color, and proper unicode support.
|
||||||
|
|
||||||
|
For easier Claude-juggling, use /statusline to customize your status bar to always show context usage and current git branch. Many of us also color-code and name our terminal tabs, sometimes using tmux -- one tab per task/worktree.
|
||||||
|
|
||||||
|
Use voice dictation. You speak 3x faster than you type, and your prompts get way more detailed as a result. (hit fn x2 on macOS)
|
||||||
|
|
||||||
|
**9/** **Use subagents**
|
||||||
|
|
||||||
|
a. Append "use subagents" to any request where you want Claude to throw more compute at the problem
|
||||||
|
|
||||||
|
b. Offload individual tasks to subagents to keep your main agent's context window clean and focused
|
||||||
|
|
||||||
|
c. Route permission requests to Opus 4.5 via a hook -- let it scan for attacks and auto-approve the safe ones
|
||||||
|
|
||||||
|
**10/** **Use Claude for data & analytics**
|
||||||
|
|
||||||
|
Ask Claude Code to use the "bq" CLI to pull and analyze metrics on the fly. We have a BigQuery skill checked into the codebase, and everyone on the team uses it for analytics queries directly in Claude Code. Personally, I haven't written a line of SQL in 6+ months.
|
||||||
|
|
||||||
|
This works for any database that has a CLI, MCP, or API.
|
||||||
|
|
||||||
|
**11/** **Learning with Claude**
|
||||||
|
|
||||||
|
a. Enable the "Explanatory" or "Learning" output style in /config to have Claude explain the *why* behind its changes
|
||||||
|
|
||||||
|
b. Have Claude generate a visual HTML presentation explaining unfamiliar code. It makes surprisingly good slides!
|
||||||
|
|
||||||
|
c. Ask Claude to draw ASCII diagrams of new protocols and codebases to help you understand them
|
||||||
|
|
||||||
|
d. Build a spaced-repetition learning skill: you explain your understanding, Claude asks follow-ups to fill gaps, stores the result
|
||||||
|
|
||||||
|
**12/** Hope these tips are helpful! What do you want to hear about next?
|
||||||
|
|
||||||
|
## Author Context
|
||||||
|
- **Boris Cherny** - Creator of Claude Code, engineer at Anthropic
|
||||||
|
- Author of "Programming TypeScript" (O'Reilly)
|
||||||
|
- Based in United States
|
||||||
|
- Active in sharing Claude Code best practices and responding to user questions
|
||||||
|
|
||||||
|
## Why This Matters
|
||||||
|
|
||||||
|
This thread is a goldmine for anyone using Claude Code seriously. The parallel worktrees tip alone could multiply your throughput, and the "have Claude write its own CLAUDE.md rules" pattern creates a self-improving feedback loop. The slash command examples show what's possible when you invest in your Claude Code setup as a platform, not just a tool.
|
||||||
|
|
||||||
|
## Related Resources
|
||||||
|
- Git worktrees: https://git-scm.com/docs/git-worktree
|
||||||
|
- Ghostty terminal: https://ghostty.org/
|
||||||
|
|
||||||
|
## Action Items
|
||||||
|
- [ ] Set up git worktree aliases (za, zb, zc) for parallel Claude sessions
|
||||||
|
- [ ] Add "Update CLAUDE.md" to end of correction workflows
|
||||||
|
- [ ] Try voice dictation (fn+fn) for longer prompts
|
||||||
|
- [ ] Build a /techdebt slash command for end-of-session cleanup
|
||||||
|
- [ ] Explore subagent workflows for complex tasks
|
||||||
39
install.sh
Executable file
39
install.sh
Executable file
|
|
@ -0,0 +1,39 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# X Bookmark Research - Installer
|
||||||
|
# Copies the slash command and skill into your ~/.claude/ directory
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
|
||||||
|
echo "Installing X Bookmark Research..."
|
||||||
|
|
||||||
|
# Ensure target directories exist
|
||||||
|
mkdir -p ~/.claude/commands
|
||||||
|
mkdir -p ~/.claude/skills/x-bookmark-research/references
|
||||||
|
|
||||||
|
# Copy command
|
||||||
|
cp "$SCRIPT_DIR/commands/research-bookmarks.md" ~/.claude/commands/research-bookmarks.md
|
||||||
|
echo " Installed command: ~/.claude/commands/research-bookmarks.md"
|
||||||
|
|
||||||
|
# Copy skill files
|
||||||
|
cp "$SCRIPT_DIR/skills/x-bookmark-research/SKILL.md" ~/.claude/skills/x-bookmark-research/SKILL.md
|
||||||
|
cp "$SCRIPT_DIR/skills/x-bookmark-research/references/output-format.md" ~/.claude/skills/x-bookmark-research/references/output-format.md
|
||||||
|
echo " Installed skill: ~/.claude/skills/x-bookmark-research/"
|
||||||
|
|
||||||
|
# Create config from example if none exists
|
||||||
|
if [ ! -f ~/.claude/skills/x-bookmark-research/config.yml ]; then
|
||||||
|
cp "$SCRIPT_DIR/config/bookmark-research.example.yml" ~/.claude/skills/x-bookmark-research/config.yml
|
||||||
|
echo ""
|
||||||
|
echo " Created config: ~/.claude/skills/x-bookmark-research/config.yml"
|
||||||
|
echo ""
|
||||||
|
echo " >>> Edit this file with your settings before first use! <<<"
|
||||||
|
echo " - Set your output directory"
|
||||||
|
echo " - Add your interests/projects"
|
||||||
|
echo " - Choose your default research depth"
|
||||||
|
else
|
||||||
|
echo " Config exists: ~/.claude/skills/x-bookmark-research/config.yml (not overwritten)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Done! Restart Claude Code, then run /research-bookmarks to get started."
|
||||||
61
skills/x-bookmark-research/SKILL.md
Normal file
61
skills/x-bookmark-research/SKILL.md
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
---
|
||||||
|
name: X Bookmark Research
|
||||||
|
description: Transform Twitter/X bookmarks into structured research markdown files with AI-powered analysis
|
||||||
|
version: 1.0.0
|
||||||
|
author: Community
|
||||||
|
license: MIT
|
||||||
|
---
|
||||||
|
|
||||||
|
# X Bookmark Research
|
||||||
|
|
||||||
|
A Claude Code skill that transforms your Twitter/X bookmarks into structured, actionable research notes.
|
||||||
|
|
||||||
|
## What It Does
|
||||||
|
|
||||||
|
When you bookmark interesting tweets, this skill processes them into organized markdown files with:
|
||||||
|
- **Key insights** extracted from the content
|
||||||
|
- **Author context** (who they are, why their perspective matters)
|
||||||
|
- **Personal relevance** connected to your configured interests and projects
|
||||||
|
- **Action items** so bookmarks become actionable, not forgotten
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
### Required
|
||||||
|
|
||||||
|
- **[bird CLI](https://github.com/ryo-ma/bird)** - Command-line tool for Twitter/X API access
|
||||||
|
- Used to fetch bookmarks, read tweets, and look up author profiles
|
||||||
|
- Must be authenticated before first use (`bird auth`)
|
||||||
|
|
||||||
|
### Optional
|
||||||
|
|
||||||
|
- **Exa MCP Server** - Only needed for `--depth deep` research mode
|
||||||
|
- Provides web search for broader context around tweet topics
|
||||||
|
- The skill gracefully degrades to `standard` depth without it
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
This skill reads its settings from `~/.claude/skills/x-bookmark-research/config.yml`.
|
||||||
|
|
||||||
|
Copy the example config to get started:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp ~/.claude/skills/x-bookmark-research/config.example.yml ~/.claude/skills/x-bookmark-research/config.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
Then edit `config.yml` with your output directory and interests.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Invoke via the slash command:
|
||||||
|
|
||||||
|
```
|
||||||
|
/research-bookmarks # Interactive - asks how many and what depth
|
||||||
|
/research-bookmarks 5 # Process 5 recent bookmarks
|
||||||
|
/research-bookmarks all # Process all unprocessed bookmarks
|
||||||
|
/research-bookmarks <url> # Research a specific tweet
|
||||||
|
/research-bookmarks 10 --depth deep # 10 bookmarks with web research
|
||||||
|
```
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- `references/output-format.md` - Full output template specification and formatting guidelines
|
||||||
39
skills/x-bookmark-research/config.example.yml
Normal file
39
skills/x-bookmark-research/config.example.yml
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
# X Bookmark Research - Configuration
|
||||||
|
# Copy this file to: ~/.claude/skills/x-bookmark-research/config.yml
|
||||||
|
# Then edit with your personal settings.
|
||||||
|
|
||||||
|
# Output directory for processed bookmarks (~ is expanded automatically)
|
||||||
|
output_dir: ~/Desktop/Research/twitter-bookmarks
|
||||||
|
|
||||||
|
# Your interests and projects (used in "Why This Matters" section)
|
||||||
|
# Be specific - these help Claude connect bookmarks to YOUR context
|
||||||
|
interests:
|
||||||
|
- "My SaaS product"
|
||||||
|
- "AI/ML workflows"
|
||||||
|
- "Content creation"
|
||||||
|
|
||||||
|
# Default research depth: quick | standard | deep
|
||||||
|
# - quick: Tweet content + basic analysis + action items
|
||||||
|
# - standard: + Author context via bird CLI (recommended)
|
||||||
|
# - deep: + Web search for broader context (requires Exa MCP)
|
||||||
|
default_depth: standard
|
||||||
|
|
||||||
|
# Custom categories (optional)
|
||||||
|
# Uncomment and edit to override the default taxonomy.
|
||||||
|
# Each category can have subcategories for finer classification.
|
||||||
|
# categories:
|
||||||
|
# - name: "AI & Machine Learning"
|
||||||
|
# subcategories:
|
||||||
|
# - "LLM Applications"
|
||||||
|
# - "AI Philosophy"
|
||||||
|
# - "AI Tools"
|
||||||
|
# - name: "Engineering Practices"
|
||||||
|
# subcategories:
|
||||||
|
# - "Documentation"
|
||||||
|
# - "Testing"
|
||||||
|
# - "Architecture"
|
||||||
|
# - name: "Product & Business"
|
||||||
|
# subcategories:
|
||||||
|
# - "Strategy"
|
||||||
|
# - "Growth"
|
||||||
|
# - "Pricing"
|
||||||
172
skills/x-bookmark-research/references/output-format.md
Normal file
172
skills/x-bookmark-research/references/output-format.md
Normal file
|
|
@ -0,0 +1,172 @@
|
||||||
|
# Output Format Specification
|
||||||
|
|
||||||
|
Generated markdown files follow this exact structure for consistent, searchable research notes.
|
||||||
|
|
||||||
|
## Filename Convention
|
||||||
|
|
||||||
|
```
|
||||||
|
YYYY-MM-DD-slug.md
|
||||||
|
```
|
||||||
|
|
||||||
|
- Date: When bookmarked (today's date for new processing)
|
||||||
|
- Slug: Kebab-case derived from title (max 50 chars)
|
||||||
|
- Examples:
|
||||||
|
- `2026-01-30-ai-literacy-thread.md`
|
||||||
|
- `2026-01-30-specs-as-code-workflow.md`
|
||||||
|
|
||||||
|
## Template
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
title: [Descriptive title - not just the first line of tweet]
|
||||||
|
author: "@handle (Full Name)"
|
||||||
|
date_bookmarked: YYYY-MM-DD
|
||||||
|
original_date: YYYY-MM-DD
|
||||||
|
category: [Category / Subcategory]
|
||||||
|
tweet_url: https://x.com/user/status/ID
|
||||||
|
engagement: [#] likes, [#] replies, [#] retweets
|
||||||
|
---
|
||||||
|
|
||||||
|
## Key Insight
|
||||||
|
[1-2 sentence summary capturing WHY this is valuable. Not a description, but the insight.]
|
||||||
|
|
||||||
|
## Full Content
|
||||||
|
[Tweet text verbatim. For threads, format as:]
|
||||||
|
|
||||||
|
**1/** First tweet text
|
||||||
|
|
||||||
|
**2/** Second tweet text
|
||||||
|
|
||||||
|
[etc.]
|
||||||
|
|
||||||
|
## Author Context
|
||||||
|
[Only for --depth standard or deep]
|
||||||
|
- **[Full Name]** - [Brief description of who they are]
|
||||||
|
- [Relevant context: role, company, expertise area]
|
||||||
|
- [Why their perspective matters on this topic]
|
||||||
|
|
||||||
|
## Why This Matters
|
||||||
|
[2-3 sentences connecting this to the user's configured interests.]
|
||||||
|
Reference the specific interests/projects from config.yml to make this personal and actionable.
|
||||||
|
|
||||||
|
## Related Resources
|
||||||
|
[Optional - only if there are clear connections]
|
||||||
|
- [Link or reference to related concept]
|
||||||
|
- [Other bookmarks on similar topics]
|
||||||
|
|
||||||
|
## Action Items
|
||||||
|
- [ ] [Specific, actionable next step]
|
||||||
|
- [ ] [Another concrete action]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Frontmatter Fields
|
||||||
|
|
||||||
|
| Field | Required | Format | Notes |
|
||||||
|
|-------|----------|--------|-------|
|
||||||
|
| title | Yes | String | Descriptive, not tweet's first words |
|
||||||
|
| author | Yes | `"@handle (Full Name)"` | Include both handle and display name |
|
||||||
|
| date_bookmarked | Yes | `YYYY-MM-DD` | Date of processing |
|
||||||
|
| original_date | Yes | `YYYY-MM-DD` | Tweet's creation date |
|
||||||
|
| category | Yes | `Category / Subcategory` | From standard or custom list |
|
||||||
|
| tweet_url | Yes | Full URL | `https://x.com/user/status/ID` |
|
||||||
|
| engagement | Yes | String | Format: `N likes, N replies, N retweets` |
|
||||||
|
|
||||||
|
## Default Category Taxonomy
|
||||||
|
|
||||||
|
These categories are used when no custom categories are configured:
|
||||||
|
|
||||||
|
```
|
||||||
|
AI & Machine Learning
|
||||||
|
- LLM Applications
|
||||||
|
- AI Philosophy
|
||||||
|
- AI Tools
|
||||||
|
|
||||||
|
Engineering Practices
|
||||||
|
- Documentation
|
||||||
|
- Testing
|
||||||
|
- Architecture
|
||||||
|
- DevOps
|
||||||
|
|
||||||
|
Thought Leadership
|
||||||
|
- AI Philosophy
|
||||||
|
- Career Advice
|
||||||
|
- Industry Trends
|
||||||
|
|
||||||
|
Product & Business
|
||||||
|
- Strategy
|
||||||
|
- Growth
|
||||||
|
- Pricing
|
||||||
|
|
||||||
|
Career & Hiring
|
||||||
|
- Job Opportunities
|
||||||
|
- Recruiting
|
||||||
|
- HR Tech
|
||||||
|
|
||||||
|
Tools & Automation
|
||||||
|
- CLI Tools
|
||||||
|
- Productivity
|
||||||
|
- Workflows
|
||||||
|
|
||||||
|
News & Announcements
|
||||||
|
- Product Launches
|
||||||
|
- Company News
|
||||||
|
- Research Papers
|
||||||
|
```
|
||||||
|
|
||||||
|
Users can override these by defining `categories` in their `config.yml`.
|
||||||
|
|
||||||
|
## Section Guidelines
|
||||||
|
|
||||||
|
### Key Insight
|
||||||
|
- One to two sentences MAX
|
||||||
|
- Focus on the **insight**, not description
|
||||||
|
- Answer: "What's the takeaway?"
|
||||||
|
- Bad: "This thread discusses AI literacy"
|
||||||
|
- Good: "AI literacy is cognitive, not technical - clear thinking matters more than prompt engineering"
|
||||||
|
|
||||||
|
### Full Content
|
||||||
|
- Preserve exact tweet text
|
||||||
|
- For threads: number each part with `**N/**` format
|
||||||
|
- Include quoted tweets with `>` blockquote
|
||||||
|
- Preserve line breaks within tweets
|
||||||
|
|
||||||
|
### Why This Matters
|
||||||
|
- Connect specifically to interests configured in `config.yml`
|
||||||
|
- Reference the user's actual projects and goals by name
|
||||||
|
- Be specific, not generic
|
||||||
|
- 2-3 sentences that make the bookmark actionable
|
||||||
|
|
||||||
|
### Action Items
|
||||||
|
- Use checkbox format: `- [ ]`
|
||||||
|
- Make actionable and specific
|
||||||
|
- Typically 2-4 items
|
||||||
|
- Tie back to user's configured interests where relevant
|
||||||
|
|
||||||
|
## Thread Handling
|
||||||
|
|
||||||
|
For multi-part threads:
|
||||||
|
|
||||||
|
1. Title should reflect the thread's main thesis
|
||||||
|
2. Number all parts in Full Content section
|
||||||
|
3. Key Insight summarizes the entire thread, not just tweet 1
|
||||||
|
4. Engagement may note "thread" in parenthetical
|
||||||
|
|
||||||
|
## Quote Tweet Handling
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## Full Content
|
||||||
|
[Main tweet text]
|
||||||
|
|
||||||
|
> **Quoted from @otheruser:**
|
||||||
|
> [Quoted tweet text]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Media Handling
|
||||||
|
|
||||||
|
Note presence of media but don't embed:
|
||||||
|
```markdown
|
||||||
|
## Full Content
|
||||||
|
[Tweet text]
|
||||||
|
|
||||||
|
*[Includes: image showing X / video demonstrating Y]*
|
||||||
|
```
|
||||||
Loading…
Add table
Add a link
Reference in a new issue