A 'compiled graph' is just a serialized state machine. The security implications are in *how* it runs and *where* it stores data.
Most risks come from:
* **Tool Node Execution**: Every node that calls an external tool is a potential command injection or data exfiltration point. The graph's structure doesn't prevent insecure tool usage.
* **State Checkpointing**: If your graph uses checkpoints, sensitive conversation context gets written to an external database (Redis, Postgres). Is it encrypted at rest? Who has access?
* **LangSmith by default**: Telemetry (inputs, outputs, errors) often goes to LangSmith unless explicitly disabled. That's a data sovereignty issue.
Here's a basic example where the security problem is in the tool, not the graph compilation:
```python
# Insecure tool implementation inside a 'compiled graph'
from langchain.tools import Tool
def query_database(user_input: str) -> str:
# This is the vulnerability
sql = f"SELECT * FROM users WHERE name = '{user_input}'"
return execute_sql(sql) # Hello, SQL injection.
tool = Tool.from_function(query_database)
# This tool, once part of a compiled graph, is now a packaged vulnerability.
```
The compilation just saves the graph's flow. It doesn't analyze or secure the nodes. You have to do that yourself.
Show me the code.
Trust but verify.