Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
A comprehensive collection of Agent Skills for context engineering, multi-agent architectures, and production agent systems.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
examples/digital-brain-skill/agents/scripts/idea_to_draft.py
1#!/usr/bin/env python32"""3Idea to Draft Expander4Takes an idea ID and creates a draft scaffold with relevant context.5"""67import json8import argparse9from datetime import datetime10from pathlib import Path1112BRAIN_ROOT = Path(__file__).parent.parent.parent1314def load_jsonl(filepath):15"""Load JSONL file, skipping schema lines."""16items = []17if not filepath.exists():18return items19with open(filepath, 'r') as f:20for line in f:21line = line.strip()22if not line:23continue24try:25data = json.loads(line)26if '_schema' not in data:27items.append(data)28except json.JSONDecodeError:29continue30return items3132def find_idea(idea_id):33"""Find an idea by ID or partial match."""34ideas = load_jsonl(BRAIN_ROOT / 'content' / 'ideas.jsonl')3536for idea in ideas:37if idea.get('id') == idea_id:38return idea39# Partial match40if idea_id.lower() in idea.get('id', '').lower():41return idea42if idea_id.lower() in idea.get('idea', '').lower():43return idea4445return None4647def find_related_bookmarks(tags, pillar):48"""Find bookmarks related to the idea."""49bookmarks = load_jsonl(BRAIN_ROOT / 'knowledge' / 'bookmarks.jsonl')5051related = []52for bm in bookmarks:53bm_tags = set(bm.get('tags', []))54bm_category = bm.get('category', '')5556if tags and bm_tags.intersection(set(tags)):57related.append(bm)58elif pillar and bm_category == pillar:59related.append(bm)6061return related[:5]6263def find_similar_posts(pillar):64"""Find past posts in same pillar for reference."""65posts = load_jsonl(BRAIN_ROOT / 'content' / 'posts.jsonl')6667similar = [p for p in posts if p.get('pillar') == pillar]68return similar[:3]6970def generate_draft_scaffold(idea_id):71"""Generate a draft scaffold from an idea."""7273idea = find_idea(idea_id)7475if not idea:76return f"Error: Could not find idea matching '{idea_id}'"7778pillar = idea.get('pillar', 'general')79tags = idea.get('tags', [])8081related_bookmarks = find_related_bookmarks(tags, pillar)82similar_posts = find_similar_posts(pillar)8384output = f"""85# Draft: {idea.get('idea', 'Untitled')}8687## Metadata88```yaml89source_idea: {idea.get('id', 'unknown')}90pillar: {pillar}91created: {datetime.now().isoformat()}92status: draft93tags: {tags}94```9596## Original Idea97```98{idea.get('idea', 'No content')}99```100101Source: {idea.get('source', 'Unknown')}102Notes: {idea.get('notes', 'None')}103104---105106## Hook Options107<!-- Write 2-3 hook options -->1081091. [Hook option 1]1102. [Hook option 2]1113. [Hook option 3]112113---114115## Main Points116117### Point 1118[Expand here]119120### Point 2121[Expand here]122123### Point 3124[Expand here]125126---127128## Supporting Evidence129"""130131if related_bookmarks:132output += "\n### From Your Research\n"133for bm in related_bookmarks:134output += f"- [{bm.get('title', 'Untitled')}]({bm.get('url', '#')})\n"135if bm.get('key_insights'):136output += f" Insight: {bm['key_insights'][0]}\n"137else:138output += "\nNo related bookmarks found. Consider researching this topic.\n"139140output += """141---142143## Reference: Similar Past Content144"""145146if similar_posts:147for post in similar_posts:148output += f"- {post.get('type', 'post')}: {post.get('url', 'No URL')}\n"149else:150output += "\nNo similar past content found.\n"151152output += """153---154155## Call to Action156157[What should the reader do?]158159---160161## Pre-publish Checklist162163- [ ] Hook is compelling164- [ ] Main points are clear and valuable165- [ ] Voice matches brand (check identity/voice.md)166- [ ] CTA is clear167- [ ] Proofread168169---170171*Remember: Check identity/voice.md before finalizing!*172"""173174return output175176if __name__ == '__main__':177parser = argparse.ArgumentParser(description='Expand an idea into a draft')178parser.add_argument('idea_id', help='ID or partial match of the idea to expand')179180args = parser.parse_args()181print(generate_draft_scaffold(args.idea_id))182