Upload SKILL.md
Browse files
.claude/skills/osint-agent/SKILL.md
CHANGED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
name: osint-agent
|
| 3 |
+
description: Domain knowledge for the Claude-powered OSINT expert agent in agent/
|
| 4 |
+
---
|
| 5 |
+
|
| 6 |
+
# OSINT Agent Module
|
| 7 |
+
|
| 8 |
+
The `agent/` module provides a `claude-opus-4-7` powered OSINT expert (`OSINTAgent`).
|
| 9 |
+
Requires `ANTHROPIC_API_KEY` env var.
|
| 10 |
+
|
| 11 |
+
## Key design decisions
|
| 12 |
+
|
| 13 |
+
- **Prompt caching:** `OSINT_SYSTEM_PROMPT` (~2000 tokens) has `cache_control: {"type": "ephemeral"}`. One cached block is optimal — do not split the system prompt.
|
| 14 |
+
- **Adaptive thinking:** Always `thinking={"type": "adaptive"}`. Never use `budget_tokens` — deprecated on `claude-opus-4-7`.
|
| 15 |
+
- **History format:** Store `response.content` (the full block list, not just `.text`) in conversation history to preserve thinking blocks across turns.
|
| 16 |
+
- **Streaming:** `stream_chat()` calls `stream.get_final_message()` after exhausting `stream.text_stream` to capture complete content blocks for history.
|
| 17 |
+
|
| 18 |
+
## Analysis types
|
| 19 |
+
|
| 20 |
+
`analyze_target(target, analysis_type)` dispatches to `_build_analysis_prompt()`:
|
| 21 |
+
`full | passive | threat | footprint | breach | darkweb | socmint`
|
| 22 |
+
|
| 23 |
+
## Extending the agent
|
| 24 |
+
|
| 25 |
+
| Task | Where |
|
| 26 |
+
|---|---|
|
| 27 |
+
| Add analysis type | `_build_analysis_prompt()` prompts dict + CLI `--type` choices |
|
| 28 |
+
| Modify persona/knowledge | `OSINT_SYSTEM_PROMPT` — cache invalidates automatically |
|
| 29 |
+
| New convenience method | Build prompt string, call `self.chat()`, follow `generate_ioc_report()` pattern |
|