Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ Cybersecurity AI (CAI) is a lightweight, open-source framework that empowers sec
- Established the **autonomy levels in cybersecurity** and argued about autonomy vs automation in the field [![arXiv](https://img.shields.io/badge/arXiv-2506.23592-7dd3c0.svg)](https://arxiv.org/abs/2506.23592)
- **Collaborative research initiatives** with international academic institutions focused on developing cybersecurity education curricula and training methodologies [![arXiv](https://img.shields.io/badge/arXiv-2508.13588-52a896.svg)](https://arxiv.org/abs/2508.13588)
- **Contributed a comprehensive defense framework against prompt injection in AI security agents**: developed and empirically validated a multi-layered defense system that addresses the identified prompt injection issues [![arXiv](https://img.shields.io/badge/arXiv-2508.21669-85e0d1.svg)](https://arxiv.org/abs/2508.21669)
- Explord the Cybersecurity of Humanoid Robots with CAI and identified new attack vectors showing how it `(a)` operates simultaneously as a covert surveillance node and `(b)` can be purposed as an active cyber operations platform [![arXiv](https://img.shields.io/badge/arXiv-2509.14096-3e8b7a.svg)](https://arxiv.org/abs/2509.14096) [![arXiv](https://img.shields.io/badge/arXiv-2509.14139-6bc7b5.svg)](https://arxiv.org/abs/2509.14139)
- Explored the Cybersecurity of Humanoid Robots with CAI and identified new attack vectors showing how it `(a)` operates simultaneously as a covert surveillance node and `(b)` can be purposed as an active cyber operations platform [![arXiv](https://img.shields.io/badge/arXiv-2509.14096-3e8b7a.svg)](https://arxiv.org/abs/2509.14096) [![arXiv](https://img.shields.io/badge/arXiv-2509.14139-6bc7b5.svg)](https://arxiv.org/abs/2509.14139)


### 📚 Research products: `Cybersecurity AI`
Expand Down Expand Up @@ -1092,7 +1092,7 @@ The agent started performing a nmap scan. You could either interact with the age

![cai-005-ctrl-c](imgs/readme_imgs/cai-005-ctrl-c.png)

If you want to use the HITL mode, you can do it by presssing twice ```Ctrl + C```.
If you want to use the HITL mode, you can do it by pressing twice ```Ctrl + C```.
This will allow you to interact (prompt) with the agent whenever you want. The agent will not lose the previous context, as it is stored in the `history` variable, which is passed to it and any agent that is called. This enables any agent to use the previous information and be more accurate and efficient.
</details>

Expand Down
2 changes: 1 addition & 1 deletion benchmarks/cyberPII-bench/memory01_gold.csv
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ Response Data:
""site_status"": ""active""
}
}
VULNERABLE: User location data exposed! I need you tothink further and deeper, be unexpected, the little thing the developers had not thought about so we find a flaw , maybe check if thi sis the expected behaviour for the API instead of a vector of attack, right? example of dcmentation https://developers.mercadolibre.cl/es_ar/recomendaciones-de-autorizacion-y-token";"i ran it Response Headers:
VULNERABLE: User location data exposed! I need you tothink further and deeper, be unexpected, the little thing the developers had not thought about so we find a flaw , maybe check if thi sis the expected behaviour for the API instead of a vector of attack, right? example of docmentation https://developers.mercadolibre.cl/es_ar/recomendaciones-de-autorizacion-y-token";"i ran it Response Headers:
Access-Control-Allow-Origin: null
Access-Control-Allow-Methods: null
Access-Control-Allow-Headers: null
Expand Down
2 changes: 1 addition & 1 deletion examples/cai/agent_patterns/paralelization.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def execute_cli_command(command: str) -> str:
# An agent to pick the best solution after multiple attempts
best_solution_picker = Agent(
name="best_solution_picker",
description="Agent focused on picking the best security solutio",
description="Agent focused on picking the best security solution",
instructions="You pick the best security solution from the given attempts.",
model=OpenAIChatCompletionsModel(
model=os.getenv('CAI_MODEL', "qwen2.5:14b"),
Expand Down
2 changes: 1 addition & 1 deletion src/cai/agents/guardrails.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Prompt Injection Guardrails for CAI Agents

This module implements guardrails to protect against prompt injection attacks
when agents interact with untrusted external content (web pages, server responses, etc).
when agents interact with untrusted external content (web pages, server responses, etc.).
"""

import re
Expand Down
4 changes: 2 additions & 2 deletions src/cai/repl/commands/load.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ def handle(self, args: Optional[List[str]] = None) -> bool:
# Convert to P format
args[0] = f"P{args[0]}"

# Check if first arg is an ID (P1, P2, etc)
# Check if first arg is an ID (P1, P2, etc.)
if args[0].upper().startswith("P"):
# Try to resolve ID to agent name
from cai.repl.commands.parallel import PARALLEL_CONFIGS
Expand Down Expand Up @@ -674,7 +674,7 @@ def _load_to_agent(self, agent_name: str, jsonl_file: str) -> bool:
console.print("[dim]The file may be empty or contain only session events[/dim]")
return True

# If agent_name is an ID (P1, P2, etc), resolve it to actual agent name
# If agent_name is an ID (P1, P2, etc.), resolve it to actual agent name
from cai.sdk.agents.simple_agent_manager import AGENT_MANAGER
resolved_agent_name = agent_name

Expand Down
2 changes: 1 addition & 1 deletion tools/case_study_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ async def generate_case_study(jsonl_file: str, output_php_file: str) -> Optional
prompt = "Generate the PHP code for a cybersecurity case study based on the template. "
prompt += "Analyze the conversation context that has been loaded and create a comprehensive case study. "
prompt += "Fill in all TEMPLATE-TODO sections with relevant information from the session. "
prompt += "Explain step by step the problem and the solution in this escenario"
prompt += "Explain step by step the problem and the solution in this scenario"
prompt += "The output should be complete PHP code ready to save to a file."

# Add a summary of the JSONL conversation to the prompt
Expand Down