mirror of
https://github.com/usestrix/strix.git
synced 2026-08-25 12:22:37 +02:00
docs: restore tool guidance into docstrings, drop prompt tool-format boilerplate
Port the prose guidance that previously lived in the deleted *_actions_schema.xml files into per-tool docstrings, so the SDK's auto-generated function schema carries the same domain knowledge (HTTPQL syntax, Caido sitemap kinds, browser persistence/JS rules, agent specialization caps, customer-facing report rules, CVSS/CWE guidance, etc.) without any custom prompt scaffolding. Strip the <tool_usage> block from system_prompt.jinja — XML format guidance, the "CRITICAL RULES" 0-8 list, and the </function> closing-tag reminder all contradicted the SDK's native JSON function-calling protocol.
This commit is contained in:
@@ -359,77 +359,6 @@ PERSISTENCE IS MANDATORY:
|
||||
- There are ALWAYS more attack vectors to explore
|
||||
</multi_agent_system>
|
||||
|
||||
<tool_usage>
|
||||
Tool call format:
|
||||
<function=tool_name>
|
||||
<parameter=param_name>value</parameter>
|
||||
</function>
|
||||
|
||||
CRITICAL RULES:
|
||||
{% if interactive %}
|
||||
0. When using tools, include exactly one tool call per message. You may respond with text only when appropriate (to answer the user, explain results, etc.).
|
||||
{% else %}
|
||||
0. While active in the agent loop, EVERY message you output MUST be a single tool call. Do not send plain text-only responses.
|
||||
{% endif %}
|
||||
1. Exactly one tool call per message — never include more than one <function>...</function> block in a single LLM message.
|
||||
2. Tool call must be last in message
|
||||
3. EVERY tool call MUST end with </function>. This is MANDATORY. Never omit the closing tag. End your response immediately after </function>.
|
||||
4. Use ONLY the exact format shown above. NEVER use JSON/YAML/INI or any other syntax for tools or parameters.
|
||||
5. When sending ANY multi-line content in tool parameters, use real newlines (actual line breaks). Do NOT emit literal "\n" sequences. Literal "\n" instead of real line breaks will cause tools to fail.
|
||||
6. Tool names must match exactly the tool "name" defined (no module prefixes, dots, or variants).
|
||||
7. Parameters must use <parameter=param_name>value</parameter> exactly. Do NOT pass parameters as JSON or key:value lines. Do NOT add quotes/braces around values.
|
||||
{% if interactive %}
|
||||
8. When including a tool call, the tool call should be the last element in your message. You may include brief explanatory text before it.
|
||||
{% else %}
|
||||
8. Do NOT wrap tool calls in markdown/code fences or add any text before or after the tool block.
|
||||
{% endif %}
|
||||
|
||||
CORRECT format — use this EXACTLY:
|
||||
<function=tool_name>
|
||||
<parameter=param_name>value</parameter>
|
||||
</function>
|
||||
|
||||
WRONG formats — NEVER use these:
|
||||
- <invoke name="tool_name"><parameter name="param_name">value</parameter></invoke>
|
||||
- <function_calls><invoke name="tool_name">...</invoke></function_calls>
|
||||
- <tool_call><tool_name>...</tool_name></tool_call>
|
||||
- {"tool_name": {"param_name": "value"}}
|
||||
- ```<function=tool_name>...</function>```
|
||||
- <function=tool_name>value_without_parameter_tags</function>
|
||||
|
||||
EVERY argument MUST be wrapped in <parameter=name>...</parameter> tags. NEVER put values directly in the function body without parameter tags. This WILL cause the tool call to fail.
|
||||
|
||||
Do NOT emit any extra XML tags in your output. In particular:
|
||||
- NO <thinking>...</thinking> or <thought>...</thought> blocks
|
||||
- NO <scratchpad>...</scratchpad> or <reasoning>...</reasoning> blocks
|
||||
- NO <answer>...</answer> or <response>...</response> wrappers
|
||||
{% if not interactive %}
|
||||
If you need to reason, use the think tool. Your raw output must contain ONLY the tool call — no surrounding XML tags.
|
||||
{% else %}
|
||||
If you need to reason, use the think tool. When using tools, do not add surrounding XML tags.
|
||||
{% endif %}
|
||||
|
||||
Notice: use <function=X> NOT <invoke name="X">, use <parameter=X> NOT <parameter name="X">, use </function> NOT </invoke>.
|
||||
|
||||
Example (terminal tool):
|
||||
<function=terminal_execute>
|
||||
<parameter=command>nmap -sV -p 1-1000 target.com</parameter>
|
||||
</function>
|
||||
|
||||
Example (agent creation tool):
|
||||
<function=create_agent>
|
||||
<parameter=task>Perform targeted XSS testing on the search endpoint</parameter>
|
||||
<parameter=name>XSS Discovery Agent</parameter>
|
||||
<parameter=skills>xss</parameter>
|
||||
</function>
|
||||
|
||||
SPRAYING EXECUTION NOTE:
|
||||
- When performing large payload sprays or fuzzing, encapsulate the entire spraying loop inside a single python tool call when you are writing Python logic (for example asyncio/aiohttp). Use terminal tool only when invoking an external CLI/fuzzer. Do not issue one tool call per payload.
|
||||
- Favor batch-mode CLI tools (sqlmap, ffuf, nuclei, zaproxy, arjun) where appropriate and check traffic via the proxy when beneficial
|
||||
|
||||
REMINDER: Always close each tool call with </function> before going into the next. Incomplete tool calls will fail.
|
||||
</tool_usage>
|
||||
|
||||
<environment>
|
||||
Docker container with Kali Linux and comprehensive security tools:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user