Conversation
LiteLLM OTel callbacks are not enabled, so _build_trace_metadata() and its test are dead code. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove all streaming event emission (agent.streaming.updated, cleared, interrupted) — high-frequency noise with no observability value. Revert unnecessary i->index, loc->location renames. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Run names are auto-generated by generate_run_name() which already slugifies the input. The extra sanitization layer was redundant. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Traceloop uses raw print() statements for "exporting traces to a custom exporter" and "Metrics are disabled" messages. Redirect stdout during init to suppress them. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Now that traces are always written to the run dir, the output path is always relevant — not just when vulnerabilities are found. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Base64 screenshot payloads from browser_action were bloating events.jsonl (~10MB for small runs). Strip them at the sanitizer level since DOM/HTML content is sufficient for debugging. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Docker SDK uses urllib3 for container API calls, which Traceloop auto-instruments — flooding events.jsonl with noise. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Implemented `load_skill` function to dynamically load skills into the current agent at runtime. - Enhanced agent context management to track loaded skills. - Created XML schema documentation for the new `load_skill` tool. - Added new skills documentation for various tools including `ffuf`, `httpx`, `katana`, `naabu`, `nmap`, `nuclei`, `sqlmap`, and `subfinder`. - Introduced runtime tooling logic to detect and manage tool usage in commands.
Greptile SummaryThis PR introduces auto-loading of tool-specific CLI skill context for eight security tools (nmap, nuclei, httpx, ffuf, subfinder, naabu, katana, sqlmap). Skills are injected lazily in two ways: automatically when the agent is about to run a recognised tool via Key changes:
Issues found:
Confidence Score: 4/5
Important Files Changed
|
…canonicalization for skill names
| if char == "|" and index + 1 < len(command) and command[index + 1] == "|": | ||
| index += 1 | ||
|
|
||
| segment = "".join(current).strip() | ||
| if segment: | ||
| segments.append(segment) | ||
| current = [] |
There was a problem hiding this comment.
Single
& background operator not treated as a segment separator
_split_shell_segments only splits on && (logical AND), ;, \n, and |/||. A lone & (background execution) is not treated as a separator. As a result, a command like:
nmap -sV target.tld & sqlmap -u http://target.tld --forms
is emitted as a single segment. _extract_command_and_args then calls shlex.split on the whole string and returns nmap as the command—sqlmap is never visited, so its skill is not auto-loaded.
Consider adding & as a segment separator in the & character handling block:
| if char == "|" and index + 1 < len(command) and command[index + 1] == "|": | |
| index += 1 | |
| segment = "".join(current).strip() | |
| if segment: | |
| segments.append(segment) | |
| current = [] | |
| if char == "&" and index + 1 < len(command) and command[index + 1] == "&": | |
| segment = "".join(current).strip() | |
| if segment: | |
| segments.append(segment) | |
| current = [] | |
| index += 2 | |
| continue | |
| if char == "&": | |
| segment = "".join(current).strip() | |
| if segment: | |
| segments.append(segment) | |
| current = [] | |
| index += 1 | |
| continue |
Prompt To Fix With AI
This is a comment left during a code review.
Path: strix/skills/runtime_tooling.py
Line: 218-224
Comment:
**Single `&` background operator not treated as a segment separator**
`_split_shell_segments` only splits on `&&` (logical AND), `;`, `\n`, and `|`/`||`. A lone `&` (background execution) is not treated as a separator. As a result, a command like:
```
nmap -sV target.tld & sqlmap -u http://target.tld --forms
```
is emitted as a single segment. `_extract_command_and_args` then calls `shlex.split` on the whole string and returns `nmap` as the command—`sqlmap` is never visited, so its skill is not auto-loaded.
Consider adding `&` as a segment separator in the `&` character handling block:
```suggestion
if char == "&" and index + 1 < len(command) and command[index + 1] == "&":
segment = "".join(current).strip()
if segment:
segments.append(segment)
current = []
index += 2
continue
if char == "&":
segment = "".join(current).strip()
if segment:
segments.append(segment)
current = []
index += 1
continue
```
How can I resolve this? If you propose a fix, please make it concise.Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
…tooling preflight
No description provided.