From inc-os
Add a new resource to your system. Takes a raw source (article, transcript, notes, YouTube URL, or attachment) and routes it to the right place — wiki/ for stable knowledge, clients/{slug}/ for client-specific material — then summarizes and cross-references.
How this skill is triggered — by the user, by Claude, or both
Slash command
/inc-os:add-new-resourceThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Take an article, transcript, notes file, URL, attachment, or YouTube video and route it into the right home in this repo. Then add a `## Summary` block, extract key entities, and cross-reference with `[[wikilinks]]` where useful.
Take an article, transcript, notes file, URL, attachment, or YouTube video and route it into the right home in this repo. Then add a ## Summary block, extract key entities, and cross-reference with [[wikilinks]] where useful.
Two zones:
wiki/ — stable, slow-evolving knowledge (frameworks, brand voice, offers, audience, advisor profiles, process templates). Not client-identifying.clients/{slug}/ — confidential per-client material (intake, Hogan PDFs, stakeholder interviews, reports, session notes).Default rule:
clients/{slug}/.wiki/.User can provide:
If none provided, ask:
"What should I ingest? Paste a URL, YouTube link, file path, or raw text — or drop an attachment."
When the input is a YouTube URL:
Precondition check. Verify the dependencies are installed before invoking the script:
python3 -c "import youtube_transcript_api" 2>/dev/null && command -v yt-dlp >/dev/null
If this fails, tell the user the YouTube pipeline is not set up. Both yt-dlp and youtube-transcript-api are installed by the inc-os install URL — direct them to re-run it, or to install manually:
pip install youtube-transcript-api
brew install yt-dlp # macOS; or: pip install yt-dlp
Fetch the transcript and metadata using the plugin-local script:
python3 "$CLAUDE_PLUGIN_ROOT/scripts/fetch_youtube_transcript.py" \
--video-url "[URL]" \
--output /tmp/yt-transcript.md
The script prints a JSON line on stdout: {video_id, title, channel, channel_url, output, word_count}. Use those to populate the summary block in Step 4.
If the script fails (no transcript, network error), tell the user, ask whether to fall back to fetching the page (title + description only via WebFetch), or abort.
Continue to Step 2 with the transcript file as the source. The transcript will likely move from /tmp/ to its final home in Step 2.
Ask the user where this should live unless it is obvious from context:
"Where does this belong?
- A specific client →
clients/{slug}/...- General knowledge →
wiki/...I can suggest a path once I see what it is."
Pick the sub-folder:
| Source type | Wiki destination | Client destination |
|---|---|---|
| Framework / methodology article | wiki/frameworks/{topic}/sources/ | n/a |
| Voice / writing sample | wiki/brand-voice/samples/ | clients/{slug}/voice-samples/ |
| Advisor talk / transcript / interview | wiki/consultants/sources/{advisor-slug}/ | n/a |
| Process / playbook | wiki/processes/sources/ | n/a |
| Intake materials | n/a | clients/{slug}/discovery/ |
| Stakeholder interview | n/a | clients/{slug}/stakeholders/ |
| Hogan 360 PDF | n/a | clients/{slug}/discovery/ |
| Session notes | n/a | clients/{slug}/sessions/YYYY-MM-DD.md |
For a YouTube transcript of an advisor (e.g., a talk by someone whose frameworks you're cloning into wiki/consultants/), default destination is wiki/consultants/sources/{advisor-slug}/transcripts/. Sources live in a sibling sources/ tree, NOT in a folder named after the advisor at the same level as advisor .md files — the advisor file itself is the single wiki/consultants/{advisor-slug}.md per project convention, and /inc-os:add-new-resource only globs wiki/consultants/*.md so the sources/ subfolder is correctly ignored. Move the /tmp/ file into wiki/consultants/sources/{advisor-slug}/transcripts/. Create folders if missing.
Filename: lowercase kebab-case, dated when relevant (2026-05-12-article-title.md).
parse for PDFs/docx if needed).Prepend (or insert after any title/frontmatter):
## Summary
[2-4 sentences: what this is, the main claim, why it matters here.]
**Source type:** [article / youtube-transcript / interview / PDF / notes]
**Origin:** [URL or short attribution]
**Ingested:** YYYY-MM-DD
**Key entities:** [[Person A]], [[Concept B]]
If a summary already exists, leave it alone.
Read the source. Identify:
Filter hard. Three or fewer is usually right for a single source.
Tell the user:
"Found: [N] entities, [M] concepts. Worth pages for: [list]. Create / update wiki pages for these?"
Only for entities/concepts the user confirms.
If a wiki page exists at wiki/{section}/{slug}.md (or wiki/consultants/{slug}.md for advisors):
## Sources.If a wiki page doesn't exist, create one in the right section:
wiki/consultants/{slug}.md directly from ingest. Suggest the user run the consultant-creation workflow to do the full intake. Ingest only adds the new source to the advisor file's ## Sources section if the file already exists.wiki/frameworks/{topic}/{slug}.md.Minimal scaffold:
# [Name]
[1-2 sentences: who/what this is and why it's tracked here.]
## Key Ideas
- [Point from the source]
## Sources
- [[path/to/source]] — [one-line note on what this source contributes]
Add [[wikilinks]] on the first mention of each entity/concept that has a wiki page. Don't link every occurrence. Don't link inside code blocks or URLs.
Done.
Source saved: <path>
- Summary block added
- [N] wikilinks added
Wiki pages updated: <list>
Wiki pages created: <list>
If the user says "ingest everything in [folder]" or supplies multiple files:
Client material stays in clients/{slug}/. Do not promote client-identifying text into wiki/. If a client engagement surfaces a generally useful framework or pattern, anonymize before lifting it.
[path]. Check the path.""Existing
[[X]]page says [A]. This source says [B]. Update, keep both, or skip?"
$CLAUDE_PLUGIN_ROOT/scripts/fetch_youtube_transcript.py is shipped with this plugin. It requires youtube-transcript-api (Python) and yt-dlp (for title/channel metadata).
The inc-os install URL installs both dependencies automatically. If they are missing, run:
pip install youtube-transcript-api
brew install yt-dlp # macOS; or: pip install yt-dlp
If yt-dlp is missing but youtube-transcript-api is present, the transcript still fetches successfully; only the title and channel metadata fall back to the raw video ID.
(None yet. Add as the skill is used.)
npx claudepluginhub austinmarchese/incubator-os-plugin --plugin inc-osCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.