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: