ECC
The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.
npx ecc-install --profile fullThe agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.
npx ecc-install --profile fullFair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
npx n8nAn open-source AI agent that brings the power of Gemini directly into your terminal.
npx @google/gemini-cli5041 GitHub stars recorded
gte-rerank / Cohere-compatible) + post-processing (dedupe, budget); Eino Compose indexing pipelineupsert_project_fact + links to chain paths; attack-chain and project fact graph views{{previous.output}} and {{outputs.variable_name}} for inter-node data passing; bind a graph to a role for automatic execution on chat. See Graph orchestration guide/api/eino-agent/stream (Eino ADK ChatModelAgent); multi-agent via /api/multi-agent/stream with deep (coordinator + task sub-agents), plan_execute, or supervisor (orchestration in the request body). ADK summarization compresses long contexts; pre-compaction transcripts land at data/conversation_artifacts/<conversation-id>/summarization/transcript.txt (full user/assistant/tool turns; static system omitted). Markdown under agents/: orchestrator.md, orchestrator-plan-execute.md, orchestrator-supervisor.md, plus sub-agent *.md (see Multi-agent doc)analyze_image): separate VL model (e.g. qwen-vl-max) via MCP for local screenshots, captchas, and UI; image bytes stay out of agent history (text summaries only). Configure vision in config.yaml; see docs/en-US/VISION.mdskills_dir follow Agent Skills layout (SKILL.md + optional files); multi-agent sessions use the official Eino ADK skill tool for progressive disclosure (load by name), with optional host filesystem / shell via multi_agent.eino_skills; optional eino_middleware adds patchtoolcalls, tool_search, plantask (TaskCreate / TaskList boards under skills_dir/.eino/plantask/), reduction, file checkpoints (checkpoint_dir), ChatModel retries, session output key, and Deep tuning—20+ sample domains (SQLi, XSS, API security, …) ship under skills/config.yaml under hitl.tool_whitelist; the Audit Agent can use a separate lightweight model via hitl.audit_model; Apply can merge new tools into the file and update the running server without restart; dedicated HITL page for pending approvals. See HITL best practices/api/c2/*, plus unified MCP tools (c2_listener, c2_session, c2_task, c2_task_manage, c2_payload, c2_event, c2_profile, c2_file); optional HITL approval for sensitive operations and OPSEC-style controls (e.g. command deny rules). Authorized testing only.roles/ directory.user_prompt that prepends to user messages, guiding the AI to adopt specialized testing methodologies and focus areas.tools list to limit available tools, ensuring focused testing workflows (e.g., CTF role restricts to CTF-specific utilities).skills_dir and load via the Eino ADK skill tool (progressive disclosure) in both single- and multi-agent sessions when multi_agent.eino_skills is enabled. Optional host read_file / glob / grep / write / edit / execute and eino_middleware (tool_search, plantask, reduction, checkpoints, summarization transcripts, etc.) apply per mode—see docs.roles/ directory. Each role defines name, description, user_prompt, icon, tools, and enabled fields.Creating a custom role (example):
roles/ (e.g., roles/custom-role.yaml):
name: Custom Role
description: Specialized testing scenario
user_prompt: You are a specialized security tester focusing on API security...
icon: "\U0001F4E1"
tools:
- api-fuzzer
- arjun
- graphql-scanner
enabled: true
adk/prebuilt (alongside Eino single-agent on /api/eino-agent*): deep — coordinator + task sub-agents for complex security testing and delegated synthesis; plan_execute — planner / executor / replanner for structured loops; supervisor — expert-routing mode with transfer / exit for multiple specialist sub-agents. Client sends orchestration: deep | plan_execute | supervisor (default deep).agents_dir (default agents/):
orchestrator.md or one .md with kind: orchestrator. Body or multi_agent.orchestrator_instruction, then Eino defaults.orchestrator-plan-execute.md (plus optional orchestrator_instruction_plan_execute in YAML).orchestrator-supervisor.md (plus optional orchestrator_instruction_supervisor); requires at least one sub-agent, and one-sub-agent runs emit a hint that expert routing has limited value.*.md files (YAML front matter + body). Not used as task targets if marked orchestrator-only./api/multi-agent/markdown-agents.multi_agent in config.yaml: enabled, robot_default_agent_mode, batch_use_multi_agent, max_iteration, plan_execute_loop_max_iterations, per-mode orchestrator instruction fields, optional YAML sub_agents merged with disk (id clash → Markdown wins), eino_skills, eino_middleware (optional ADK middleware and Deep/Supervisor tuning).checkpoint_dir enables ADK resume after process crashes (distinct from trace-based “interrupt & continue”). deep_model_retry_max_retries retries transient LLM API failures within a single call. Summarization writes a filtered transcript when compression fires; the summary message includes the path so the model can read_file for scan output and other pre-compaction details.SKILL.md only (Agent Skills): YAML front matter only name and description, plus Markdown body. Optional sibling files (FORMS.md, REFERENCE.md, scripts/*, …). No SKILL.yaml (not part of Claude or Eino specs); sections/scripts/progressive behavior are derived at runtime from Markdown and the filesystem.skills_dir is the single root for packs. Multi-agent loads them through Eino’s official skill middleware (progressive disclosure: model calls skill with a pack name instead of receiving full SKILL text up front). Configure via multi_agent.eino_skills: disable, filesystem_tools (host read/glob/grep/write/edit/execute), skill_tool_name.schema.Document chunks for FilesystemSkillsRetriever (skills.AsEinoRetriever()) in compose graphs (e.g. knowledge/indexing pipelines)./api/skills listing and depth (summary | full), section, and resource_path remain for the web UI and ops; model-side skill loading in multi-agent uses the skill tool, not MCP.eino_middleware – e.g. tool_search (dynamic MCP tool list), patch_tool_calls, plantask (Eino TaskCreate / TaskGet / TaskUpdate / TaskList; JSON under skills_dir/.eino/plantask/<conversation-id>/; Eino clears task files when all tasks are marked completed), reduction, checkpoint_dir (data/eino-checkpoints/), deep_model_retry_max_retries, deep_output_key, task-tool description prefix—see config.yaml and internal/config/config.go.skills/cyberstrike-eino-demo/; see skills/README.md.Creating a skill:
mkdir skills/<skill-id> and add standard SKILL.md (+ any optional files), or drop in an open-source skill folder as-is.multi_agent.eino_skills enabled so the model can call the skill tool with that pack name.tools/*.yaml describe commands, arguments, prompts, and metadata.security.tools_dir to a folder is usually enough; inline definitions in config.yaml remain supported for quick experiments.reduction_max_length_for_trunc are summarized via Eino reduction with full content persisted under tmp/reduction/; use read_file on the path in <persisted-output>.Creating a custom tool (typical flow)
tools/ (for example tools/nmap.yaml or tools/ffuf.yaml).name, command, args, and short_description.parameters[] so the agent knows how to build CLI arguments.description/notes block if the agent needs extra context or post-processing tips.cmd), and an optional remark; all records persist in SQLite and are compatible with common clients such as IceSword and AntSword.echo 1 check).tcp_reverse, http_beacon, https_beacon, and websocket; per-listener crypto keys; running listeners can be restored after restart when marked running in the database.c2_task, task management, payloads, events, profiles, files) so the same agent loop can orchestrate C2 alongside other tools; dangerous task types can go through the existing HITL bridge when your session policy requires it.go run cmd/mcp-stdio/main.go exposes the agent to Cursor/CLI.mcp-servers/ directory provides standalone MCPs (e.g. reverse shell). They speak standard MCP over stdio and work with CyberStrikeAI (Settings → External MCP), Cursor, VS Code, and other MCP clients.go build -o cyberstrike-ai-mcp cmd/mcp-stdio/main.go
Settings → Tools & MCP → Add Custom MCP, pick Command, then point to the compiled binary and your config:
{
"mcpServers": {
"cyberstrike-ai": {
"command": "/absolute/path/to/cyberstrike-ai-mcp",
"args": [
"--config",
"/absolute/path/to/config.yaml"
]
}
}
}
Replace the paths with your local locations; Cursor will launch the stdio server automatically.The HTTP MCP server runs on a separate port (default 8081) and supports header-based authentication so only clients that send the correct header can call tools.
config.yaml set mcp.enabled: true and optionally mcp.host / mcp.port. For auth (recommended if the port is reachable from the network), set:
mcp.auth_header – header name (e.g. X-MCP-Token);mcp.auth_header_value – secret value. Leave it empty if you want the server to auto-generate a random token on first start and write it back to the config../run.sh or go run cmd/server/main.go. The MCP endpoint is http://<host>:<port>/mcp (e.g. http://localhost:8081/mcp).auth_header_value was empty, it will have been generated and saved; the printed JSON includes the URL and headers.~/.cursor/mcp.json (or your project’s .cursor/mcp.json) under mcpServers, or merge it into your existing mcpServers..mcp.json or ~/.claude.json under mcpServers.Example of what the terminal prints (with auth enabled):
{
"mcpServers": {
"cyberstrike-ai": {
"url": "http://localhost:8081/mcp",
"headers": {
"X-MCP-Token": "<auto-generated-or-your-value>"
},
"type": "http"
}
}
}
If you do not set auth_header / auth_header_value, the endpoint accepts requests without authentication (suitable only for localhost or trusted networks).
CyberStrikeAI supports connecting to external MCP servers via three transport modes:
To add an external MCP server:
Open the Web UI and navigate to Settings → External MCP.
Click Add External MCP and provide the configuration in JSON format:
HTTP mode example:
{
"my-http-mcp": {
"transport": "http",
"url": "http://127.0.0.1:8081/mcp",
"description": "HTTP MCP server",
"timeout": 30
}
}
stdio mode example:
{
"my-stdio-mcp": {
"command": "python3",
"args": ["/path/to/mcp-server.py"],
"description": "stdio MCP server",
"timeout": 30
}
}
SSE mode example:
{
"my-sse-mcp": {
"transport": "sse",
"url": "http://127.0.0.1:8082/sse",
"description": "SSE MCP server",
"timeout": 30
}
}
Click Save and then Start to connect to the server.
Monitor the connection status, tool count, and health in real time.
SSE mode benefits:
A test SSE MCP server is available at cmd/test-sse-mcp-server/ for validation purposes.
search_knowledge_base tool.gte-rerank or Cohere-compatible /v1/rerank) → post-processing (normalized dedupe, char/token budget, final top_k). Rerank failures degrade to fusion order without breaking search.retriever.Retriever usage.knowledge_base/ directory for Markdown files and automatically indexes them with embeddings (Markdown header split + recursive chunking via Eino).Setting up the knowledge base:
knowledge.enabled: true in config.yaml:
knowledge:
enabled: true
base_path: knowledge_base
embedding:
provider: openai
model: text-embedding-v4
base_url: "https://api.openai.com/v1" # or your embedding API
api_key: "sk-xxx"
retrieval:
top_k: 5
similarity_threshold: 0.7
multi_query:
max_queries: 4 # LLM rewrite variants (always on)
rerank: # always on; empty fields inherit openai/embedding credentials
provider: "" # auto: dashscope | cohere from base_url
model: "" # empty: gte-rerank (DashScope) or rerank-multilingual-v3.0 (Cohere)
base_url: ""
api_key: ""
post_retrieve:
prefetch_top_k: 20 # vector candidates per MultiQuery variant; 0 = max(top_k×4, 20)
max_context_chars: 0
max_context_tokens: 0
knowledge_base/ directory, organized by category (e.g., knowledge_base/SQL Injection/README.md).search_knowledge_base when it needs security knowledge. You can also explicitly ask: "Search the knowledge base for SQL injection techniques".Knowledge base structure:
POST /api/multi-agent/stream (SSE, when enabled), POST /api/multi-agent (non-streaming), Markdown agents under /api/multi-agent/markdown-agents (list/get/create/update/delete)./api/roles endpoints: GET /api/roles (list all roles), GET /api/roles/:name (get role), POST /api/roles (create role), PUT /api/roles/:name (update role), DELETE /api/roles/:name (delete role). Roles are stored as YAML files in the roles/ directory and support hot-reload./api/vulnerabilities endpoints: GET /api/vulnerabilities (list with filters), POST /api/vulnerabilities (create), GET /api/vulnerabilities/:id (get), PUT /api/vulnerabilities/:id (update), DELETE /api/vulnerabilities/:id (delete), GET /api/vulnerabilities/stats (statistics)./api/batch-tasks endpoints: POST /api/batch-tasks (create queue), GET /api/batch-tasks (list queues), GET /api/batch-tasks/:queueId (get queue), POST /api/batch-tasks/:queueId/start (start execution), POST /api/batch-tasks/:queueId/cancel (cancel), DELETE /api/batch-tasks/:queueId (delete), POST /api/batch-tasks/:queueId/tasks (add task), PUT /api/batch-tasks/:queueId/tasks/:taskId (update task), DELETE /api/batch-tasks/:queueId/tasks/:taskId (delete task). Tasks execute sequentially, each creating a separate conversation with full status tracking./api/webshell/connections (GET list, POST create, PUT update, DELETE delete) and /api/webshell/exec (command execution), /api/webshell/fileop (list/read/write/delete files)./api/c2/* (e.g. listeners CRUD/start/stop, session sleep, task create/cancel/wait, payload build/download, event stream)./api/auth/change-password, enforce short-lived sessions, and restrict MCP ports at the network layer when exposing the service.agents/*.mdeino_skillseino_middlewareprevious / outputs variable passing, and role binding.