Securityclaw Autonomous Soc Agent
Deploy and operate SecurityClaw, an autonomous SOC agent with RAG-based threat detection, LLM-powered anomaly analysis, and skill-based security automation
- Skill ID
- reason-machines/security-skills/securityclaw-autonomous-soc-agent
- Publisher
- reason-machines
- Repository
- security-skills
- Installs
- 0
- Files
- 1
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
reason-machines/security-skills/securityclaw-autonomous-soc-agentInstalls these files- SKILL.md
What this skill tells the agent
SecurityClaw Autonomous SOC Agent
Skill by ara.so — Security Skills collection.
SecurityClaw is a modular, skill-based autonomous Security Operations Center (SOC) agent that monitors OpenSearch/Elasticsearch data, builds RAG-based behavioral memory, and validates real-time anomalies using LLMs. It orchestrates security workflows through LangGraph, maintains conversation-based investigations, and provides both CLI and web interfaces for threat analysis.
Core Capabilities
- Skill-based architecture: Each capability is an isolated module with Python logic + LLM instruction
- RAG behavioral memory: Vector embeddings of network baselines stored in OpenSearch
- Anomaly detection: Scheduled 1-minute watcher polls findings and escalates threats
- LLM-powered analysis: Threat analyst validates anomalies using retrieval-augmented context
- LangGraph orchestration: DECIDE→EXECUTE→EVALUATE supervisor loop with SQLite checkpointing
- Web + CLI interfaces: React UI for chat investigations, CLI for automation
- Provider agnostic: Swap OpenSearch↔Elasticsearch, Ollama↔other LLM providers
Installation
Prerequisites
# Python 3.11+ required
python --version
# Install Ollama for LLM provider
curl -fsSL https://ollama.com/install.sh | sh
ollama serve
# Pull recommended models
ollama pull qwen2.5:7b-instruct-q4_K_M
ollama pull nomic-embed-text:latestSetup
# Clone repository
git clone https://github.com/SecurityClaw/SecurityClaw.git
cd SecurityClaw
# Create virtual environment
python3.11 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Run interactive onboarding wizard
python main.py onboardThe onboarding wizard configures:
- OpenSearch/Elasticsearch connection (host, port, SSL, auth)
- LLM provider (Ollama endpoint, model names)
- Optional external APIs (AbuseIPDB, VirusTotal, MaxMind GeoIP)
- Skill-specific environment variables
Outputs config.yaml and .env with validated configuration.
Configuration
config.yaml Structure
# Database configuration
database:
provider: opensearch # or elasticsearch
host: localhost
port: 9200
use_ssl: true
verify_certs: false
username: admin
password_env: OPENSEARCH_PASSWORD # Reads from .env
# LLM provider
llm:
provider: ollama
base_url: http://localhost:11434
model: qwen2.5:7b-instruct-q4_K_M
temperature: 0.7
max_tokens: 16384
# RAG engine
rag:
index_name: securityclaw_baselines
embedding_model: nomic-embed-text:latest
embedding_dimension: 768
top_k: 5
# API server
api:
host: 0.0.0.0
port: 7799
enable_cors: trueEnvironment Variables (.env)
# Database credentials
OPENSEARCH_PASSWORD=your_password_here
# Optional external APIs
ABUSEIPDB_API_KEY=${ABUSEIPDB_API_KEY}
VIRUSTOTAL_API_KEY=${VIRUSTOTAL_API_KEY}
MAXMIND_LICENSE_KEY=${MAXMIND_LICENSE_KEY}
# Skill-specific variables (discovered by onboard command)
ANOMALY_TRIAGE_THRESHOLD=0.7CLI Commands
Service Management
# Start full service (scheduler + web UI + API)
python main.py service
# Access web UI at http://localhost:5173
# API at http://localhost:7799
# Start API only (no background scheduler)
SECURITYCLAW_API_ONLY=1 python main.py service
# Start scheduler loop only (no web interface)
python main.py run
# Web development mode (frontend with hot reload)
python main.py web-devSkill Operations
# List all loaded skills and their schedules
python main.py list-skills
# Manually dispatch a skill once
python main.py dispatch network_baseliner
python main.py dispatch threat_analyst
# Interactive chat interface (CLI)
python main.py chat
# View agent memory snapshot
python main.py statusConfiguration Management
# Re-run onboarding wizard
python main.py onboard
# Validate current configuration
python main.py validate-configSkill Development
Creating a New Skill
Skills are directories in skills/ with two required files:
skills/my_skill/instruction.md (LLM guidance + metadata):
---
skill_id: my_skill
display_name: My Custom Skill
version: 1.0.0
schedule_interval_seconds: 3600 # Optional: for scheduled execution
capabilities:
- custom_analysis
prerequisites:
- network_data
required_entities:
- ip_address
artifacts_produced:
- analysis_report
---
# System Prompt for My Skill
You are a security analyst performing custom analysis.
## Task
Analyze network data and produce findings.
## Output Format
Return JSON with "findings" array.skills/my_skill/logic.py (Python implementation):
from typing import Dict, Any
import logging
logger = logging.getLogger(__name__)
def execute(
db_connector,
llm_provider,
rag_engine,
config: Dict[str, Any],
memory: Dict[str, Any],
**kwargs
) -> Dict[str, Any]:
"""
Skill entrypoint.
Args:
db_connector: OpenSearch/ES client
llm_provider: LLM client
rag_engine: RAG context retrieval
config: Skill-specific config from instruction.md
memory: Shared agent memory (read/write)
**kwargs: Additional context (user_query, conversation_id, etc.)
Returns:
Dict with success status and results
"""
logger.info("Executing my_skill")
# Query database
query = {
"size": 100,
"query": {"match_all": {}},
"sort": [{"@timestamp": "desc"}]
}
results = db_connector.search(index="network-*", body=query)
# Retrieve RAG context
context = rag_engine.retrieve("recent network behavior", top_k=3)
# Call LLM with context
prompt = f"""Analyze these network events:
{results['hits']['hits'][:5]}
Baseline context:
{context}
Identify anomalies."""
response = llm_provider.chat([
{"role": "system", "content": config.get("system_prompt", "")},
{"role": "user", "content": prompt}
])
# Update shared memory
memory.setdefault("my_skill_runs", []).append({
"timestamp": "2026-05-19T10:00:00Z",
"findings_count": len(results['hits']['hits'])
})
return {
"success": True,
"findings": response["content"],
"context_used": len(context)
}The skill is auto-discovered on next run. Set schedule_interval_seconds in instruction.md to enable automatic execution.
Built-in Skills
network_baseliner (6-hour schedule)
Builds behavioral baselines from network logs:
# Triggered automatically every 6 hours
# Aggregates normal traffic patterns into RAG vectors
# Used by threat_analyst for context
# Manual dispatch:
python main.py dispatch network_baselineranomaly_triage (Manual, convertible to scheduled)
Polls OpenSearch Anomaly Detection findings:
# Currently manual dispatch:
python main.py dispatch anomaly_triage
# To enable 1-minute polling, add to skills/anomaly_triage/instruction.md:
# schedule_interval_seconds: 60Escalates high-confidence anomalies to memory queue for analysis.
threat_analyst (Manual, convertible to scheduled)
Analyzes escalated findings with RAG context:
# Manual threat analysis:
python main.py dispatch threat_analyst
# Returns verdict with LLM reasoning:
# {
# "verdict": "malicious",
# "confidence": 0.85,
# "reasoning": "Unusual port scan pattern...",
# "context_sources": ["baseline_2026-05-15", ...]
# }opensearch_querier (Manual)
Executes raw database queries:
# Via chat interface:
# "Query OpenSearch for failed logins in the last hour"
# Skill constructs and executes:
# GET /auth-logs-*/_search
# {
# "query": {
# "bool": {
# "must": [
# {"match": {"event.outcome": "failure"}},
# {"range": {"@timestamp": {"gte": "now-1h"}}}
# ]
# }
# }
# }More from reason-machines
Use this skill in a project
Open any RiverX project, search the Skills panel for reason-machines/security-skills/securityclaw-autonomous-soc-agent, and install it in one click.
