Context
The scanner uses AST analysis to find LLM call sites. There are known patterns it cannot detect, and these should be explicitly tested and documented as known limitations.
Known gaps (not currently tested)
- Aliased imports: `import openai as ai; ai.OpenAI().chat.completions.create(...)`
- Variable assignment chains: `Chat = client.chat; Chat.completions.create(...)`
- Wrapper functions: `def my_llm(prompt): return client.chat.completions.create(...)`
- Dynamic dispatch: `getattr(client, "chat").completions.create(...)`
- import patterns: `provider = import("openai")`
- Async wrappers: Custom async decorators wrapping SDK calls
- Cross-file instrumentation: patch() in one file, SDK call in another
What to build
Priority
Post-launch. The scanner already catches 202 high-confidence and 903 total findings across real repos. Evasion patterns are edge cases that matter for completeness, not for the initial value proposition.
Context
The scanner uses AST analysis to find LLM call sites. There are known patterns it cannot detect, and these should be explicitly tested and documented as known limitations.
Known gaps (not currently tested)
What to build
Priority
Post-launch. The scanner already catches 202 high-confidence and 903 total findings across real repos. Evasion patterns are edge cases that matter for completeness, not for the initial value proposition.