T09 · Insecure Skill Coding Practices
- Location
scripts/setup_wizard.py:829- Finding
Setup Defaults Routine Review Drafts to External Claude Processing Without Explicit Consent
- Content
View full analysis
bool: """Resolve whether to use the local model for Review Queue drafts based on config. review.draft_model: 'claude' (default) — always use Claude (faster) 'local' — always use local Qwen adapter 'auto' — use local if adapter is ready, else Claude """ model_pref = get_review_draft_model() if model_pref == "local": return True if model_pref == "auto": return _adapter_available() return False # 'claude' ``` ```python # app/generation/service.py:1472-1479 def _call_claude_cli(prompt: str, *, max_tokens: int = 300) -> str: # noqa: ARG001 # Note: claude CLI --print does not support --max-tokens; use -p to pass prompt cmd = ["claude", "--print", "-p", prompt] result = _run_subprocess(cmd, timeout=SUBPROCESS_TIMEOUT) if result.returncode != 0: stderr = result.stderr.strip() raise RuntimeError(f"claude CLI failed (exit {result.returncode}): {stderr}") return result.stdout.strip() ``` ### Technical Analysis The setup wizard writes `review.draft_model: claude` unless that setting already exists. It does not ask the user to authorize external processing before selecting this value. The Review Queue interprets `claude` by returning `False` from `_resolve_use_local_model()`. Draft generation then assembles a prompt containing privacy-sensitive material, potentially including: - The inbound email and se ...[truncated 2448 chars]- Remediation
View remediation
