Suites / taf
Trigger Actions Framework
Real work in orgs that use the open-source Trigger Actions Framework (TAF) by Mitch Spano: writing trigger action classes, registering them with custom metadata, ordering, bypass mechanisms, entry criteria, recursion control, DML finalizers, flow actions, migrating legacy triggers and testing actions. Each answer is deployed (check-only) with hidden Apex tests to a scratch org that has TAF 0.3.4 installed; the tests perform real DML and assert that the framework ran the model's actions as specified.
How it's graded
Each answer is deployed as a check-only validation, with hidden Apex tests, to a scratch org with the Trigger Actions Framework installed. The tests do real DML and assert that the framework ran the model’s actions as specified: ordering, bypasses, entry criteria and recursion control.
Difficulty mix
Leaderboard
Who's best at Trigger Actions Framework
Within three attempts (c@3) on this suite only, with 95% confidence intervals. With 18 tasks the intervals are wide: where two overlap, those configurations are not clearly different. 1 finished configuration isn’t shown yet: its retries haven’t finished. Open in the full leaderboard →
| # | Model and config | Score c@3 · 95% CI | Tasks |
|---|---|---|---|
| 1 | Claude Sonnet 5.5 effort medium | 100%95% CI 82–100 | 18 |
| 1 | GPT-5.6 Sol effort medium | 100%95% CI 82–100 | 18 |
| 1 | GPT-6 Astra effort high | 100%95% CI 82–100 | 18 |
| 1 | GPT-6.1 Sol effort high | 100%95% CI 82–100 | 18 |
| 5 | Claude Fable 5.1 effort high | 94%95% CI 74–99 | 18 |
| 5 | Claude Opus 5.5 effort high | 94%95% CI 74–99 | 18 |
| 5 | Claude Opus 5.5 effort medium | 94%95% CI 74–99 | 18 |
| 5 | Claude Opus 5.5 effort low | 94%95% CI 74–99 | 18 |
| 5 | Claude Sonnet 5.5 effort high | 94%95% CI 74–99 | 18 |
| 5 | Claude Sonnet 5.5 effort low | 94%95% CI 74–99 | 18 |
| 5 | DeepSeek V4.1 Flash FP8 · effort high | 94%95% CI 74–99 | 18 |
| 5 | DeepSeek V4.1 Flash EXL3 2.9bpw · vLLM + ExLlamaV3 · effort high | 94%95% CI 74–99 | 18 |
| 5 | Gemini 3.8 Flash effort medium | 94%95% CI 74–99 | 18 |
| 5 | GPT-6 Astra effort medium | 94%95% CI 74–99 | 18 |
| 5 | Grok 4.7 effort high | 94%95% CI 74–99 | 18 |
| 5 | Qwen3.8 Flash-Next NVFP4 · vLLM · effort medium | 94%95% CI 74–99 | 18 |
| 17 | DeepSeek V4 Pro FP8 · effort high | 89%95% CI 67–97 | 18 |
| 17 | DeepSeek V4.1 Flash Native FP8, FP4 experts · SGLang · effort high | 89%95% CI 67–97 | 18 |
| 17 | GPT-6 Luna effort medium | 89%95% CI 67–97 | 18 |
| 17 | Grok 4.6 effort high | 89%95% CI 67–97 | 18 |
| 17 | MiMo V2.6 Pro FP8 · thinking on | 89%95% CI 67–97 | 18 |
| 17 | Qwen3.8 Flash-Next MLX 4-bit · MTPLX · effort medium | 89%95% CI 67–97 | 18 |
| 23 | Nemotron 3 Ultra thinking on | 83%95% CI 61–94 | 18 |
| 23 | Qwen3.8 Flash-Next thinking on | 83%95% CI 61–94 | 18 |
| 25 | GLM-5.3 Flash FP8 · effort high | 78%95% CI 55–91 | 18 |
| 25 | Qwen3.8 Flash-Next MLX 4-bit · TensorFold · effort medium | 78%95% CI 55–91 | 18 |
| 27 | Claude Opus 4.8 effort medium | 72%95% CI 49–88 | 18 |
| 28 | Inkling Small FP8 · effort high | 67%95% CI 44–84 | 18 |
| 28 | Qwen3.8 Flash-Next INT4-AutoRound, 5 of 10 experts · TensorFold (Zig) · effort medium | 67%95% CI 44–84 | 18 |
| 30 | Claude Opus 4.8 effort high | 61%95% CI 39–80 | 18 |
| 30 | Mistral Large 4 effort high | 61%95% CI 39–80 | 18 |
| 32 | Claude Opus 4.8 effort low | 56%95% CI 34–75 | 18 |
| 32 | Claude Sonnet 5 effort high | 56%95% CI 34–75 | 18 |
| 32 | GLM-5.3 Flash EXL3 4.0bpw experts, FP8 dense · vLLM + ExLlamaV3 · effort high | 56%95% CI 34–75 | 18 |
| 32 | GLM-5.3 Flash EXL3 4.0bpw experts, 4-bit dense · TensorFold · effort high | 56%95% CI 34–75 | 18 |
| 32 | MiMo V2.6 Flash FP8 + MXFP4 experts · SGLang · thinking on | 56%95% CI 34–75 | 18 |
| 32 | MiMo V2.6 Flash FP8 · thinking on | 56%95% CI 34–75 | 18 |
| 32 | Qwen3.8 27B AWQ-INT4 · vLLM · effort xhigh | 56%95% CI 34–75 | 18 |
| 39 | Claude Haiku 5.5 effort medium | 50%95% CI 29–71 | 18 |
| 39 | Claude Haiku 5.5 effort high | 50%95% CI 29–71 | 18 |
| 39 | Claude Haiku 5.5 effort low | 50%95% CI 29–71 | 18 |
| 39 | Claude Opus 4.8 thinking off | 50%95% CI 29–71 | 18 |
| 43 | DeepSeek V4 Flash Vision experimental FP8 + FP4 experts · vLLM · effort high | 44%95% CI 25–66 | 18 |
| 43 | GLM-5.3 Flash EXL3 4.0bpw experts, FP8 dense · vLLM + ExLlamaV3 · thinking off | 44%95% CI 25–66 | 18 |
| 43 | Qwen3.8 27B MLX 8-bit · MTPLX · effort low | 44%95% CI 25–66 | 18 |
| 43 | Qwen3.8 27B MLX 4-bit · MTPLX · effort low | 44%95% CI 25–66 | 18 |
| 47 | Claude Sonnet 5 effort medium | 39%95% CI 20–61 | 18 |
| 47 | Gemma 4 31B QAT W4A16 · vLLM · thinking on | 39%95% CI 20–61 | 18 |
| 47 | GLM-5.3 Flash EXL3 4.0bpw experts, FP8 dense · vLLM + ExLlamaV3 · effort low | 39%95% CI 20–61 | 18 |
| 47 | Laguna S 2.1 FP4 · thinking on | 39%95% CI 20–61 | 18 |
| 47 | Qwen3.6 35B-A3B NVFP4 · vLLM · thinking on | 39%95% CI 20–61 | 18 |
| 47 | Qwen3.8 27B Splash 4-bit · Splash · effort low | 39%95% CI 20–61 | 18 |
| 53 | Qwen3.8 27B AWQ-INT4 · vLLM · effort medium | 36%95% CI 18–59 | 18 |
| 54 | Claude Haiku 4.5 thinking off | 33%95% CI 16–56 | 18 |
| 54 | Claude Sonnet 5 thinking off | 33%95% CI 16–56 | 18 |
| 54 | Claude Sonnet 5 effort low | 33%95% CI 16–56 | 18 |
| 54 | Qwen3.8 27B AWQ-INT4 · vLLM · effort low | 33%95% CI 16–56 | 18 |
| 58 | Claude Haiku 4.5 thinking on | 28%95% CI 13–51 | 18 |
| 58 | Gemma 4 26B-A4B NVFP4 · vLLM · thinking on | 28%95% CI 13–51 | 18 |
| 58 | Ling 3.0 Flash BF16 · thinking on | 28%95% CI 13–51 | 18 |
| 61 | Nemotron 3.5 Lightning NVFP4 · thinking on | 22%95% CI 9–45 | 18 |
Tasks
What's in the suite
Solve rate is the share of finished runs whose first answer to the task passed (pass@1), a rough guide to how hard models find it. Difficulty is the task author’s label; from results is what the solve rate says: easy when two thirds or more of the finished runs pass it, hard at a third or fewer, once five have graded it.
| Task | Difficulty | From results | Solve rate |
|---|---|---|---|
| Enable the framework on Opportunitytaf-enable-opportunity | easy | medium | 39% |
| Normalise new leads in a before-insert actiontaf-lead-normalize-before-insert | easy | easy | 82% |
| Release a new action to pilot users onlytaf-required-permission-pilot | easy | medium | 35% |
| Skip one action during a contact importtaf-bypass-action-in-import | easy | easy | 97% |
| Switch off a misbehaving action without a code changetaf-disable-action-hotfix | easy | easy | 97% |
| Audit amount changes once despite re-entrant updatestaf-recursion-amount-audit | medium | medium | 35% |
| Bypass all Account automation for the integration usertaf-bypass-permission-integration | medium | medium | 56% |
| Bypass one object's actions inside a service, safelytaf-bypass-object-ownership-service | medium | easy | 73% |
| Create onboarding tasks from an after-insert actiontaf-after-insert-onboarding-task | medium | medium | 37% |
| DML-less unit tests for a trigger actiontaf-dml-less-action-test | medium | medium | 48% |
| Filter an action with an entry criteria formulataf-entry-criteria-formula | medium | hard | 6% |
| One validation action registered for insert and updatetaf-duplicate-email-two-contexts | medium | hard | 28% |
| Run an admin's flow as an ordered trigger actiontaf-register-flow-action | medium | medium | 34% |
| Build a TAF flow action and bypass only that flowtaf-flow-action-authoring | hard | hard | 18% |
| Migrate a legacy fat Case trigger to trigger actionstaf-migrate-legacy-case-trigger | hard | medium | 35% |
| One async sync job per DML operation with a DML finalizertaf-dml-finalizer-erp-sync | hard | hard | 31% |
| Roll up open cases to Account across all after contextstaf-open-case-rollup | hard | hard | 31% |
| Share one parent query across trigger actionstaf-shared-query-singleton | hard | medium | 43% |
Private evaluations
Want this for your team?
Azul Labs runs Forcebench privately for two kinds of Salesforce team.
Choosing a model to run yourself?
A private benchmark of your shortlist
Open-weight models at the quantisations and reasoning efforts you could run on infrastructure you control, tested on your kind of Salesforce work, with a written recommendation.
- Private tasks written from your work only ever run on local models; they are never sent to an API.
- Re-testing after any change of model, quantisation or engine is available.
- Typical turnaround is 2–3 weeks; large models take about a day of machine time per configuration.
Building or buying a Salesforce AI tool?
A private evaluation of your tool
Your tool on held-out tasks it has never seen, against API baselines (models reached through a hosted service) and Local ones (served on Forcebench’s own hardware), with a written report on where it holds up and where it fails.
- It can start as a smaller pilot, about 30 held-out tasks with your tool against two baselines, before a full evaluation.
- Repeat evaluations after your releases are available.
- Typical turnaround is 2–3 weeks.
Fixed fee, quoted up front. The quote depends on the number of tasks and the number of models, tools or configurations tested.
Or email leo@azl.au · azl.au