gitingest
Ingest GitHub repos into NotebookLM — clone, slice, and upload in one pipeline.
Skill by EndUser123
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/enduser123-gitingest
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: data
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
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/gitingest
What's inside
- Skill name
gitingest- Description
- Ingest GitHub repos into NotebookLM — clone, slice, and upload in one pipeline.
- License
- MIT
- Instructions
- 165 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (12)
- LICENSE
- README.md
- SKILL.md
- claude-code-qmd-repos.yaml
- karpathy-llm-wiki.md
- github-urls.md · references/
- notebooklm-upload.md · references/
- repos-template.yaml · references/
- rohitg00-llm-wiki-v2.md
- gitingest_runner.py · scripts/
- __init__.py · tests/
- test_gitingest_runner.py · tests/
SKILL.md (first lines)
# gitingest
**Goal:** Ingest GitHub repos into NotebookLM — clone, slice, and upload in one pipeline.
**Prerequisites:** `nlm` CLI from [jacob-bd/notebooklm-mcp-cli](https://github.com/jacob-bd/notebooklm-mcp-cli) — install via `uv tool install notebooklm-mcp-cli`. The runner auto-detects bare `nlm` (on PATH) or `uv tool run` invocation.
---
## Usage
```bash
# 1. Copy the config template to .staging
cp references/repos-template.yaml P://.staging/my-repos.yaml
# 2. Edit the config — add your repos and notebook ID
vim P://.staging/my-repos.yaml
# 3. Dry run (verify what would happen)
python scripts/gitingest_runner.py --config P://.staging/my-repos.yaml --dry-run
# 4. Run for real
python scripts/gitingest_runner.py --config P://.staging/my-repos.yaml
```
---
## Config file (`references/repos-template.yaml`)
**Config files are templates in `references/` — actual configs live in `P://.staging/` (not `/tmp/`), never in the skill itself.**
> **Note:** On this system, `/tmp` is blocked by `PreToolUse_directory_policy.py`. Use `P://.staging/` instead.
```yaml
notebooklm_id: "your-notebook-id-from-url"
repos:
- url: "https://github.com/owner/repo"
branch: "main" # optional, default: main
path: "" # optional: sparse checkout path
skip: false # optional: skip this repo
```
---
## Pipeline (6 steps, executed by `scripts/gitingest_runner.py`)
1. **Clone** — `git clone --depth=1 --filter=blob:none`, optionally sparse
2. **File lists** — `git ls-files` (repo), `.claude/` configs, `docs/` + top-level README
3. **Slice** — repo-index, agent-configs, docs; ≤150 lines/slice; entry points inlined
4. **Upload** — file source (`--file <slice> --wait`) + web source (`--url <repo_url>` for clickable GitHub link)
5. **Cleanup** — removes clone dir (always, even on error)
6. **Status** — saves `status.json` to staging dir after each repo
---
## Deduplication Lifecycle
NotebookLM has no native replace API. Sources are deduplicated by title:
1. **List** existing sources via `nlm source list`
2. **Detect** if source title already exists → capture its `source_id`
3. **Delete** old source via `nlm source delete <source_id>`
4. **Poll** until source_id disappears from list (up to 10 attempts × 1s interval)
5. **Upload** new source with same title
If poll confirmation fails after max attempts, the upload is skipped with a warning.
---
## Web Sources — Clickable GitHub Links
NotebookLM has two source types with different behaviors:
| `nlm source add` flag | NotebookLM type | Clickable? | Content |
|---|---|---|---|
| `--file <path>` | `generated_text` | No | Full file content (slice) |
| `--url <url>` | `web_page` | **Yes** | Link to original page |
**The runner automatically adds both for each repo:**
1. A **file source** with the full sliced repo content (for NotebookLM to index and answer questions from)
2. A **web source** linking to `https://github.com/owner/repo` (clickable in the NotebookLM UI)
The web source title is set to `GitHub - owner/repo` so it's easy to identify. This is what users click to go straight to GitHub.
### Adding extra web sources
You can also add additional web sources via config:
```yaml
notebooklm_id: "your-notebook-id-from-url"
repos:
- url: "https://github.com/owner/repo"
sources:
web:
- url: "https://example.com/docs"
label: "Example Docs" # used as title in NotebookLM
```
All web sources use the same dedup lifecycle (delete → poll → re-add).
### Adding a clickable link manually
If you need to add a clickable link outside the pipeline:
```bash
nlm source add "<notebook-id>" --url "https://github.com/owner/repo" --title "GitHub - owner/repo"
```
This creates a `web_page` source that appears as a clickable link in NotebookLM's source list.
---
## CLI Detection
The runner auto-detects how to invoke `nlm`:
1. **Bare `nlm`** — if `nlm` is on PATH (`pip install` or `uv tool install` with `~/.local/bin` on PATH)
2. **`uv tool run --from notebooklm-mcp-cli nlm`** — fallback for uv-based installs where `nlm` isn't on PATH
Install: `uv tool install notebooklm-mcp-cli`From EndUser123/search-research, MIT.
More from EndUser123/search-research
- 0.479score
crawl
EndUser123
Ingest websites into QMD wiki collections for semantic search via /search and /explore.
SkillCFreshness: CClaude Code +9 - 0.479score
find
EndUser123
Local intelligent find — searches only local data stores (CKS, CHS, CDS, code, docs, skills).
SkillCFreshness: CClaude Code +9 - 0.476score
chs
EndUser123
Dedicated chat history search with summarization, workspace aliases, tool filtering, context preview, session stats, and branch filtering
SkillCFreshness: CClaude Code +9 - 0.476score
research
EndUser123
Canonical research workflow using deterministic capability routing, local and external evidence gathering, source opening, assessment, and provenance-bound…
SkillCFreshness: CClaude Code +9 - 0.475score
gitpack
EndUser123
Pack a code or markdown directory (or a scattered set of files) into compact LLM-context files using only stdlib — AST for Python, regex signatures for…
SkillCFreshness: CClaude Code +9 - 0.474score
note
EndUser123
Add a deliberate entry to your constitutional knowledge system (CKS).
SkillCFreshness: CClaude Code +9 - 0.474score
keep
EndUser123
Alias for /note — add a deliberate entry to your constitutional knowledge system (CKS).
SkillCFreshness: CClaude Code +9 - 0.473score
aid
EndUser123
AI-Distiller wrapper for code analysis - refactoring, security, performance, architecture.
SkillCFreshness: CClaude Code +9 - 0.470score
export-session
EndUser123
Export the current (or specified) Claude Code session chain to a markdown file.
SkillCFreshness: CClaude Code +9 - 0.469score
context7
EndUser123
Docs-as-Code: Fetch fresh, version-specific documentation via Context7 API.
SkillCFreshness: CClaude Code +9 - 0.469score
chs-eval
EndUser123
Run golden-case retrieval evaluation against the CHS database and report per-case + mean recall
SkillCFreshness: CClaude Code +9 - 0.469score
repomix
EndUser123
Pack repository contents into AI-friendly formats (XML, Markdown, JSON, plain text) for LLM context.
SkillCFreshness: CClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Jul 11, 2026 (3 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/EndUser123/search-research
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from EndUser123
- 0.521score
evidence-driven-experiment-loop
EndUser123
Manage evidence-first experiments, benchmarks, performance optimization, A/B comparisons, repeated evidence gathering, live-run decisions, and fresh-agent…
SkillBFreshness: BClaude Code +9 - 0.516score
preflight
EndUser123
Build an evidence-backed inventory before planning, reviewing, or implementing non-trivial changes to hooks, skills, plugins, entrypoints, defaults, state…
SkillBFreshness: BClaude Code +9 - 0.490score
go
EndUser123
Use when a user asks to run /go, execute the next planned task, process a tasks.json queue, or drive a bounded SDLC task through enforced evidence gates.
SkillBFreshness: BClaude Code +9 - 0.479score
crawl
EndUser123
Ingest websites into QMD wiki collections for semantic search via /search and /explore.
SkillCFreshness: CClaude Code +9 - 0.479score
find
EndUser123
Local intelligent find — searches only local data stores (CKS, CHS, CDS, code, docs, skills).
SkillCFreshness: CClaude Code +9 - 0.476score
chs
EndUser123
Dedicated chat history search with summarization, workspace aliases, tool filtering, context preview, session stats, and branch filtering
SkillCFreshness: CClaude Code +9
Cite this page
gitingest skill. Agent Mart. https://agentmart.dev/skills/enduser123-gitingest (last updated 2026-10-24)