@emptyos/client 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,233 @@
1
+ ---
2
+ name: emptyos-computer
3
+ description: Work with a personal EmptyOS computer through the external `empty` CLI. Use when an agent needs to connect to or inspect a computer; work with Things, Projects, Data, changes, sharing, or hooks; publish verified software; or enter the computer for resident-only work.
4
+ ---
5
+
6
+ # EmptyOS Computer
7
+
8
+ Run every `empty` command from the local terminal. The client decides whether
9
+ the operation is local, transported over SSH, or a local/remote Git workflow.
10
+ Use the live help as the command reference:
11
+
12
+ ```sh
13
+ empty --help
14
+ empty thing --help
15
+ empty <command> --help
16
+ ```
17
+
18
+ Use `--json` for stable results and error codes rather than parsing human text.
19
+
20
+ This skill ships inside the `@emptyos/client` npm package; `empty skill
21
+ install [--dir <path>]` copies it into a skills directory. For anything beyond
22
+ this bootstrap, read https://emptyos.com/docs/.
23
+
24
+ ## Start and select a computer
25
+
26
+ Inspect the selected profile and available profiles first:
27
+
28
+ ```sh
29
+ empty computer show --json
30
+ empty computers --json
31
+ ```
32
+
33
+ If no computer profile exists and the user supplies an EmptyOS computer URL,
34
+ connect through EmptyOS rather than asking for an exe.dev account or provider
35
+ SSH access:
36
+
37
+ ```sh
38
+ empty connect https://<computer-host>
39
+ ```
40
+
41
+ Show the user the printed short code, SSH-key fingerprint, and approval URL.
42
+ Wait for them to authenticate with EmptyOS, compare both values, and approve
43
+ the request. `connect` derives the local alias from the hostname; `--as
44
+ <alias>` chooses the local shorthand used with `--computer`. `--label <label>`
45
+ sets this connecting client's persistent display label on the approval and
46
+ approved-agent screens and defaults to this machine's hostname. The command
47
+ selects the first profile automatically but preserves an existing default, so
48
+ use `empty computer use <alias>` when the newly connected computer should
49
+ replace that default.
50
+
51
+ Use `empty --computer <alias> ...` to target a non-default profile. Use
52
+ `empty computer add` only when the user intentionally supplies an existing SSH
53
+ target; use `empty connect` for an EmptyOS computer URL. Profile removal is
54
+ local client state; inspect `empty computer remove --help` before using it.
55
+
56
+ ## Discover the computer
57
+
58
+ Start broad, then inspect the relevant object:
59
+
60
+ ```sh
61
+ empty --json
62
+ empty status --json
63
+ empty things --json
64
+ empty projects --json
65
+ empty data --json
66
+ empty changes --json
67
+ empty commands --json
68
+ empty hooks --json
69
+ ```
70
+
71
+ `empty --json` is the compact whole-computer overview. `empty status --json`
72
+ reports health. For focused inspection, use `empty thing describe <id> --json`,
73
+ `empty thing logs <id> --json`, and `empty data describe <id> --json`.
74
+ `empty commands --json` merges built-in commands with owner-authored commands
75
+ installed on the selected computer.
76
+
77
+ ## Work with Things
78
+
79
+ ### Put a new Thing
80
+
81
+ Put workstation content on the selected computer:
82
+
83
+ ```sh
84
+ empty put <local-path> [--as <id>] [--name <display-name>] [--project <project-id>]
85
+ ```
86
+
87
+ `put` accepts regular files, HTML pages, ready static directories, and clean
88
+ manifested Thing repositories. For ordinary files and static sites, it
89
+ generates the manifest and `./verify`; that check prevents import or later
90
+ publication when the expected served file or build output is missing. Every
91
+ manifested Thing, static or service, must provide a tracked executable
92
+ `./verify` and may provide a tracked executable `./prepare`. Services require a
93
+ manifest and are registered stopped. `--project` requires an existing Project
94
+ and records membership in the initial commit.
95
+
96
+ Treat a selected directory as the deployment boundary: inspect every file and
97
+ prefer ready build output over a source repository root. EmptyOS does not scan
98
+ for secrets. For a manifested import, the computer runs `./prepare` when
99
+ present as trusted, unsandboxed owner code that may use the network, then runs
100
+ `./verify` offline.
101
+
102
+ ### Clone and publish an existing Thing
103
+
104
+ ```sh
105
+ empty clone <id>
106
+ cd <id>
107
+ # inspect, edit, run ./verify, and commit exactly one change
108
+ empty put . --json
109
+ ```
110
+
111
+ Treat the clone's Git-local EmptyOS binding as authoritative. Do not copy a
112
+ checkout between computers, change its `emptyos.*` Git keys, push directly to
113
+ the live branch, or bypass a stale-publish rejection. Fetch and rebase or
114
+ squash onto the computer's current head, then publish again. Publication
115
+ requires a clean checkout and exactly one verified, non-merge commit above the
116
+ current computer head.
117
+
118
+ ### Inspect and control Things
119
+
120
+ Use `empty thing describe <id> --json` before changing a Thing and
121
+ `empty thing logs <id> --json` for bounded service logs. Control services through
122
+ `empty thing start|stop|restart <id>` rather than raw process commands. Use
123
+ `empty thing assign` and `empty thing unassign` for Project membership.
124
+
125
+ `empty thing remove <id>` removes a service registration; it does not delete
126
+ the Thing directory or associated Data. Do not treat it as content deletion.
127
+
128
+ ### Expose and unexpose Things
129
+
130
+ Anonymous sharing is static-only. Before `empty expose <id>` or
131
+ `empty put ... --public`, inspect every file in the declared document
132
+ directory. Static sites and declared single files are eligible only when that
133
+ directory is below the repository root; services and repository-root static
134
+ Things are refused. Do not bypass a refusal by editing `visibility`.
135
+
136
+ Use `empty unexpose <id>` as the immediate fail-safe to revoke anonymous
137
+ access, including when the Thing has become invalid or otherwise ineligible.
138
+
139
+ ## Work with Projects
140
+
141
+ Use `empty projects --json` to list Projects and
142
+ `empty project create <id> <name...>` to create one. Use
143
+ `empty thing assign|unassign` to change a Thing's membership.
144
+ `empty put --project <id>` requires the Project to exist.
145
+
146
+ Projects organize Things but do not change their routes, visibility, service
147
+ identity, lifecycle, or Data associations.
148
+
149
+ ## Work with Data
150
+
151
+ Use `empty data --json` to list registered Datasets and
152
+ `empty data describe <id> --json` to inspect one. Use the live command
153
+ inventory for supported Data operations rather than inventing commands or
154
+ manifest fields.
155
+
156
+ Never copy SQLite files between the workstation and computer. Keep canonical
157
+ Data on the computer and change it only through a running Thing or an explicit
158
+ supported computer command. Data stays outside Thing Git history, publication,
159
+ and Undo.
160
+
161
+ ## Review changes and extend the computer
162
+
163
+ ### Status, history, and Undo
164
+
165
+ Use `empty status --json` for computer health and `empty changes --json` for
166
+ committed change records. Before `empty undo <change-id> --json`, inspect the
167
+ exact change and confirm its target worktree is clean. Undo creates a new Git
168
+ revert commit for one target and never changes Data.
169
+
170
+ Supported mutations share the computer's mutation lock. If a command returns
171
+ `computer-busy`, retry later instead of bypassing the lock through raw SSH or
172
+ filesystem edits.
173
+
174
+ ### Commands and hooks
175
+
176
+ Treat `empty commands --json` as the authoritative inventory of built-in and
177
+ owner-authored commands. Treat `empty hooks --json` as the inventory of
178
+ supported lifecycle events and installed hooks.
179
+
180
+ `empty hook install <event> <path>` installs owner code from a path on the
181
+ computer into the tracked platform hook directory and commits it. Inspect the
182
+ source first. Use `empty ssh` when preparing that computer-side path; do not
183
+ teach `put` or `clone` to install platform extensions implicitly.
184
+
185
+ ## Enter the computer
186
+
187
+ Prefer transported `empty` commands when they cover the operation. Use
188
+ `empty ssh` only for work that genuinely needs the resident environment;
189
+ arguments after `--` have ordinary remote-shell semantics. Once there, read
190
+ `~/EMPTY.md`. The installed computer contract, not this bootstrap, defines
191
+ resident paths and capabilities.
192
+
193
+ ## Platform updates
194
+
195
+ If a command reports that the selected computer lacks a required capability,
196
+ inspect the platform update before retrying:
197
+
198
+ ```sh
199
+ empty computer update --check --json
200
+ empty computer update
201
+ ```
202
+
203
+ The second command uses the selected profile's configured HTTPS release
204
+ catalog when present, otherwise the official EmptyOS release catalog. Use
205
+ `--catalog` only for an operator-selected catalog override, or `--release` for
206
+ an immutable local artifact obtained through a trusted channel. Use
207
+ `empty --computer <alias> computer update ...` for a non-default profile.
208
+
209
+ If the owner reports that Home shows `An EmptyOS update needs your changes
210
+ reconciled`, a signed operator update found overlapping resident changes and
211
+ stopped before changing the installed platform. Inspect the exact official
212
+ release first:
213
+
214
+ ```sh
215
+ empty computer update --check --catalog https://release.emptyos.com/platform/v1/catalog.json --json
216
+ ```
217
+
218
+ Apply only after the owner approves the inspected update. The Home advisory is
219
+ local state, not a resident catalog poll. It remains until the resident update
220
+ succeeds; a read-only check alone does not clear it.
221
+
222
+ If apply returns `needs-reconciliation`, continue the retained transaction
223
+ rather than starting another update. Read `retainedStage`, `conflicts`, and
224
+ `nextCommand` from the JSON result. Enter the computer with `empty ssh`, read
225
+ the stage's `RECONCILE.md`, and inspect the baseline, local, and incoming
226
+ versions of every listed conflict. Edit only the detached `candidate` paths
227
+ named by that contract; preserve the user's intent, do not edit `~/emptyos`,
228
+ and do not commit or rebase the candidate. Run its complete test suite, then
229
+ execute the exact `empty computer update --resume <stage-name>` command from
230
+ the result. Resume rejects stale live state, edits outside the declared
231
+ conflicts, changed deterministic paths, and validator failures. If a human
232
+ encounters this state outside an agent session, tell them to continue the
233
+ retained update from an agent instead of attempting a blind overwrite.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "EmptyOS Computer"
3
+ short_description: "Work safely with a personal EmptyOS computer"
4
+ default_prompt: "Use $emptyos-computer to inspect or change a Thing on my EmptyOS computer."