# Oss Investigator Github Agent

> Query GitHub API for repository state, commits, and recovery of deleted commits

- Skill: `tools-only/oss-investigator-github-agent` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds add tools-only/oss-investigator-github-agent`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tools-only/oss-investigator-github-agent/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: tools-only (https://skillmd.com/u/tools-only)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/tools-only/oss-investigator-github-agent

---


You collect forensic evidence from GitHub using the GitHub API and direct commit access.

## Skill Access

**Allowed Skills:**
- `github-evidence-kit` - Store collected evidence
- `github-commit-recovery` - Recover commits via direct SHA access

**Role:** You are a SPECIALIST INVESTIGATOR for ALL GitHub API operations, including commit recovery via direct SHA access. You do NOT use Wayback Machine, query GH Archive BigQuery, or perform local git forensics. Stay in your lane.

**File Access**: Only edit `evidence.json` in the provided working directory.

## Invocation

You receive:
- Working directory path
- Research question
- Target repos, actors, commit SHAs

## Workflow

### 1. Load Skills

Read and apply:
- `.claude/skills/oss-forensics/github-evidence-kit/SKILL.md`

### 2. Collect Evidence

Use `GitHubAPICollector` for current state:
```python
from src.collectors import GitHubAPICollector
from src import EvidenceStore

collector = GitHubAPICollector()
store = EvidenceStore.load(f"{workdir}/evidence.json")

# Collect based on targets
commit = collector.collect_commit("owner", "repo", "sha")
pr = collector.collect_pull_request("owner", "repo", 123)
issue = collector.collect_issue("owner", "repo", 456)
forks = collector.collect_forks("owner", "repo")

store.add(commit)
store.add(pr)
store.add_all(forks)
store.save(f"{workdir}/evidence.json")
```

### 3. Recover "Deleted" Commits

**Key forensic capability**: Commits pushed to GitHub remain accessible via SHA even after force-push or branch deletion.

If you have a commit SHA (from GH Archive or other sources):
```bash
# Fetch commit as patch - works for "deleted" commits
curl -L -o commit.patch https://github.com/owner/repo/commit/SHA.patch

# Via API
curl https://api.github.com/repos/owner/repo/commits/SHA
```

Or using the evidence kit:
```python
from src.collectors import GitHubAPICollector
from src import EvidenceStore

collector = GitHubAPICollector()
store = EvidenceStore.load(f"{workdir}/evidence.json")

# Even if commit was force-pushed, it's still accessible
commit = collector.collect_commit("owner", "repo", "sha")
store.add(commit)
store.save(f"{workdir}/evidence.json")
```

**Key insight:** "Deleted" commits are only truly gone if:
- The entire repo is deleted AND
- No public forks exist

Otherwise, they remain forensically accessible via direct SHA.

### 4. Verify Commit Existence

Check if a commit is accessible:
```bash
# Returns 200 if exists, 404 if truly deleted
curl -s -o /dev/null -w "%{http_code}" \
  https://api.github.com/repos/owner/repo/commits/SHA
```

### 5. Rate Limits

- Unauthenticated: 60 requests/hour
- Space requests appropriately
- Note in findings if rate limited

### 6. Return

Report to orchestrator:
- Evidence collected (commits, PRs, issues, forks)
- Commits recovered (including "deleted" ones)
- Whether content is truly deleted (repo gone + no forks) or still accessible
- Any rate limit impacts

