diff --git a/AGENTS.md b/AGENTS.md
index c78ea4f..5f3ce53 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -24,6 +24,10 @@ Strict one-way MVVM + services: `views → viewmodels → services → core`.
Runner emits OpenSeesPy commands in fixed order (`docs/architecture.md`): `wipe → model → node → fix → material → section → geomTransf → element → timeSeries → pattern/load → recorder → system/numberer/... → analyze`. Never reorder.
+## Branches
+
+- Do all feature/fix work on `develop` (or short-lived branches off `develop`, merged back into it). `main` is release-only — never commit directly to it.
+
## Verify (in this order)
```bash
diff --git a/src/otko/resources/icons-dark/assign-distributed.svg b/src/otko/resources/icons-dark/assign-distributed.svg
new file mode 100644
index 0000000..2f21560
--- /dev/null
+++ b/src/otko/resources/icons-dark/assign-distributed.svg
@@ -0,0 +1,11 @@
+
+
diff --git a/src/otko/resources/icons/assign-distributed.svg b/src/otko/resources/icons/assign-distributed.svg
new file mode 100644
index 0000000..2f21560
--- /dev/null
+++ b/src/otko/resources/icons/assign-distributed.svg
@@ -0,0 +1,11 @@
+
+
diff --git a/src/otko/views/menu_builder.py b/src/otko/views/menu_builder.py
index 30450f9..48b0670 100644
--- a/src/otko/views/menu_builder.py
+++ b/src/otko/views/menu_builder.py
@@ -315,6 +315,11 @@ class MenuBuilder:
"Assign Point Loads (Ctrl+L)",
"Assign point loads to the selected nodes.",
),
+ "_act_assign_distributed_load": (
+ "assign-distributed",
+ "Assign Distributed Loads…",
+ "Assign distributed loads to the selected frame elements.",
+ ),
"_act_quick_guide": (
"quick-guide",
"Quick Guide",
@@ -541,6 +546,7 @@ class MenuBuilder:
tb.addSeparator()
tb.addAction(self._act_assign_support)
tb.addAction(self._act_assign_load)
+ tb.addAction(self._act_assign_distributed_load)
def _build_status_bar(self) -> None:
self._status_label = QLabel("No project")