@jigyasudham/veto 2.0.2 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +391 -320
  2. package/dist/agents/executor.d.ts.map +1 -1
  3. package/dist/agents/executor.js +3 -1
  4. package/dist/agents/executor.js.map +1 -1
  5. package/dist/agents/llm-runner.d.ts.map +1 -1
  6. package/dist/agents/llm-runner.js +62 -58
  7. package/dist/agents/llm-runner.js.map +1 -1
  8. package/dist/cli.js +148 -4
  9. package/dist/cli.js.map +1 -1
  10. package/dist/log.d.ts +9 -0
  11. package/dist/log.d.ts.map +1 -0
  12. package/dist/log.js +33 -0
  13. package/dist/log.js.map +1 -0
  14. package/dist/memory/config.d.ts +1 -0
  15. package/dist/memory/config.d.ts.map +1 -1
  16. package/dist/memory/config.js +3 -2
  17. package/dist/memory/config.js.map +1 -1
  18. package/dist/memory/local.d.ts.map +1 -1
  19. package/dist/memory/local.js +3 -1
  20. package/dist/memory/local.js.map +1 -1
  21. package/dist/memory/schema.d.ts +1 -1
  22. package/dist/memory/schema.d.ts.map +1 -1
  23. package/dist/memory/schema.js +1 -0
  24. package/dist/memory/schema.js.map +1 -1
  25. package/dist/router/learning-updater.d.ts +4 -1
  26. package/dist/router/learning-updater.d.ts.map +1 -1
  27. package/dist/router/learning-updater.js +10 -0
  28. package/dist/router/learning-updater.js.map +1 -1
  29. package/dist/server/handlers/advisors.d.ts +3 -0
  30. package/dist/server/handlers/advisors.d.ts.map +1 -0
  31. package/dist/server/handlers/advisors.js +331 -0
  32. package/dist/server/handlers/advisors.js.map +1 -0
  33. package/dist/server/handlers/agents.d.ts +3 -0
  34. package/dist/server/handlers/agents.d.ts.map +1 -0
  35. package/dist/server/handlers/agents.js +202 -0
  36. package/dist/server/handlers/agents.js.map +1 -0
  37. package/dist/server/handlers/core.d.ts +3 -0
  38. package/dist/server/handlers/core.d.ts.map +1 -0
  39. package/dist/server/handlers/core.js +169 -0
  40. package/dist/server/handlers/core.js.map +1 -0
  41. package/dist/server/handlers/council.d.ts +3 -0
  42. package/dist/server/handlers/council.d.ts.map +1 -0
  43. package/dist/server/handlers/council.js +277 -0
  44. package/dist/server/handlers/council.js.map +1 -0
  45. package/dist/server/handlers/devtools.d.ts +3 -0
  46. package/dist/server/handlers/devtools.d.ts.map +1 -0
  47. package/dist/server/handlers/devtools.js +41 -0
  48. package/dist/server/handlers/devtools.js.map +1 -0
  49. package/dist/server/handlers/generators.d.ts +3 -0
  50. package/dist/server/handlers/generators.d.ts.map +1 -0
  51. package/dist/server/handlers/generators.js +541 -0
  52. package/dist/server/handlers/generators.js.map +1 -0
  53. package/dist/server/handlers/git.d.ts +3 -0
  54. package/dist/server/handlers/git.d.ts.map +1 -0
  55. package/dist/server/handlers/git.js +225 -0
  56. package/dist/server/handlers/git.js.map +1 -0
  57. package/dist/server/handlers/learning.d.ts +3 -0
  58. package/dist/server/handlers/learning.d.ts.map +1 -0
  59. package/dist/server/handlers/learning.js +60 -0
  60. package/dist/server/handlers/learning.js.map +1 -0
  61. package/dist/server/handlers/memory.d.ts +3 -0
  62. package/dist/server/handlers/memory.d.ts.map +1 -0
  63. package/dist/server/handlers/memory.js +181 -0
  64. package/dist/server/handlers/memory.js.map +1 -0
  65. package/dist/server/handlers/observability.d.ts +3 -0
  66. package/dist/server/handlers/observability.d.ts.map +1 -0
  67. package/dist/server/handlers/observability.js +132 -0
  68. package/dist/server/handlers/observability.js.map +1 -0
  69. package/dist/server/handlers/review.d.ts +3 -0
  70. package/dist/server/handlers/review.d.ts.map +1 -0
  71. package/dist/server/handlers/review.js +334 -0
  72. package/dist/server/handlers/review.js.map +1 -0
  73. package/dist/server/handlers/session.d.ts +3 -0
  74. package/dist/server/handlers/session.d.ts.map +1 -0
  75. package/dist/server/handlers/session.js +272 -0
  76. package/dist/server/handlers/session.js.map +1 -0
  77. package/dist/server/handlers/watch.d.ts +3 -0
  78. package/dist/server/handlers/watch.d.ts.map +1 -0
  79. package/dist/server/handlers/watch.js +29 -0
  80. package/dist/server/handlers/watch.js.map +1 -0
  81. package/dist/server/handlers/workers.d.ts +3 -0
  82. package/dist/server/handlers/workers.d.ts.map +1 -0
  83. package/dist/server/handlers/workers.js +27 -0
  84. package/dist/server/handlers/workers.js.map +1 -0
  85. package/dist/server/registry.d.ts +11 -0
  86. package/dist/server/registry.d.ts.map +1 -0
  87. package/dist/server/registry.js +9 -0
  88. package/dist/server/registry.js.map +1 -0
  89. package/dist/server/runtime.d.ts +49 -0
  90. package/dist/server/runtime.d.ts.map +1 -0
  91. package/dist/server/runtime.js +81 -0
  92. package/dist/server/runtime.js.map +1 -0
  93. package/dist/server/scan-core.d.ts +32 -0
  94. package/dist/server/scan-core.d.ts.map +1 -0
  95. package/dist/server/scan-core.js +82 -0
  96. package/dist/server/scan-core.js.map +1 -0
  97. package/dist/server.d.ts +1 -1
  98. package/dist/server.d.ts.map +1 -1
  99. package/dist/server.js +64 -2946
  100. package/dist/server.js.map +1 -1
  101. package/dist/tools/definitions.d.ts +4 -4
  102. package/dist/tools/definitions.js +4 -4
  103. package/dist/tools/definitions.js.map +1 -1
  104. package/package.json +2 -2
  105. package/AGENTS.md +0 -134
package/README.md CHANGED
@@ -1,320 +1,391 @@
1
- # veto
2
-
3
- > **62 agentic tools. 50+ specialists. 4 AIs. Self-learning. Zero cost.**
4
-
5
- An MCP server that runs locally on your machine, plugs into Claude Code, Codex CLI, Gemini CLI, Antigravity CLI, Cursor, Windsurf, Zed, and JetBrains using your existing subscriptions — giving every AI a council of specialist agents, local LLM support, SDD agents, playwright automation, persistent cross-platform memory, a self-learning router, CI/CD gates, workspace discovery, and bidirectional IDE communication.
6
-
7
- > **Billing note:** "Zero cost" applies to subscription plans (Claude Max, Gemini Advanced, etc.). If you are on API/pay-per-token billing, MCP Sampling calls made by Veto agents will count toward your token usage. `veto init` detects API key environment variables and warns you automatically.
8
-
9
- ---
10
-
11
- ## How the Agents Work
12
-
13
- **Every tool uses a 2-phase agentic loop — no API keys required, zero extra cost.**
14
-
15
- ### Phase 1 — MCP Sampling
16
- The tool attempts real LLM reasoning via MCP Sampling (`server.createMessage`). If your client supports it, the agent reasons deeply and returns a structured plan or analysis.
17
-
18
- ### Phase 2 — Agentic Fallback
19
- If Sampling is unavailable, Veto returns an `llm_upgrade` prompt. The host AI reads the specialist's role, performs the reasoning itself, and passes the JSON response back to complete the operation.
20
-
21
- Every worker agent supports both modes. When multiple agents run, they execute in parallel. LLM calls delegate back to the AI you're already using — no extra billing.
22
-
23
- ---
24
-
25
- ## Specialist Roles
26
-
27
- | Agent Group | Specialist Roles |
28
- |---|---|
29
- | **Council** | Lead Dev · PM · Architect · UX · Devil's Advocate · Legal · Security |
30
- | **Development** | Coder · Reviewer · Tester · Debugger · Refactor · Database · API · Frontend · Backend · DevOps · Performance · Migration |
31
- | **Advanced** | Local LLM (Ollama) · Semantic Search · SDD Agent · Playwright · i18n Translate · a11y Advisor |
32
- | **Intelligence** | Task Planner · Researcher · Tech Advisor · Risk Assessor · Cost Analyzer · Ethics/Bias |
33
- | **Workflow** | File Manager · Git Agent · Search Agent · Reporter · Automation |
34
-
35
- **Development (12)**
36
- `Coder` · `Code Reviewer` · `Tester` · `Debugger` · `Refactor` · `Database` · `API` · `Frontend` · `Backend` · `DevOps` · `Performance` · `Migration`
37
-
38
- **Security (6)**
39
- `Security Scanner` · `Auth Agent` · `Data Privacy` · `Secrets Agent` · `Dependency Audit` · `Penetration Tester`
40
-
41
- **Memory (5)**
42
- `Context Manager` · `Decision Logger` · `Project Mapper` · `Pattern Learner` · `Knowledge Base`
43
-
44
- **Research (7)**
45
- `Researcher` · `Tech Advisor` · `Cost Analyzer` · `Competitor Analyzer` · `Risk Assessor` · `Estimator` · `Ethics & Bias`
46
-
47
- **Quality (5)**
48
- `Code Quality` · `Documentation` · `Accessibility` · `Compatibility` · `Error Handling`
49
-
50
- **Workflow (7)**
51
- `Task Planner` · `Task Coordinator` · `File Manager` · `Git Agent` · `Search Agent` · `Reporter` · `Automation`
52
-
53
- ---
54
-
55
- ## MCP Tools (62)
56
-
57
- | Category | Tools |
58
- |---|---|
59
- | **Session** | `veto_status` · `veto_session_save` · `veto_session_restore` · `veto_sessions_list` · `veto_autosave_status` · `veto_session_replay` |
60
- | **Router** | `veto_route_task` · `veto_rate_status` |
61
- | **Council** | `veto_council_debate` · `veto_benchmark` · `veto_adr` |
62
- | **Agents** | `veto_agent_plan` · `veto_execute_parallel` · `veto_explain` · `veto_compose_agents` · `veto_delegate` |
63
- | **Review** | `veto_code_review` · `veto_security_scan` · `veto_secrets_scan` · `veto_diff_review` · `veto_full_review` · `veto_pr_review` |
64
- | **Pipelines** | `veto_pre_commit` · `veto_new_feature` · `veto_workflow` · `veto_task_parse` |
65
- | **Advanced** | `veto_local_llm` · `veto_semantic_search` · `veto_sdd_agent` · `veto_playwright` · `veto_notify_ide` |
66
- | **Quality** | `veto_clone_detector` · `veto_lint_rules` · `veto_api_contract` · `veto_a11y_advisor` · `veto_type_coverage` · `veto_test_gaps` |
67
- | **Watching** | `veto_watch` · `veto_watch_poll` · `veto_watch_stop` |
68
- | **Memory** | `veto_memory_store` · `veto_memory_search` · `veto_memory_delete` · `veto_project_map_update` · `veto_project_map_get` · `veto_pattern_store` · `veto_patterns_list` · `veto_memory_export` · `veto_memory_import` |
69
- | **Learning** | `veto_record_outcome` · `veto_learning_stats` · `veto_learning_apply` |
70
- | **Handoff** | `veto_handoff` · `veto_continue` · `veto_platform_setup` |
71
- | **Observability** | `veto_usage_status` · `veto_audit_log` · `veto_health` · `veto_metrics` |
72
- | **Discover** | `veto_discover` · `veto_summarize` · `veto_git_blame` · `veto_changelog` · `veto_onboard` · `veto_debt_register` |
73
- | **DevTools** | `veto_docs_fetch` · `veto_context_status` · `veto_openapi_gen` · `veto_flag_auditor` · `veto_env_setup` · `veto_commit_message` · `veto_pr_description` · `veto_pr_post` · `veto_prompt_optimizer` · `veto_sre_advisor` · `veto_diagram` · `veto_rca` · `veto_translate` · `veto_merge_conflict` |
74
- | **Plugins** | `veto_plugins` |
75
-
76
- ## MCP Resources
77
-
78
- | URI | What it returns |
79
- |---|---|
80
- | `veto://sessions` | All saved sessions across platforms |
81
- | `veto://project-map?dir=<path>` | Stored project structure map |
82
- | `veto://memory?q=<query>` | Knowledge base search results |
83
- | `veto://patterns` | Learned coding patterns |
84
-
85
- ## MCP Prompts
86
-
87
- | Prompt | What it does |
88
- |---|---|
89
- | `code-review` | Full code review — paste code, get scored findings |
90
- | `security-audit` | OWASP Top 10 scan with CWE references |
91
- | `deploy-checklist` | Council reviews your deployment plan before you ship |
92
- | `explain-file` | Expert explanation of any file, auto-routed by type |
93
-
94
- ---
95
-
96
- ## CLI Commands
97
-
98
- ```bash
99
- veto init # Configure all AI tools + scan project
100
- veto doctor # Check MCP registrations + system health
101
- veto status # Version, DB path, session/memory/outcome counts
102
- veto version # Alias for veto status
103
- veto sessions # List last 20 saved sessions ([auto] badge on auto-saves)
104
- veto sessions --clean # Remove auto-saves older than 7 days
105
- veto memory [query] # Search knowledge base (blank = all entries)
106
- veto patterns [prefix] # List learned agent/routing patterns
107
- veto hook install # Install pre-commit secrets scan hook
108
- veto hook remove # Remove the veto pre-commit hook
109
- veto check # Scan staged changes for secrets (used by hook)
110
- veto help # Commands + MCP tools reference
111
- veto help --troubleshoot # Full troubleshooting guide
112
- ```
113
-
114
- ### `veto doctor`
115
-
116
- ```
117
- veto doctor
118
-
119
- Veto Doctor — system health check
120
- ─────────────────────────────────────────────────────
121
- Node.js v22.5.0
122
- ~/.veto exists
123
- Database ~/.veto/veto.db
124
- 17 sessions · 12 memories · 3 patterns
125
-
126
- MCP Registrations
127
- ─────────────────────────────────────────────────────
128
- ✓ Claude Code — registered
129
- Gemini CLIregistered
130
- Antigravity CLI registered
131
- · Codex CLI not installed
132
- · Zed not installed
133
-
134
- ✓ All checks passed — Veto is healthy!
135
- ```
136
-
137
- ---
138
-
139
- ## Council Debate
140
-
141
- Two-phase flow — works on Claude Code, Gemini CLI, Antigravity CLI, and Codex CLI with no API keys:
142
-
143
- ```
144
- # Phase 1 call with task, get instant deterministic result + LLM upgrade prompt
145
- veto_council_debate {
146
- task: "migrate auth from sessions to JWTs",
147
- project_dir: "/your/project",
148
- strictness: "standard"
149
- }
150
- {
151
- llm_backed: false,
152
- final_verdict: "YELLOW",
153
- votes: { lead_dev: {...}, architect: {...}, security: {...}, ... },
154
- llm_upgrade: {
155
- available: true,
156
- instruction: "Read debate_prompt, reason as all 7 agents, call again with agent_responses",
157
- debate_prompt: "You are running a Veto Council debate. Analyze the task as each specialist..."
158
- }
159
- }
160
-
161
- # Phase 2 — reason as all 7 agents, pass responses back → get LLM-backed verdict
162
- veto_council_debate {
163
- task: "migrate auth from sessions to JWTs",
164
- agent_responses: {
165
- lead_dev: { verdict: "warn", reason: "Stateless JWTs complicate logout — need blocklist", concerns: ["Refresh token rotation must be atomic"], recommendation: "Use short-lived access tokens (15m) + httpOnly refresh tokens" },
166
- pm: { verdict: "approve", reason: "JWT migration unblocks mobile clients", concerns: [], recommendation: "Ship behind a feature flag, roll back if logout issues" },
167
- architect: { verdict: "approve", reason: "Good fit for stateless microservice boundary", concerns: ["Clock skew can break expiry across services"], recommendation: "Add NTP sync check; use relative expiry not absolute timestamps" },
168
- ux: { verdict: "approve", reason: "No user-visible change if migration is seamless", concerns: [], recommendation: "Silent migration no logout required for existing sessions" },
169
- devil: { verdict: "warn", reason: "What if the refresh token store goes down at 2AM?", concerns: ["Redis outage = all users logged out"], recommendation: "Fallback to session auth if Redis is down; use short rotation window" },
170
- legal: { verdict: "approve", reason: "JWTs are industry standard, no new compliance risk", concerns: [], recommendation: "Document token storage in privacy policy" },
171
- security: { verdict: "warn", reason: "Refresh token rotation must be atomic TOCTOU risk", concerns: ["localStorage storage of access token is XSS-vulnerable"], recommendation: "Store access token in memory only; refresh token in httpOnly Secure SameSite=Strict cookie" }
172
- }
173
- }
174
- {
175
- llm_backed: true,
176
- final_verdict: "YELLOW",
177
- warnings: ["Refresh token rotation must be atomic...", "What if the refresh token store goes down..."],
178
- recommended: "Proceed with JWT. Use httpOnly cookies for refresh tokens, memory-only for access tokens..."
179
- }
180
- ```
181
-
182
- ### Council `strictness`
183
-
184
- ```
185
- veto_council_debate { task: "...", strictness: "fast" } # 3 agents, instant
186
- veto_council_debate { task: "...", strictness: "standard" } # 7 agents, default
187
- veto_council_debate { task: "...", strictness: "strict" } # 7 + devil rebuttal
188
- ```
189
-
190
- ---
191
-
192
- ## Session Tagging + Search
193
-
194
- ```
195
- veto_session_save {
196
- auto_summarize: true,
197
- tags: ["auth", "jwt", "middleware"]
198
- }
199
-
200
- veto_sessions_list { query: "auth" }
201
- sessions matching "auth" in summary, context, tags, or project_dir
202
- ```
203
-
204
- Token usage is manually reported — pass `token_count` to `veto_status` or `veto_session_save` and Veto stores it per platform per day. `veto_rate_status` shows what you've reported; nothing is counted automatically.
205
-
206
- ---
207
-
208
- ## Workspace Discovery
209
-
210
- ```
211
- veto_discover { "project_dir": "/your/project" }
212
- → {
213
- git: { branch: "main", commit: "a3f2b1", dirty_files: [], recent_commits: [...] },
214
- ecosystems: { node: "my-app v2.1.0" },
215
- tech_stack: ["TypeScript", "React", "Prisma"],
216
- key_files: ["tsconfig.json", "prisma/schema.prisma", ".env.example"],
217
- total_files: 142
218
- }
219
- ```
220
-
221
- ---
222
-
223
- ## Diff Review
224
-
225
- ```
226
- veto_diff_review { project_dir: "/your/project" }
227
- {
228
- verdict: "warn",
229
- files_changed: 4,
230
- code_review: { score: 78, critical: 0, high: 2, findings: [...] },
231
- security: { score: 91, critical: 0, high: 0, findings: [...] },
232
- secrets: { findings: [] },
233
- summary: "⚠️ WARN — 4 file(s) changed..."
234
- }
235
- ```
236
-
237
- ---
238
-
239
- ## Sequential Pipelines
240
-
241
- ```
242
- veto_workflow {
243
- steps: [
244
- { id: "code", agent: "coder", task: "implement auth middleware", gate: 70 },
245
- { id: "review", agent: "reviewer", task: "review the implementation", gate: 75 },
246
- { id: "security", agent: "security-scanner", task: "scan for vulnerabilities", gate: 80 },
247
- { id: "test", agent: "tester", task: "write test cases" }
248
- ],
249
- project_dir: "/your/project"
250
- }
251
- { verdict: "passed", steps_passed: 4, steps_failed: 0, results: [...] }
252
- ```
253
-
254
- ---
255
-
256
- ## Self-Learning Router
257
-
258
- Every agent tool auto-records a quality signal when it completes. After any working session, `veto_learning_stats` shows live data and `veto_learning_apply` adjusts tier thresholds automatically after ~20 calls.
259
-
260
- ```bash
261
- veto_route_task { task: "debug auth issue", file_ext: ".ts" }
262
- → { ..., recommended_agent: "debugger" } # ← predicted from history
263
- ```
264
-
265
- ---
266
-
267
- ## Plugin System
268
-
269
- ```js
270
- // ~/.veto/agents/my-agent.js
271
- export function plan(task, context) {
272
- return {
273
- agent: 'my-agent', task, tier: 2,
274
- approach: 'Your custom approach...',
275
- steps: ['Step 1', 'Step 2'],
276
- checklist: ['[ ] Check 1'],
277
- pitfalls: ['Pitfall 1'],
278
- patterns: ['Pattern 1'],
279
- duration_estimate: '1-2 hours',
280
- };
281
- }
282
- ```
283
-
284
- ---
285
-
286
- ## Cross-Platform Handoff
287
-
288
- ```
289
- Claude at 90% → veto_handoff { summary, context }
290
- Open Gemini → veto_continue { resuming_as: "gemini" }
291
- Full context restored. Continue exactly where you stopped.
292
- ```
293
-
294
- Platform switching is manual — Veto surfaces which platform has budget remaining via `veto_rate_status`, you decide when to switch.
295
-
296
- | Platform | Support |
297
- |---|---|
298
- | Claude Code | Native MCP |
299
- | Gemini CLI | ✅ MCP support |
300
- | Antigravity CLI | ✅ MCP support |
301
- | Codex CLI | MCP support |
302
- | Cursor | MCP support |
303
- | Windsurf | ✅ MCP support |
304
- | Zed | ✅ MCP support (`context_servers`) |
305
-
306
- ---
307
-
308
- ## Tech Stack
309
-
310
- - **Language:** TypeScript (strict mode)
311
- - **Runtime:** Node.js 22.5+ (built-in `node:sqlite` — no native compilation)
312
- - **Dependencies:** `@modelcontextprotocol/sdk` only — one package, zero native addons
313
- - **Memory:** Local SQLite — zero config, works offline, portable via JSON export
314
- - **Platforms:** Claude Code · Gemini CLI · Antigravity CLI · Codex CLI · Cursor · Windsurf · Zed
315
-
316
- ---
317
-
318
- ## License
319
-
320
- MIT © 2026 Jigyasu Dham
1
+ # veto
2
+
3
+ > **89 agentic tools. 49 specialists. Every major AI CLI. Self-learning. Zero extra cost on subscriptions.**
4
+
5
+ An MCP server that runs locally on your machine, plugs into Claude Code, Codex CLI, Gemini CLI, Antigravity CLI, Cursor, Windsurf, Zed, and JetBrains using your existing subscriptions — giving every AI a council of specialist agents, local LLM support, SDD agents, playwright automation, persistent cross-platform memory, a self-learning router that re-tunes its tier thresholds automatically every 20 recorded task outcomes (reviews record outcomes for you; configurable via `auto_apply_learning`), CI/CD gates, workspace discovery, and bidirectional IDE communication.
6
+
7
+ > **Billing note:** "Zero cost" applies to subscription plans (Claude Max, Gemini Advanced, etc.). If you are on API/pay-per-token billing, MCP Sampling calls made by Veto agents will count toward your token usage. `veto init` detects API key environment variables and warns you automatically.
8
+
9
+ ---
10
+
11
+ ## How the Agents Work
12
+
13
+ **Every tool uses a 2-phase agentic loop — no API keys required, zero extra cost.**
14
+
15
+ ### Phase 1 — MCP Sampling
16
+ The tool attempts real LLM reasoning via MCP Sampling (`server.createMessage`). If your client supports it, the agent reasons deeply and returns a structured plan or analysis.
17
+
18
+ ### Phase 2 — Agentic Fallback
19
+ If Sampling is unavailable, Veto returns an `llm_upgrade` prompt. The host AI reads the specialist's role, performs the reasoning itself, and passes the JSON response back to complete the operation.
20
+
21
+ Every worker agent supports both modes. When multiple agents run, they execute in parallel. LLM calls delegate back to the AI you're already using — no extra billing.
22
+
23
+ ---
24
+
25
+ ## Specialist Roles
26
+
27
+ | Agent Group | Specialist Roles |
28
+ |---|---|
29
+ | **Council** | Lead Dev · PM · Architect · UX · Devil's Advocate · Legal · Security |
30
+ | **Development** | Coder · Reviewer · Tester · Debugger · Refactor · Database · API · Frontend · Backend · DevOps · Performance · Migration |
31
+ | **Advanced** | Local LLM (Ollama) · Semantic Search · SDD Agent · Playwright · i18n Translate · a11y Advisor |
32
+ | **Intelligence** | Task Planner · Researcher · Tech Advisor · Risk Assessor · Cost Analyzer · Ethics/Bias |
33
+ | **Workflow** | File Manager · Git Agent · Search Agent · Reporter · Automation |
34
+
35
+ **Development (12)**
36
+ `Coder` · `Code Reviewer` · `Tester` · `Debugger` · `Refactor` · `Database` · `API` · `Frontend` · `Backend` · `DevOps` · `Performance` · `Migration`
37
+
38
+ **Security (6)**
39
+ `Security Scanner` · `Auth Agent` · `Data Privacy` · `Secrets Agent` · `Dependency Audit` · `Penetration Tester`
40
+
41
+ **Memory (5)**
42
+ `Context Manager` · `Decision Logger` · `Project Mapper` · `Pattern Learner` · `Knowledge Base`
43
+
44
+ **Research (7)**
45
+ `Researcher` · `Tech Advisor` · `Cost Analyzer` · `Competitor Analyzer` · `Risk Assessor` · `Estimator` · `Ethics & Bias`
46
+
47
+ **Quality (5)**
48
+ `Code Quality` · `Documentation` · `Accessibility` · `Compatibility` · `Error Handling`
49
+
50
+ **Workflow (7)**
51
+ `Task Planner` · `Task Coordinator` · `File Manager` · `Git Agent` · `Search Agent` · `Reporter` · `Automation`
52
+
53
+ ---
54
+
55
+ ## MCP Tools (89)
56
+
57
+ | Category | Tools |
58
+ |---|---|
59
+ | **Session** | `veto_status` · `veto_session_save` · `veto_session_restore` · `veto_sessions_list` · `veto_autosave_status` · `veto_session_replay` |
60
+ | **Router** | `veto_route_task` · `veto_rate_status` |
61
+ | **Council** | `veto_council_debate` · `veto_benchmark` · `veto_adr` |
62
+ | **Agents** | `veto_agent_plan` · `veto_execute_parallel` · `veto_explain` · `veto_compose_agents` · `veto_delegate` |
63
+ | **Review** | `veto_code_review` · `veto_security_scan` · `veto_secrets_scan` · `veto_diff_review` · `veto_full_review` · `veto_pr_review` |
64
+ | **Pipelines** | `veto_pre_commit` · `veto_new_feature` · `veto_workflow` · `veto_task_parse` |
65
+ | **Advanced** | `veto_local_llm` · `veto_semantic_search` · `veto_sdd_agent` · `veto_playwright` · `veto_notify_ide` |
66
+ | **Quality** | `veto_clone_detector` · `veto_lint_rules` · `veto_api_contract` · `veto_a11y_advisor` · `veto_type_coverage` · `veto_test_gaps` |
67
+ | **Watching** | `veto_watch` · `veto_watch_poll` · `veto_watch_stop` |
68
+ | **Memory** | `veto_memory_store` · `veto_memory_search` · `veto_memory_delete` · `veto_project_map_update` · `veto_project_map_get` · `veto_pattern_store` · `veto_patterns_list` · `veto_memory_export` · `veto_memory_import` |
69
+ | **Learning** | `veto_record_outcome` · `veto_learning_stats` · `veto_learning_apply` |
70
+ | **Handoff** | `veto_handoff` · `veto_continue` · `veto_platform_setup` |
71
+ | **Observability** | `veto_usage_status` · `veto_audit_log` · `veto_health` · `veto_metrics` |
72
+ | **Discover** | `veto_discover` · `veto_summarize` · `veto_git_blame` · `veto_changelog` · `veto_onboard` · `veto_debt_register` |
73
+ | **DevTools** | `veto_docs_fetch` · `veto_context_status` · `veto_openapi_gen` · `veto_flag_auditor` · `veto_env_setup` · `veto_commit_message` · `veto_pr_description` · `veto_pr_post` · `veto_prompt_optimizer` · `veto_sre_advisor` · `veto_diagram` · `veto_rca` · `veto_translate` · `veto_merge_conflict` |
74
+ | **Plugins** | `veto_plugins` |
75
+
76
+ ## Which tool do I use?
77
+
78
+ Several tools overlap by design (different granularity or entry point). Quick guide:
79
+
80
+ **Reviewing code**
81
+
82
+ | You have… | Use | Note |
83
+ |---|---|---|
84
+ | A snippet or single file in hand | `veto_code_review` | not `veto_diff_review`, which reads a git diff |
85
+ | Uncommitted/changed files (git diff) | `veto_diff_review` | code + security + secrets scans in parallel |
86
+ | To gate a commit (hard-block on secrets) | `veto_pre_commit` | tuned for commit-time |
87
+ | To gate CI (exit code + pass/warn/fail) | `veto_ci_gate` | for GitHub Actions / GitLab CI |
88
+ | A deeper pre-merge/pre-ship pass (+ quality) | `veto_full_review` | richer than `veto_diff_review` |
89
+ | A GitHub PR by number/URL | `veto_pr_review` | fetches the diff, returns postable comments |
90
+
91
+ **Remembering things**
92
+
93
+ | Want to… | Use |
94
+ |---|---|
95
+ | Save/recall a solution, decision, or reference | `veto_memory_store` / `veto_memory_search` |
96
+ | Track a recurring code convention | `veto_pattern_store` / `veto_patterns_list` |
97
+ | Navigate the codebase without scanning the filesystem | `veto_project_map_get` (refresh via `veto_project_map_update`) |
98
+
99
+ **Running multi-step work**
100
+
101
+ | Want to… | Use |
102
+ |---|---|
103
+ | Run several agents at once on one task | `veto_execute_parallel` |
104
+ | Run a sequential pipeline with pass/fail gates | `veto_workflow` |
105
+ | Turn a PRD / plain English into a task DAG | `veto_task_parse` (feeds `veto_workflow`) |
106
+ | Plan a new feature end-to-end (council → plan → tasks) | `veto_new_feature` |
107
+
108
+ **Sessions**
109
+
110
+ | Want to… | Use |
111
+ |---|---|
112
+ | Resume work with full saved context | `veto_session_restore` (or `veto_continue` for the latest) |
113
+ | See the event / tool-call timeline of a session | `veto_session_replay` |
114
+ | Move work to another AI tool | `veto_handoff` `veto_continue` |
115
+
116
+ ## MCP Resources
117
+
118
+ | URI | What it returns |
119
+ |---|---|
120
+ | `veto://sessions` | All saved sessions across platforms |
121
+ | `veto://project-map?dir=<path>` | Stored project structure map |
122
+ | `veto://memory?q=<query>` | Knowledge base search results |
123
+ | `veto://patterns` | Learned coding patterns |
124
+
125
+ ## MCP Prompts
126
+
127
+ | Prompt | What it does |
128
+ |---|---|
129
+ | `code-review` | Full code review paste code, get scored findings |
130
+ | `security-audit` | OWASP Top 10 scan with CWE references |
131
+ | `deploy-checklist` | Council reviews your deployment plan before you ship |
132
+ | `explain-file` | Expert explanation of any file, auto-routed by type |
133
+
134
+ ---
135
+
136
+ ## CLI Commands
137
+
138
+ ```bash
139
+ veto init # Configure all AI tools + scan project
140
+ veto doctor # Check MCP registrations + system health
141
+ veto status # Version, DB path, session/memory/outcome counts
142
+ veto version # Alias for veto status
143
+ veto sessions # List last 20 saved sessions ([auto] badge on auto-saves)
144
+ veto sessions --clean # Remove auto-saves older than 7 days
145
+ veto memory [query] # Search knowledge base (blank = all entries)
146
+ veto patterns [prefix] # List learned agent/routing patterns
147
+ veto hook install # Install pre-commit secrets scan hook
148
+ veto hook remove # Remove the veto pre-commit hook
149
+ veto check # Scan staged changes for secrets (used by hook)
150
+ veto help # Commands + MCP tools reference
151
+ veto help --troubleshoot # Full troubleshooting guide
152
+ ```
153
+
154
+ ### `veto doctor`
155
+
156
+ ```
157
+ veto doctor
158
+
159
+ Veto Doctor — system health check
160
+ ─────────────────────────────────────────────────────
161
+ Node.js v22.5.0
162
+ ~/.veto exists
163
+ Database ~/.veto/veto.db
164
+ 17 sessions · 12 memories · 3 patterns
165
+
166
+ MCP Registrations
167
+ ─────────────────────────────────────────────────────
168
+ Claude Coderegistered
169
+ Gemini CLI registered
170
+ Antigravity CLI registered
171
+ · Codex CLInot installed
172
+ · Zed — not installed
173
+
174
+ All checks passed — Veto is healthy!
175
+ ```
176
+
177
+ ---
178
+
179
+ ## Council Debate
180
+
181
+ Two-phase flow — works on Claude Code, Gemini CLI, Antigravity CLI, and Codex CLI with no API keys:
182
+
183
+ ```
184
+ # Phase 1 — call with task, get instant deterministic result + LLM upgrade prompt
185
+ veto_council_debate {
186
+ task: "migrate auth from sessions to JWTs",
187
+ project_dir: "/your/project",
188
+ strictness: "standard"
189
+ }
190
+ → {
191
+ llm_backed: false,
192
+ final_verdict: "YELLOW",
193
+ votes: { lead_dev: {...}, architect: {...}, security: {...}, ... },
194
+ llm_upgrade: {
195
+ available: true,
196
+ instruction: "Read debate_prompt, reason as all 7 agents, call again with agent_responses",
197
+ debate_prompt: "You are running a Veto Council debate. Analyze the task as each specialist..."
198
+ }
199
+ }
200
+
201
+ # Phase 2 reason as all 7 agents, pass responses back → get LLM-backed verdict
202
+ veto_council_debate {
203
+ task: "migrate auth from sessions to JWTs",
204
+ agent_responses: {
205
+ lead_dev: { verdict: "warn", reason: "Stateless JWTs complicate logout — need blocklist", concerns: ["Refresh token rotation must be atomic"], recommendation: "Use short-lived access tokens (15m) + httpOnly refresh tokens" },
206
+ pm: { verdict: "approve", reason: "JWT migration unblocks mobile clients", concerns: [], recommendation: "Ship behind a feature flag, roll back if logout issues" },
207
+ architect: { verdict: "approve", reason: "Good fit for stateless microservice boundary", concerns: ["Clock skew can break expiry across services"], recommendation: "Add NTP sync check; use relative expiry not absolute timestamps" },
208
+ ux: { verdict: "approve", reason: "No user-visible change if migration is seamless", concerns: [], recommendation: "Silent migration — no logout required for existing sessions" },
209
+ devil: { verdict: "warn", reason: "What if the refresh token store goes down at 2AM?", concerns: ["Redis outage = all users logged out"], recommendation: "Fallback to session auth if Redis is down; use short rotation window" },
210
+ legal: { verdict: "approve", reason: "JWTs are industry standard, no new compliance risk", concerns: [], recommendation: "Document token storage in privacy policy" },
211
+ security: { verdict: "warn", reason: "Refresh token rotation must be atomic — TOCTOU risk", concerns: ["localStorage storage of access token is XSS-vulnerable"], recommendation: "Store access token in memory only; refresh token in httpOnly Secure SameSite=Strict cookie" }
212
+ }
213
+ }
214
+ {
215
+ llm_backed: true,
216
+ final_verdict: "YELLOW",
217
+ warnings: ["Refresh token rotation must be atomic...", "What if the refresh token store goes down..."],
218
+ recommended: "Proceed with JWT. Use httpOnly cookies for refresh tokens, memory-only for access tokens..."
219
+ }
220
+ ```
221
+
222
+ ### Council `strictness`
223
+
224
+ ```
225
+ veto_council_debate { task: "...", strictness: "fast" } # 3 agents, instant
226
+ veto_council_debate { task: "...", strictness: "standard" } # 7 agents, default
227
+ veto_council_debate { task: "...", strictness: "strict" } # 7 + devil rebuttal
228
+ ```
229
+
230
+ ---
231
+
232
+ ## Session Tagging + Search
233
+
234
+ ```
235
+ veto_session_save {
236
+ auto_summarize: true,
237
+ tags: ["auth", "jwt", "middleware"]
238
+ }
239
+
240
+ veto_sessions_list { query: "auth" }
241
+ → sessions matching "auth" in summary, context, tags, or project_dir
242
+ ```
243
+
244
+ Token usage is manually reported pass `token_count` to `veto_status` or `veto_session_save` and Veto stores it per platform per day. `veto_rate_status` shows what you've reported; nothing is counted automatically.
245
+
246
+ ---
247
+
248
+ ## Workspace Discovery
249
+
250
+ ```
251
+ veto_discover { "project_dir": "/your/project" }
252
+ → {
253
+ git: { branch: "main", commit: "a3f2b1", dirty_files: [], recent_commits: [...] },
254
+ ecosystems: { node: "my-app v2.1.0" },
255
+ tech_stack: ["TypeScript", "React", "Prisma"],
256
+ key_files: ["tsconfig.json", "prisma/schema.prisma", ".env.example"],
257
+ total_files: 142
258
+ }
259
+ ```
260
+
261
+ ---
262
+
263
+ ## Diff Review
264
+
265
+ ```
266
+ veto_diff_review { project_dir: "/your/project" }
267
+ {
268
+ verdict: "warn",
269
+ files_changed: 4,
270
+ code_review: { score: 78, critical: 0, high: 2, findings: [...] },
271
+ security: { score: 91, critical: 0, high: 0, findings: [...] },
272
+ secrets: { findings: [] },
273
+ summary: "⚠️ WARN 4 file(s) changed..."
274
+ }
275
+ ```
276
+
277
+ ---
278
+
279
+ ## Sequential Pipelines
280
+
281
+ ```
282
+ veto_workflow {
283
+ steps: [
284
+ { id: "code", agent: "coder", task: "implement auth middleware", gate: 70 },
285
+ { id: "review", agent: "reviewer", task: "review the implementation", gate: 75 },
286
+ { id: "security", agent: "security-scanner", task: "scan for vulnerabilities", gate: 80 },
287
+ { id: "test", agent: "tester", task: "write test cases" }
288
+ ],
289
+ project_dir: "/your/project"
290
+ }
291
+ { verdict: "passed", steps_passed: 4, steps_failed: 0, results: [...] }
292
+ ```
293
+
294
+ ---
295
+
296
+ ## Self-Learning Router
297
+
298
+ Every agent tool auto-records a quality signal when it completes. After any working session, `veto_learning_stats` shows live data and `veto_learning_apply` adjusts tier thresholds automatically after ~20 calls.
299
+
300
+ ```bash
301
+ veto_route_task { task: "debug auth issue", file_ext: ".ts" }
302
+ { ..., recommended_agent: "debugger" } # ← predicted from history
303
+ ```
304
+
305
+ ---
306
+
307
+ ## Plugin System
308
+
309
+ ```js
310
+ // ~/.veto/agents/my-agent.js
311
+ export function plan(task, context) {
312
+ return {
313
+ agent: 'my-agent', task, tier: 2,
314
+ approach: 'Your custom approach...',
315
+ steps: ['Step 1', 'Step 2'],
316
+ checklist: ['[ ] Check 1'],
317
+ pitfalls: ['Pitfall 1'],
318
+ patterns: ['Pattern 1'],
319
+ duration_estimate: '1-2 hours',
320
+ };
321
+ }
322
+ ```
323
+
324
+ ---
325
+
326
+ ## Cross-Platform Handoff
327
+
328
+ ```
329
+ Claude at 90% → veto_handoff { summary, context }
330
+ Open Gemini → veto_continue { resuming_as: "gemini" }
331
+ Full context restored. Continue exactly where you stopped.
332
+ ```
333
+
334
+ Platform switching is manual — Veto surfaces which platform has budget remaining via `veto_rate_status`, you decide when to switch.
335
+
336
+ | Platform | Support |
337
+ |---|---|
338
+ | Claude Code | ✅ Native MCP |
339
+ | Gemini CLI | ✅ MCP support |
340
+ | Antigravity CLI | ✅ MCP support |
341
+ | Codex CLI | ✅ MCP support |
342
+ | Cursor | ✅ MCP support |
343
+ | Windsurf | ✅ MCP support |
344
+ | Zed | ✅ MCP support (`context_servers`) |
345
+
346
+ ---
347
+
348
+ ## Project Structure
349
+
350
+ Veto is a single MCP server (`src/server.ts`) that registers 89 tools, MCP Resources, and Prompts, then dispatches every tool call through a per-domain **handler registry** — there is no monolithic switch. Each domain owns a `HandlerMap` module under `src/server/handlers/`:
351
+
352
+ | Module | Tools | Domain |
353
+ |---|---|---|
354
+ | `workers.ts` | 15 | single-agent worker delegations (code_review, security_scan, explain, …) |
355
+ | `generators.ts` | 11 | single-agent artifact generators (adr, diagram, rca, doc_gen, onboard, …) |
356
+ | `memory.ts` | 9 | knowledge base, patterns, project map |
357
+ | `observability.ts` | 7 | health, metrics, usage, audit, context/rate status |
358
+ | `advisors.ts` | 7 | project scanners (dep, query, bundle, dead-code, flag, openapi, HITL) |
359
+ | `session.ts` | 6 | save · restore · list · handoff · continue · replay |
360
+ | `review.ts` | 5 | diff · ci · pr · full review + pre-commit pipelines |
361
+ | `git.ts` | 5 | blame · changelog · commit message · PR description/post |
362
+ | `core.ts` | 5 | status · routing · platform setup · docs fetch · discover |
363
+ | `agents.ts` | 5 | agent_plan · execute_parallel · delegate · workflow · task_parse |
364
+ | `devtools.ts` | 5 | plugins · local LLM · clone detector · compose · notify IDE |
365
+ | `council.ts` | 3 | council_debate · benchmark · new_feature |
366
+ | `learning.ts` | 3 | record_outcome · learning_stats · learning_apply |
367
+ | `watch.ts` | 3 | watch · poll · stop |
368
+
369
+ Shared, independently testable internals live in `src/server/`:
370
+
371
+ - `registry.ts` — the `ToolContext` (`{ request, args, server }`) and `HandlerMap` types
372
+ - `runtime.ts` — shared mutable state (active project dir, auto-save, server health, `VERSION`)
373
+ - `scan-core.ts` — git-diff reader, triple-scan, and the agentic worker loop (unit-tested)
374
+
375
+ Every handler module is importable in isolation, so behaviour is covered by `tests/server/dispatch.test.ts` (the `callTool` behavioral net) and `tests/tools/definitions.test.ts` (the 89-tool registry-coverage check).
376
+
377
+ ---
378
+
379
+ ## Tech Stack
380
+
381
+ - **Language:** TypeScript (strict mode)
382
+ - **Runtime:** Node.js 22.5+ (built-in `node:sqlite` — no native compilation)
383
+ - **Dependencies:** `@modelcontextprotocol/sdk` only — one package, zero native addons
384
+ - **Memory:** Local SQLite — zero config, works offline, portable via JSON export
385
+ - **Platforms:** Claude Code · Gemini CLI · Antigravity CLI · Codex CLI · Cursor · Windsurf · Zed
386
+
387
+ ---
388
+
389
+ ## License
390
+
391
+ MIT © 2026 Jigyasu Dham