@agora-build/atem 0.6.10 → 0.6.13

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.
Files changed (2) hide show
  1. package/README.md +112 -1
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -16,6 +16,12 @@ curl -fsSL https://dl.agora.build/atem/install.sh | bash
16
16
 
17
17
  Both download a prebuilt binary for your platform (linux-x64, linux-arm64, darwin-x64, darwin-arm64).
18
18
 
19
+ The npm package downloads the binary for its published version. Documentation
20
+ on GitHub `main` can describe features newer than the latest release. Check
21
+ `atem --version` and `atem cred --help`; use a current release that includes
22
+ the commands you need, or build from source below. Run a source build using
23
+ its explicit path, such as `./target/release/atem`, to avoid an older installed CLI.
24
+
19
25
  ## Commands
20
26
 
21
27
  ```bash
@@ -28,8 +34,63 @@ atem repl # Interactive REPL with AI command inter
28
34
  ```bash
29
35
  atem login # Log in with Agora Console (opens browser)
30
36
  atem logout # Log out from SSO
37
+ atem pair # Pair with Astation, then verify this device
38
+ atem pair --save # Same, and keep credentials for offline use
39
+ atem unpair [--yes] # Remove all Astation pairings (asks first)
40
+ ```
41
+
42
+ `atem login` unlocks a limited set: project list, tokens for the active
43
+ project, and the dev servers (`serv rtc`, `serv convo`, `serv webhooks`).
44
+ Pairing with Astation unlocks the full set: vault, sync, memory, skills,
45
+ `atem cred`, and Astation-driven remote agent control, voice coding, mark
46
+ tasks and diagrams. `serv files`, `config`, and tokens from
47
+ `AGORA_APP_ID`/`AGORA_APP_CERTIFICATE` need neither.
48
+
49
+ `atem pair` receives your Agora login from Astation, then verifies the device:
50
+ atem and your Mac each show a 12-character safety code. If they match, type
51
+ `y` here; on the Mac click **Codes Match**, then approve with Touch ID.
52
+ Either side can finish first. atem reads that `y` from the terminal itself,
53
+ never from piped input or keys typed earlier, so run `atem pair` in an
54
+ interactive terminal. If verification fails, the pairing stays saved, Astation
55
+ is told, and `atem pair` exits nonzero; run it again to verify. A connected or SSO-paired session alone does not
56
+ mean the device is verified; check `atem cred status`. With `--save`
57
+ the credentials keep working when Astation disconnects; without it they stop
58
+ 5 minutes after the disconnect (atem asks when `--save` isn't given).
59
+
60
+ ### Device keys (`atem cred`)
61
+
62
+ ```bash
63
+ atem cred status # Show whether this device is verified, its home Astation and its key agent
64
+ atem cred unlock # Unlock this device's keys (approve with Touch ID on your Mac)
65
+ atem cred lock # Wipe unlocked keys and stop the key agent
66
+ atem cred projects # Send known Git projects to Astation's credential picker (keys must be unlocked)
31
67
  ```
32
68
 
69
+ This device's keys are sealed on disk under a storage key that only the paired
70
+ Mac (the home Astation) holds. `atem cred unlock` asks the Mac for it (Touch
71
+ ID) and starts a background `atem key-agent` that holds the keys in memory.
72
+ `atem cred lock` wipes them and stops the agent. After upgrading atem, run
73
+ `atem cred lock` then `atem cred unlock` to pick up the new agent.
74
+
75
+ `atem cred projects` sends this repo's Git remote, and the project names atem
76
+ remembers, to Astation's credential picker, encrypted to your Mac. An
77
+ unlocked atem also sends it on its own whenever it connects to Astation (the
78
+ TUI, `atem pair`, and right after `atem cred unlock`), so you need
79
+ `atem cred projects` only to send it right away from another repo. Retrieving
80
+ values from Astation's local Credentials store (`atem cred get/list`) is not
81
+ available yet; it is described in the
82
+ [encryption design](https://github.com/Agora-Build/Atem/blob/main/designs/e2e-encryption.md).
83
+
84
+ Updated clients and key agents retain the remote's original capitalization,
85
+ such as `github.com/Agora-Build/Atem`; project identity and duplicate checks
86
+ ignore case. Older clients/agents may report lowercase names. Reports are
87
+ encrypted even when memory encryption is off and can remain in the picker
88
+ after the sending command exits. You can also enter another Git remote in
89
+ Astation's Credentials editor.
90
+
91
+ See [pairing, unlocking and project suggestions](https://github.com/Agora-Build/Atem/blob/main/docs/credentials.md)
92
+ for the steps when Atem runs on another machine and for upgrade troubleshooting.
93
+
33
94
  ### Tokens
34
95
 
35
96
  ```bash
@@ -65,6 +126,22 @@ atem config convo --validate # Validate existing config without modif
65
126
  atem config convo --config <PATH> # Use a specific config file
66
127
  ```
67
128
 
129
+ ### Vault (shared cross-agent context)
130
+
131
+ ```bash
132
+ atem vault new --summary "auth refactor context" # Create a vault, prints its id
133
+ atem vault list # List vaults you can read
134
+ atem vault read --vault-id <id> # Current contents
135
+ atem vault read --vault-id <id> --history # Every version (shown eN vM)
136
+ atem vault read --vault-id <id> --format plain # Bare text (pipe into a prompt)
137
+ atem vault write --vault-id <id> --text "decided: JWT in cookie" # Append an entry
138
+ atem vault write --vault-id <id> --entry-id 3 --text "..." # Override entry e3
139
+ atem vault set-summary --vault-id <id> --text "..." # Update the summary
140
+ ```
141
+
142
+ Requires pairing with Astation. Lets multiple atems (each driving an agent)
143
+ share a versioned, append-only context store hosted on the Astation relay.
144
+
68
145
  ### Memory & Skills (shared across agents and machines)
69
146
 
70
147
  Requires pairing with Astation. Agents learn from each other: facts and skills
@@ -83,12 +160,16 @@ atem memory search "valkey" # Local full-text search (offli
83
160
  atem memory replace <id> "the fact as it is now" # New fact replaces the old one (history kept)
84
161
  atem memory invalidate <id> # Mark outdated without a replacement
85
162
  atem memory rm <id> # Remove everywhere
163
+ atem memory purge <id> [--yes] # Remove a fact that contained a credential, stop re-harvesting it (asks first)
164
+ atem memory apply # Rewrite the managed blocks and skills from the local store
86
165
  atem memory status # Account, machine, project, pending changes
87
166
 
88
167
  atem skill add ./my-skill # Directory with SKILL.md (global by default)
89
168
  atem skill list
169
+ atem skill rm <name> # Remove everywhere
90
170
  atem skill history <name> # Every version, newest first
91
171
  atem skill restore <name> --version 3 # Re-push an old version as a new one
172
+ atem skill purge <name> --version 3 [--yes] # Erase versions that contained a credential (or --all-versions; asks first)
92
173
  ```
93
174
 
94
175
  Listings show short ids like `8245ecf6…e6fe` (first 8 + last 4 characters).
@@ -103,7 +184,33 @@ Memories are applied as a managed block in `~/.claude/CLAUDE.md`,
103
184
  `~/.codex/AGENTS.md` and `<repo>/CLAUDE.local.md`; skills go to
104
185
  `.claude/skills` and `.agents/skills`. Files tracked by git are never written.
105
186
  Anything that looks like a credential value is refused; save the
106
- credential's name, never its value. See `designs/atem-memory.md`.
187
+ credential's name, never its value. See the [memory design](https://github.com/Agora-Build/Atem/blob/main/designs/atem-memory.md).
188
+
189
+ Works with end-to-end encryption on or off. When it is on, changes sync only
190
+ while the device is unlocked (`atem cred unlock`); see below.
191
+
192
+ ### End-to-end encryption
193
+
194
+ Turned on or off in Astation (Settings > Security > End-to-End Encryption).
195
+ When it is on, memory content, skill files and vault content are encrypted on
196
+ this machine before they reach the relay, and project names become keyed hashes.
197
+ Your Mac, verified Atem devices holding the account key, and holders of the
198
+ recovery material can decrypt that content. The relay still sees routing identifiers and metadata,
199
+ such as timestamps and ciphertext sizes; it is not authoritative for device
200
+ trust or encryption state. Migration cannot prove that a server erased old
201
+ plaintext backups.
202
+
203
+ The device must be verified (`atem pair`) and unlocked (`atem cred unlock`).
204
+ While it is locked, `atem sync` keeps changes queued. Switching encryption on
205
+ or off migrates existing data; each verified atem finishes its part at its next
206
+ `atem cred unlock` (`atem sync` alone doesn't contact Astation). **Turning on**
207
+ or **Turning off** is a pending migration, even when the field counts show
208
+ no remaining plaintext or obsolete fields. Astation commits the final state
209
+ after accepting a verified migration completion; the CLI can then disconnect.
210
+ Turning encryption off migrates shared data to plaintext; local Astation
211
+ Keychain credentials keep their protection. The local `knowledge.db` stays
212
+ plain text (mode 0600). See the [user guide](https://github.com/Agora-Build/Atem/blob/main/docs/credentials.md)
213
+ and [protocol design](https://github.com/Agora-Build/Atem/blob/main/designs/e2e-encryption.md).
107
214
 
108
215
  ### Dev Servers
109
216
 
@@ -119,6 +226,8 @@ atem serv rtc --background # Run as background daemon
119
226
  atem serv diagrams # Host diagrams from SQLite (HTTP)
120
227
  atem serv diagrams --port 9000
121
228
  atem serv diagrams --background
229
+ atem serv files ~/docs # Serve a directory or file over HTTPS (Markdown rendered)
230
+ atem serv files ~/docs --background # Port auto-picked; reused next run
122
231
  atem serv webhooks # Receive Agora webhooks locally (auto-tunneled via ngrok)
123
232
  atem serv webhooks --no-tunnel # Local listener only — bring your own tunnel
124
233
  atem serv webhooks --background # Run as background daemon
@@ -142,6 +251,8 @@ done
142
251
 
143
252
  **`serv diagrams`** — SQLite-backed HTTP server for hosting AI-generated HTML diagrams.
144
253
 
254
+ **`serv files`** — serves a directory (or a single file) over HTTPS. Markdown is rendered to HTML; append `?raw=1` to any URL for the raw bytes. Useful for browsing AI-generated docs on a remote machine.
255
+
145
256
  **`serv webhooks`** — local receiver for Agora webhook events (ConvoAI: `agent_joined`, `agent_left`, `agent_history`, `agent_error`, `agent_metrics`, …; RTC NCS events). Validates `Agora-Signature-V2` (HMAC-SHA256) when a `secret` is configured in `webhooks.toml`; accepts unsigned events otherwise with a warning. Live web console at `http://127.0.0.1:9090/` shows incoming events; each event also prints a one-line summary to stdout. Default tunnel provider is **ngrok**; set `tunnel_provider = "cloudflared"` for zero-auth quick tunnels. Use `--no-tunnel` if you're running cloudflared / ngrok separately for stable URLs across atem restarts.
146
257
 
147
258
  **Channel placeholders** — `--channel` accepts `{appid}` (first 12 chars of the active app id) and `{ts}` (unix epoch seconds at startup). Useful in for-loops to match the auto-gen channel format.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agora-build/atem",
3
- "version": "0.6.10",
3
+ "version": "0.6.13",
4
4
  "description": "A terminal that connects people, Agora platform, and AI agents.",
5
5
  "bin": {
6
6
  "atem": "bin/atem"