Add Desktop habitat README

Install a curated README into generated Agent Zero Desktop sessions so the Xfce workspace explains the habitat concept, credits the open-source foundations and Jan Tomášek, and gives users Terminal commands for popular agent CLIs. Keep the README as an _office plugin asset and copy it into the Desktop profile during launcher preparation.

Alessandro committed May 2, 2026 at 19:51 UTC 92ae20da2c045d1c95d18a3b74adaf2b256bbca6
2 files changed +158
plugins/_office/assets/desktop/README.md new
+142
@@ -0,0 +1,142 @@
1 +# Agent Zero Desktop
2 +
3 +This Desktop is Agent Zero's habitat: a visible, stateful Linux workspace where humans and agents can share files, launch tools, inspect results, and turn reasoning into observable work.
4 +
5 +You can choose your harness, but now you and A0 have a habitat.
6 +
7 +Here, the model reasons, the environment remembers, the user grants permission, and the work leaves artifacts that can be opened, tested, revised, and trusted. It is a small workshop for the larger idea: agents become more useful when they have a safe world to act in, not only more instructions to carry.
8 +
9 +With gratitude to the open-source foundations that make this affordance possible:
10 +
11 +- Xpra, for carrying a live Linux desktop through the browser, making this desktop environment usable by AI agents.
12 +- Kali Linux, for the practical Linux craft and tool culture that make capable workspaces feel natural.
13 +- LibreOffice, for giving this habitat a serious office bench: documents, spreadsheets, presentations, and decades of open document stewardship.
14 +- Xfce, for a fast, humane desktop that stays out of the way and lets the work breathe.
15 +- Jan Tomášek, for creating Agent Zero and making this whole workshop possible.
16 +
17 +Agent Zero stands on this craft with respect. Open source is not just code we consume; it is shared affordance, accumulated care, and an invitation to build systems that are powerful without becoming opaque.
18 +
19 +## Open the Terminal
20 +
21 +Double-click **Terminal** on this Desktop. You will land in the Agent Zero workdir, where agent CLIs can inspect files, edit projects, and run commands inside the Linux environment.
22 +
23 +Before installing an agent, make a small safety habit:
24 +
25 +```bash
26 +pwd
27 +node -v || true
28 +npm -v || true
29 +python3 --version || true
30 +curl --version | head -1 || true
31 +```
32 +
33 +Agent CLIs are powerful. Install from official sources, avoid `sudo npm install -g` unless the project explicitly requires it, and keep API keys in your shell or provider login flow rather than pasting secrets into documents.
34 +
35 +## Install Your Favorite Agent
36 +
37 +These commands were checked against official docs or project READMEs on 2026-05-02. Package names matter.
38 +
39 +### OpenAI Codex
40 +
41 +```bash
42 +npm i -g @openai/codex
43 +codex
44 +```
45 +
46 +### Claude Code
47 +
48 +Recommended native installer:
49 +
50 +```bash
51 +curl -fsSL https://claude.ai/install.sh | bash
52 +source ~/.bashrc
53 +claude
54 +```
55 +
56 +NPM alternative:
57 +
58 +```bash
59 +npm install -g @anthropic-ai/claude-code
60 +claude
61 +```
62 +
63 +### Gemini CLI
64 +
65 +```bash
66 +npm install -g @google/gemini-cli
67 +gemini
68 +```
69 +
70 +### Aider
71 +
72 +```bash
73 +curl -LsSf https://aider.chat/install.sh | sh
74 +source ~/.bashrc
75 +aider
76 +```
77 +
78 +### OpenCode
79 +
80 +```bash
81 +curl -sL https://opencode.ai/install | bash
82 +opencode
83 +```
84 +
85 +NPM alternative:
86 +
87 +```bash
88 +npm i -g opencode
89 +opencode
90 +```
91 +
92 +### Goose
93 +
94 +```bash
95 +curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash
96 +source ~/.bashrc
97 +goose
98 +```
99 +
100 +### OpenHands CLI
101 +
102 +```bash
103 +python3 -m pip install uv
104 +uv tool install openhands --python 3.12
105 +openhands
106 +```
107 +
108 +### Qwen Code
109 +
110 +```bash
111 +npm install -g @qwen-code/qwen-code@latest
112 +qwen
113 +```
114 +
115 +### Cursor Agent
116 +
117 +```bash
118 +curl https://cursor.com/install -fsS | bash
119 +source ~/.bashrc
120 +cursor-agent
121 +```
122 +
123 +### Hermes Agent
124 +
125 +```bash
126 +curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
127 +source ~/.bashrc
128 +hermes
129 +```
130 +
131 +### OpenClaw
132 +
133 +OpenClaw recommends Node 24, or Node 22.14+.
134 +
135 +```bash
136 +npm install -g openclaw@latest
137 +openclaw onboard --install-daemon
138 +```
139 +
140 +If in doubt, start with Codex or Claude Code for coding, Aider for a lighter patch-focused loop, Goose or OpenHands for a broader local agent, and Hermes or OpenClaw when you want the agent to grow into more of a persistent runtime working together with Agent Zero.
141 +
142 +Official references: [Codex](https://developers.openai.com/codex/cli), [Claude Code](https://code.claude.com/docs/en/getting-started), [Gemini CLI](https://google-gemini.github.io/gemini-cli/docs/get-started/), [Aider](https://aider.chat/docs/install.html), [OpenCode](https://www.opencode.live/), [Goose](https://goose-docs.ai/docs/getting-started/installation/), [OpenHands](https://docs.openhands.dev/openhands/usage/cli/installation), [Qwen Code](https://github.com/QwenLM/qwen-code), [Cursor Agent](https://docs.cursor.com/en/cli/installation), [Hermes Agent](https://github.com/NousResearch/hermes-agent), [OpenClaw](https://github.com/openclaw/openclaw).
plugins/_office/helpers/libreoffice_desktop.py
+16
@@ -44,6 +44,7 @@ HIDDEN_XPRA_DESKTOP_ENTRIES = (
44 "xpra-shadow.desktop",
45 "xpra-start.desktop",
46 )
47 +DESKTOP_README_SOURCE = Path(__file__).resolve().parents[1] / "assets" / "desktop" / "README.md"
48 DESKTOP_FOLDER_LINKS = (
49 ("Projects", ("usr", "projects")),
50 ("Skills", ("usr", "skills")),
@@ -460,6 +461,7 @@ class LibreOfficeDesktopManager:
461
462 desktop_dir = session.profile_dir / "Desktop"
463 desktop_dir.mkdir(parents=True, exist_ok=True)
464 + _install_desktop_readme(desktop_dir)
465 _remove_path_if_owned(desktop_dir / "Browser.desktop")
466 _remove_path_if_owned(desktop_dir / "Files.desktop")
467 config_dir = session.profile_dir / ".config"
@@ -1322,6 +1324,20 @@ def _write_desktop_launcher(
1324 pass
1325
1326
1327 +def _install_desktop_readme(desktop_dir: Path) -> None:
1328 + if not DESKTOP_README_SOURCE.exists():
1329 + return
1330 + target = desktop_dir / "README.md"
1331 + try:
1332 + content = DESKTOP_README_SOURCE.read_text(encoding="utf-8")
1333 + if target.exists() and target.read_text(encoding="utf-8") == content:
1334 + return
1335 + target.write_text(content, encoding="utf-8")
1336 + target.chmod(0o644)
1337 + except OSError:
1338 + return
1339 +
1340 +
1341 def _xfce_property(parent: ET.Element, name: str, property_type: str, value: str | None = None) -> ET.Element:
1342 for child in parent.findall("property"):
1343 if child.get("name") == name: