You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**Pattern-based file inclusion/exclusion** using `.saist.include` and `.saist.ignore`
33
-
-**Interactive chat** with your findings
34
-
-**Web server** UI to view results
35
-
-**CSV export** of findings
32
+
-**Pattern-based file inclusion/exclusion** using `.saist.include` and `.saist.ignore`
33
+
-**Project-specific analysis skills** loaded from Markdown files to teach SAIST app routing, authorization, framework conventions, and other local security context
34
+
-**LLM-generated analysis skills** for bootstrapping those files in a separate run
35
+
-**Interactive chat** with your findings
36
+
-**Web server** UI to view results
37
+
-**CSV export** of findings
36
38
-**PDF report**: Generate PDF reports of SAIST findings
| Get a DevSecOps poem |`saist/main.py --llm openai poem`|
77
-
| Scan a local folder |`saist/main.py --llm deepseek filesystem /path/to/code`|
78
-
| Scan a local folder with ollama from within docker|`docker run --network=host -v <folder_path>:/vulnerableapp -v $PWD/reporting:/app/reporting punksecurity/saist --llm ollama --llm-model gemma3:4b fileystem /vulnerableapp`|
78
+
| Get a DevSecOps poem |`saist/main.py --llm openai poem`|
79
+
| Scan a local folder |`saist/main.py --llm deepseek filesystem /path/to/code`|
80
+
| Scan a local folder file-by-file |`saist/main.py --llm deepseek --deep filesystem /path/to/code`|
81
+
| Scan a local folder with ollama from within docker|`docker run --network=host -v <folder_path>:/vulnerableapp -v $PWD/reporting:/app/reporting punksecurity/saist --llm ollama --llm-model gemma3:4b fileystem /vulnerableapp`|
79
82
| Scan a local Git repo |`saist/main.py --llm openai git /path/to/repo`|
80
83
| Scan a local Git repo (branch diff) |`saist/main.py --llm openai git /path/to/repo --ref-for-compare main --ref-to-compare feature-branch`|
81
84
| Scan a GitHub PR (and update the PR) |`saist/main.py --llm anthropic github yourorg/yourrepo 1234 --github-token your-token`|
82
85
| Launch web server to view findings |`saist/main.py --llm deepseek --web filesystem /path/to/code`|
| Scan with docker and export findings as PDF report |`docker run -v <folder_path>:/vulnerableapp -v $PWD/reporting:/app/reporting punksecurity/saist --llm openai --pdf filesystem /vulnerableapp`|
| Scan with docker and export findings as PDF report |`docker run -v <folder_path>:/vulnerableapp -v $PWD/reporting:/app/reporting punksecurity/saist --llm openai --pdf filesystem /vulnerableapp`|
86
90
| Scan with docker and export findings as PDF report with a project title |`docker run -v <folder_path>:/vulnerableapp -v $PWD/reporting:/app/reporting punksecurity/saist --llm openai --pdf --project-name "Project Name" filesystem /vulnerableapp`|
87
91
| Scan with docker and retain cache for future runs |`docker run -v <folder_path>:/vulnerableapp -v $PWD/SAISTCache:/app/SAISTCache punksecurity/saist --llm openai filesystem /vulnerableapp`|
@@ -106,7 +110,7 @@ saist respects **file include/exclude rules** via two optional files in the root
106
110
-`build/` will ignore the entire build folder
107
111
-`*.log` will ignore all log files
108
112
109
-
You can also provide include/exclude patterns using the command-line arguments `--include` and `--exclude`.
113
+
You can also provide include/exclude patterns using the command-line arguments `--include` and `--exclude`.
110
114
- Patterns provided via command-line arguments are appended to any patterns loaded from the rule files.
111
115
- Examples:
112
116
-`--include '**/*.py' --include '**/*.ts'` includes all Python and TypeScript files
@@ -132,23 +136,51 @@ docs/
132
136
This setup will:
133
137
- Only scan `.py`, `.ts`, and specific `.js` files
134
138
- Ignore anything under `tests/` and `docs/`
135
-
---
136
-
137
-
138
-
## 📄 PDF report generation
139
+
---
140
+
141
+
## 🧠 Analysis Skills
142
+
143
+
SAIST can load project-specific analysis skill files from `.saist/skills/*.md`. These files are added to the security review prompt so future scans understand application-specific details such as routing, authentication, authorization, framework conventions, data access, validation boundaries, dependencies, configuration, and security-sensitive workflows.
144
+
145
+
Generate an initial set of skill files as a separate run:
|`--llm-model`| (Optional) Specific model (e.g., `gpt-4o`) |
207
+
|`--thinking`| Pydantic AI thinking effort: `minimal`, `low`, `medium`, `high`, `xhigh`, or `disabled`|
208
+
|`--openai-base-uri`| Base URI for OpenAI-compatible services. Can also be set with `SAIST_OPENAI_BASE_URI`. |
209
+
|`--azure-openai-endpoint`| Azure AI Foundry or Azure OpenAI endpoint. Can also be set with `AZURE_OPENAI_ENDPOINT`; `/openai/v1/` endpoints use the Responses API without `api-version`. |
210
+
|`--azure-openai-api-version`| Azure OpenAI API version for non-v1 endpoints. Can also be set with `OPENAI_API_VERSION`. |
211
+
|`--interactive`| Chat with the LLM after scan |
212
+
|`--web`| Launch a local web server |
213
+
|`--disable-tools`| Disable tool use during file analysis to reduce LLM token usage |
214
+
|`--deep`| For filesystem scans, analyze every file individually. Without this, filesystem scans send a file inventory and let the LLM inspect files with tools, then report file coverage. |
215
+
|`--iterations`| Number of tool-driven filesystem scan passes to run when `--deep` is not set. Defaults to `1`; concurrency is capped by `--llm-rate-limit`. |
0 commit comments