r/aiagents threads show the 2026 pattern: coding agents that cite open GitHub issues and the exact doc section in their answers. This tutorial builds that agent using Scavio's SERP with site:github.com and site:docs.* operators.
Prerequisites
- Python 3.10+
- A Scavio API key
- An LLM API key (Anthropic or OpenAI)
Walkthrough
Step 1: Build a GitHub issues tool
site:github.com/ORG/REPO/issues returns live issue tracker data.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def github_issues(repo, query):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': f'site:github.com/{repo}/issues {query}', 'num_results': 10})
return r.json().get('organic_results', [])Step 2: Build a docs search tool
site:docs.prisma.io or similar constrains to the official docs.
def docs_search(domain, query):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': f'site:{domain} {query}', 'num_results': 10})
return r.json().get('organic_results', [])Step 3: Compose an agent loop
Both tools run in parallel, results merged before answer synthesis.
import anthropic
client = anthropic.Anthropic()
def research(repo, docs_domain, question):
issues = github_issues(repo, question)
docs = docs_search(docs_domain, question)
context = '\n'.join([f"ISSUE: {i['title']} {i['link']}" for i in issues[:5]])
context += '\n\n' + '\n'.join([f"DOC: {d['title']} {d['link']}" for d in docs[:5]])
msg = client.messages.create(
model='claude-sonnet-4-6',
max_tokens=1024,
messages=[{'role': 'user', 'content': f'{question}\n\n{context}'}])
return msg.content[0].textStep 4: Test with a real question
Point at a library and repo you know.
print(research('prisma/prisma', 'prisma.io', 'why does migrate dev hang on postgres?'))Step 5: Add a freshness filter
Prefer issues from the last 90 days.
from datetime import datetime, timedelta
def recent_issues(items):
cutoff = datetime.now() - timedelta(days=90)
# Assume each item includes date; filter accordingly
return itemsPython Example
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
def coding_research(repo, question):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': f'site:github.com/{repo}/issues {question}'})
return r.json().get('organic_results', [])
print(coding_research('prisma/prisma', 'migrate dev hangs'))JavaScript Example
const API_KEY = process.env.SCAVIO_API_KEY;
export async function codingResearch(repo, question) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: `site:github.com/${repo}/issues ${question}` })
});
return (await r.json()).organic_results || [];
}Expected Output
Agent answers with inline citations to open GitHub issues and exact doc sections. Cuts debugging time materially for known-library bugs.