llm-council
Warn
Audited by Gen Agent Trust Hub on May 12, 2026
Risk Level: MEDIUMCOMMAND_EXECUTIONPROMPT_INJECTIONDATA_EXFILTRATION
Full Analysis
- [COMMAND_EXECUTION]: The
persistToWikifunction inscripts/council.jsperforms dynamic code loading by usingrequire()on a path resolved three levels above the script directory (../../../dist/db/store.js). This behavior executes code from the host filesystem outside of the skill's own package, which is a security risk if the host environment can be manipulated. - [PROMPT_INJECTION]: The skill is vulnerable to indirect prompt injection as it processes untrusted user input and interpolates it directly into prompts for multiple LLMs across three phases. No sanitization or escaping is performed on the input.
- Ingestion points: User-supplied
queryin thecmdRunfunction withinscripts/council.js. - Boundary markers: The prompts use basic text labels like
QUERY:andRESPONSES:, which are insufficient to prevent adversarial input from overriding instructions. - Capability inventory: The script performs network operations using the
httpsmodule and writes files to the user's home directory (~/.pro-workflow/council) and a wiki directory usingfs.writeFileSync. - Sanitization: The code lacks any input validation, escaping, or filtering for the user-provided query or the responses generated by models before they are used in subsequent deliberation phases.
- [DATA_EXFILTRATION]: In
scripts/council.js, the custom provider implementation allows the API base URL to be defined via theLLM_COUNCIL_BASE_URLenvironment variable. If this is configured with a malicious endpoint, the skill will transmit the sensitiveLLM_COUNCIL_API_KEYto that untrusted server during execution.
Audit Metadata