"A YouTube link in any message routes here. Run atris youtube notes <url> FIRST: free, about 30 seconds, quotes verified against the transcript. Never summarize a video from model memory, that is fabrication. Use atris youtube process only to store it as queryable knowledge (5 credits). Triggers on: any youtube.com or youtu.be link, youtube, video, watch this, notes on this."
Install
npx skillscat add atrislabs/atris/youtube Install via the SkillsCat registry.
YouTube Skill
Process any YouTube video through Atris transcript-first analysis. The CLI extracts local captions with timestamps when available, sends that transcript to Atris, and falls back to cloud video processing when captions are unavailable or unusable. 5 credits per video, refunded if processing fails.
Route first: learning vs product
Two rails process YouTube videos: pick before running anything:
- Learning / work rail → use the
alpha-learnskill (ytnotes). Local yt-dlp + grok, zero credits, podcastnotes-style notes, tweet-feed output,[claimable]entries in today's journal for other agents. Use this when the goal is to LEARN from a video or mine it for Atris work.
Canonical ytnotes source isscripts/det/ytnotes(install:ln -sf "$PWD/scripts/det/ytnotes" ~/.local/bin/ytnotes).
Runs are scored bynode scripts/det/ytrail-eval.js. - Product rail → this skill (
atris youtube process). Credits-billed, stores knowledge in the Atris backend, customer-facing path. Use this when a customer/agent needs the video stored as Atris knowledge or answered via the API.
If the user says "learn from", "notes on", "alpha", or "rabbit hole" → alpha-learn. If they say "process", "store", "add to knowledge" → this skill.
Bootstrap (ALWAYS Run First)
#!/bin/bash
set -e
# 1. Check atris CLI
if ! command -v atris &> /dev/null; then
echo "Installing atris CLI..."
npm install -g atris
fi
# 2. Check login
if [ ! -f ~/.atris/credentials.json ]; then
echo "Not logged in. Run: atris login"
exit 1
fi
# 3. Extract token
if command -v node &> /dev/null; then
TOKEN=$(node -e "console.log(require('$HOME/.atris/credentials.json').token)")
elif command -v python3 &> /dev/null; then
TOKEN=$(python3 -c "import json,os; print(json.load(open(os.path.expanduser('~/.atris/credentials.json')))['token'])")
elif command -v jq &> /dev/null; then
TOKEN=$(jq -r '.token' ~/.atris/credentials.json)
else
echo "Error: Need node, python3, or jq to read credentials"
exit 1
fi
echo "Ready. YouTube skill active (5 credits per video)."
export ATRIS_TOKEN="$TOKEN"API Reference
Base: https://api.atris.ai/api
Auth: -H "Authorization: Bearer $TOKEN"
Get Token
TOKEN=$(node -e "console.log(require('$HOME/.atris/credentials.json').token)")Process a Video
atris youtube process "https://www.youtube.com/watch?v=VIDEO_ID" \
--query "Create an outline, claims, examples, takeaways, and action items."Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
youtube_url |
string | yes | Any YouTube URL |
query |
string | no | Question to focus the analysis on |
agent_id |
string | no | Agent ID to store analysis in its knowledge base |
store_as_knowledge |
bool | no | Save to agent's knowledge (requires agent_id) |
Response:
{
"status": "success",
"message": "YouTube video processed successfully",
"youtube_url": "https://www.youtube.com/watch?v=...",
"video_analysis": "This video covers...",
"stored_as_knowledge": false,
"credits_used": 5,
"credits_remaining": 95,
"metadata": {
"title": "Video Title",
"channel": "Channel Name",
"duration_seconds": 4459,
"processing_method": "client_transcript_atris_fast",
"transcript_source": "client_transcript",
"transcript_language": "en"
}
}Process + Store as Knowledge
atris youtube process "https://www.youtube.com/watch?v=..." \
--query "Extract the main arguments and evidence" \
--agent "YOUR_AGENT_ID" \
--storeWorkflows
"Learn from this YouTube video"
- Run bootstrap
- Process:
atris youtube process <url> --query "Create an outline, claims, examples, takeaways, Atris implications, and next actions." - Display the analysis as flowing prose: ideas and who said them, never timecodes. Timestamps stay in the stored notes file for verification, not in the reply.
"What does this video say about X?"
- Run bootstrap
- Process with focused query:
atris youtube process <url> --query "What does this say about X?" - Show the focused analysis as prose; cite the speaker, not the clock
"Process multiple videos on a topic"
- Run bootstrap
- Process each sequentially (each = 5 credits):
VIDEOS=(
"https://youtube.com/watch?v=AAA"
"https://youtube.com/watch?v=BBB"
)
for url in "${VIDEOS[@]}"; do
echo "Processing: $url"
atris youtube process "$url" --query "Key insights and takeaways"
echo ""
done- Synthesize findings across all videos; attribute ideas to speakers and videos, keep timecodes out of the reply
"Save video insights to my agent's memory"
- Run bootstrap
- Get your agent ID:
atris agent - Process with storage:
atris youtube process <url> --agent "..." --store - Agent can now reference these insights in future conversations
Output Contract
Default output should be useful for retrieval and action:
metadata
outline (flowing, idea-first)
core claims with confidence
memorable examples
actionable takeaways
Atris/product implications
next actionsTwo layers, never mixed. The reply the person reads is flowing prose: ideas, speakers, quotes, no timecodes, nothing that reads like a stopwatch. The stored notes file keeps timestamps beside each claim so verification stays possible; that receipt layer never leaks into the reply. Treat native-video/cloud fallback output as less auditable unless the stored file includes equivalent time anchors.
How It Works
atris youtube first tries local transcript extraction with yt-dlp. It sends timestamped transcript_text to /agent/process_youtube with cache_transcript=false. If local transcript processing fails with a retryable error, it falls back to cloud video processing. Use --json to inspect metadata.processing_method and metadata.transcript_source.
Billing
- 5 credits per video (flat rate, any length)
- Credits deducted before processing
- Full refund if Gemini fails or returns an error
- Insufficient credits returns 402 with your current balance
Error Handling
| Error | Meaning | Fix |
|---|---|---|
401 |
Token expired/invalid | atris login --force |
402 |
Not enough credits | Check balance, purchase at atris.ai |
400 |
Invalid YouTube URL | Check URL format |
502 |
Transcript or cloud processing failed | Retry; credits auto-refunded when backend fails |
Quick Reference
# Setup (once)
npm install -g atris && atris login
# Get token
TOKEN=$(node -e "console.log(require('$HOME/.atris/credentials.json').token)")
# Process a video
atris youtube process "https://youtube.com/watch?v=..." --query "Create a outline (flowing, idea-first) and action brief"
# Process + store to agent knowledge
atris youtube process "https://youtube.com/watch?v=..." --agent "YOUR_ID" --store