docs(agents): add plugin UI safety baseline (#7792)
* docs(agents): add plugin UI safety baseline Document safe rendering and validation of dynamic plugin data after a marketplace review surfaced a QML AutoText boundary. Assisted-by: Codex/GPT-5 * docs(agents): allow consented background refreshes Clarify that plugin networking may refresh periodically when disclosed and user-controlled. Assisted-by: Codex/GPT-5 * docs(agents): keep plugin guide label concise Leave the safety baseline discoverable within the plugin guide without expanding its topic index label. Assisted-by: Codex/GPT-5 * docs(agents): point plugin authors at their own markup helper Omarchy ships no markup-neutralizing helper, and this skill is for installed systems, where the parent SKILL.md forbids editing the packaged shell components the old line suggested extending. Co-Authored-By: Codex Medium <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Omarchybot <317366263+omarchybot@users.noreply.github.com> Co-authored-by: Codex Medium <noreply@openai.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 file changed
+19
@@ -17,6 +17,25 @@ changes. `idle.screensaver` and `idle.lock` are seconds since user idle began.
|
||||
|
||||
**Commands:** `omarchy restart shell`, `omarchy refresh shell`
|
||||
|
||||
## Plugin UI Safety
|
||||
|
||||
Plugins run inside Omarchy's long-lived, unsandboxed shell. Treat text from network responses, files, IPC, settings, environment variables, and command output as untrusted.
|
||||
|
||||
- QML `Text` defaults to `Text.AutoText`. Do not bind untrusted data to an AutoText sink: markup-shaped input such as `<img src="https://example.invalid/tracker">` can be interpreted as rich text and load a resource.
|
||||
- For display text owned by the plugin, set `textFormat: Text.PlainText`. Prefer a local `PlainText` component when the plugin has multiple text elements.
|
||||
|
||||
```qml
|
||||
Text {
|
||||
textFormat: Text.PlainText
|
||||
text: modelData.name
|
||||
}
|
||||
```
|
||||
|
||||
- When passing dynamic text to an Omarchy-owned component whose internal `Text` format the plugin cannot set, neutralize markup in the plugin first with a helper of its own, and add a regression test; Omarchy ships no such helper. Never edit the packaged component to add a plain-text option: that belongs in a pull request to Omarchy.
|
||||
- Bound and validate downloaded data before displaying or saving it: limit response and collection sizes, string lengths, identifiers, and timestamps.
|
||||
- Keep network access explicit. Use fixed HTTPS sources, timeouts, response-size limits, and validation. For periodic background refreshes, disclose the behavior and let users enable or disable it. Never execute downloaded content or interpolate untrusted values into shell commands.
|
||||
- Add regression coverage for markup-shaped input and every shared tooltip or notification sink that receives dynamic text.
|
||||
|
||||
## Bar Layout
|
||||
|
||||
Use the `omarchy bar` group to move and manage widgets:
|
||||
|
||||
Reference in new issue
Block a user