diff --git a/docs/execution-model.md b/docs/execution-model.md
index ebe94956..560b0b6b 100644
--- a/docs/execution-model.md
+++ b/docs/execution-model.md
@@ -82,6 +82,70 @@ If an automation block does not have explicit triggers configured, it will be tr
!!! Note
The `on` parameter can be used within individual automation blocks, while `triggers.include` and `triggers.exclude` can only be defined at the file level.
+## Action-Level Execution Control
+
+gitStream provides intelligent action-level execution control that automatically skips certain actions based on the original triggering event. This feature helps reduce noise and ensures that AI-powered and code-related actions only execute when there are actual code changes, improving efficiency across all supported providers (GitLab, Bitbucket, and GitHub).
+
+### How It Works
+
+When an automation is triggered, gitStream evaluates each action individually against the original triggering event. Some actions are automatically skipped if the triggering event is not relevant to their purpose.
+
+!!! important "Explicit Triggers Override"
+ When explicit triggers are configured (using the `on` or `triggers` parameters), they take precedence over the automatic skip mechanism. This means actions will execute for all explicitly defined triggers, regardless of the action-level execution rules below.
+
+### Action Execution Rules
+
+The following table shows which actions are restricted to code-related triggering events:
+
+
+| Action | Executes Only On | Behavior on Other Triggers |
+| --------------------- | ---------------------------------------------------------- | -------------------------- |
+| `add-code-comment` | Commit pushed, Creating a PR (not draft), PR ready for review | Skipped |
+| `code-review` | Commit pushed, Creating a PR (not draft), PR ready for review | Skipped |
+| `describe-changes` | Commit pushed, Creating a PR (not draft), PR ready for review | Skipped |
+| `explain-code-experts`| Commit pushed, Creating a PR (not draft), PR ready for review | Skipped |
+| All other actions | Current defaults (no restrictions) | Executed |
+
+
+### Examples
+
+#### Scenario: AI Code Review with Explicit Triggers
+
+```yaml+jinja
+automations:
+ ai_code_review:
+ on:
+ - commit
+ - label_added
+ if:
+ - true
+ run:
+ - action: code-review@v1 # Executes on both commit and label_added (explicit triggers override skip rules)
+ - action: add-label@v1 # Executes on both commit and label_added
+ args:
+ label: "reviewed"
+```
+
+In this example with explicit triggers:
+- When triggered by a `commit` event: both actions execute
+- When triggered by a `label_added` event: both actions execute (explicit triggers take precedence)
+
+#### Scenario: No Explicit Triggers
+
+```yaml+jinja
+automations:
+ smart_review:
+ if:
+ - {{ files | length > 5 }}
+ run:
+ - action: describe-changes@v1 # Only executes on code-related events
+ - action: add-reviewers@v1 # Executes on all default triggers
+ args:
+ reviewers: ["expert1", "expert2"]
+```
+
+With implicit triggers (no explicit triggers configured), `describe-changes` will only execute when the automation is triggered by code changes, while `add-reviewers` follows the current default behavior.
+
**Note on Matching:**
- When using a `String` as the matching type, the values in `triggers.include.*` and `triggers.exclude.*` require exact matches. This means that the names of branches or repositories must exactly match the specified string to either trigger or prevent triggering the automation.