lshed 0.10.0 → 0.13.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.
- package/CHANGELOG.md +33 -1
- package/README.md +27 -2
- package/dist/cli.js +271 -209
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,38 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.
|
|
3
|
+
## 0.13.0 — 2026-09-05
|
|
4
|
+
|
|
5
|
+
`--agent agy` places into Google Antigravity (the `agy` CLI and the IDE).
|
|
6
|
+
|
|
7
|
+
- Skills go to `~/.gemini/config/skills/`, the one global location both the Antigravity IDE and CLI read. Instructions are concatenated into `~/.gemini/AGENTS.md`, one level above that root: agy reads both `AGENTS.md` and `GEMINI.md` there, and Gemini CLI also owns `GEMINI.md`, so lshed leaves that one alone. MCP servers go to `~/.gemini/config/mcp_config.json` in agy's shape (no `type`, `serverUrl` for http); `${VAR}` is filled by `restore`.
|
|
8
|
+
- A part above the root (`../AGENTS.md`) is backed up under `lshed/backups/<stamp>/__/` so backups never escape the backup directory.
|
|
9
|
+
- Verified on this machine with agy 1.1.26 through the VM probe (`scripts/vm/probe.sh agy`): skill, rules file, MCP list, and a linked skill all read. agy does not read `~/.agents/skills`, so it is not part of the `agents` target.
|
|
10
|
+
|
|
11
|
+
## 0.12.1 — 2026-09-05
|
|
12
|
+
|
|
13
|
+
- Fix: with `CLAUDE_CONFIG_DIR` set on a machine where Claude Code has not run yet, `restore` wrote MCP servers to `<dir>.json` next to the config dir instead of `<dir>/.claude.json` inside it, where Claude Code actually reads them. Found by the VM probe below. Without `CLAUDE_CONFIG_DIR` nothing changes.
|
|
14
|
+
|
|
15
|
+
VM probe for the other agents (`scripts/vm/`): `install-tools.sh` bakes an image with Codex, Gemini CLI, Copilot CLI, Cursor CLI and lshed; `cloud-init.yaml` injects API keys at boot and runs `probe.sh`, which restores a throwaway shed into each tool's real root and asks the tool, non-interactively, for a passphrase kept in a skill, a codeword kept in the instructions file, and the same skill again after `--link`. Where a tool can parse its own config without a model (`codex mcp list`, `gemini mcp list`, `codex debug prompt-input`) that is checked too. Run on this machine against Codex 0.153.2: Codex reads `$CODEX_HOME/skills` (deprecated in its source; the docs now name only `~/.agents/skills`), `$CODEX_HOME/AGENTS.md`, the `[mcp_servers.*]` table lshed writes, and a linked skill.
|
|
16
|
+
|
|
17
|
+
## 0.12.0 — 2026-09-04
|
|
18
|
+
|
|
19
|
+
MCP servers follow the shed into the other agents.
|
|
20
|
+
|
|
21
|
+
- `restore --agent codex|gemini|copilot|cursor` now writes the profile's MCP servers too: Codex into `config.toml` (`[mcp_servers.*]`), Gemini into `settings.json`, Copilot into `mcp-config.json`, Cursor into `mcp.json`. The shed keeps Claude Code's shape; each target gets its own (`httpUrl`, `type: local` + `tools`, `${env:VAR}`, `env_vars` / `bearer_token_env_var`).
|
|
22
|
+
- Secrets stay out of Codex and Cursor config files, which take variable names or `${env:VAR}`. Gemini and Copilot take values, filled from your shell at `restore` like settings keys.
|
|
23
|
+
- Codex's `config.toml` is edited one table at a time. Comments, ordering and unrelated tables are left untouched.
|
|
24
|
+
- `lshed init --agent gemini` (or any of the others) reads that tool's MCP servers into the shed, masked the same way as Claude Code's. `diff` and `save` work across the translation.
|
|
25
|
+
|
|
26
|
+
— 2026-09-04
|
|
27
|
+
|
|
28
|
+
One shed, several agents.
|
|
29
|
+
|
|
30
|
+
- `--agent codex|gemini|copilot|cursor|agents` restores the same shed into another tool's config root. They all read `skills/<name>/SKILL.md` the way Claude Code does, and `~/.agents/skills/` is the shared location every one of them also reads. Codex gets `AGENTS.md`, Gemini `GEMINI.md`, Copilot `copilot-instructions.md`, each with the profile's instruction fragments concatenated; Cursor and `~/.agents` have no user-level instructions file and skip that category.
|
|
31
|
+
- Parts the target does not understand are announced and skipped instead of failing: MCP servers, settings keys and Claude Code agents/commands stay Claude-only, and Claude plugin packages are not installed elsewhere. Each agent root keeps its own state, profile and `--link` choice.
|
|
32
|
+
- `lshed init --agent codex` builds a shed from a Codex machine; a shed made by one agent restores into any other. The shed's `agent:` field is now only the default for `--agent`; `$LSHED_AGENT` also works.
|
|
33
|
+
- `lshed status` names the agent next to the root.
|
|
34
|
+
|
|
35
|
+
— 2026-09-04
|
|
4
36
|
|
|
5
37
|
Link instead of copy, on the machines where you edit.
|
|
6
38
|
|
package/README.md
CHANGED
|
@@ -245,6 +245,31 @@ Switching removes only what the previous profile placed (`-`), keeps what both u
|
|
|
245
245
|
|
|
246
246
|
Instructions fragments are ordered. `restore` writes a `CLAUDE.md` that `@`-imports each fragment, so editing a fragment in the shed shows up on the next `restore` and there is nothing to merge.
|
|
247
247
|
|
|
248
|
+
### Other agents, same shed
|
|
249
|
+
|
|
250
|
+
Codex, Gemini CLI, Copilot CLI, Cursor and Google Antigravity (`agy`) all read skills from `<their config dir>/skills/<name>/SKILL.md`, the same layout Claude Code uses, and all but Antigravity also read the shared `~/.agents/skills/`. So one shed can serve them all. Pick the target with `--agent`:
|
|
251
|
+
|
|
252
|
+
```
|
|
253
|
+
lshed restore --agent agents # ~/.agents/skills: every tool that follows the convention reads it
|
|
254
|
+
lshed restore --agent codex # ~/.codex/skills + ~/.codex/AGENTS.md
|
|
255
|
+
lshed restore --agent gemini --link # ~/.gemini/skills + ~/.gemini/GEMINI.md, as links
|
|
256
|
+
lshed restore --agent agy # ~/.gemini/config/skills + ~/.gemini/AGENTS.md (Antigravity IDE and CLI)
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
| `--agent` | root | skills | instructions file | MCP servers |
|
|
260
|
+
|---|---|---|---|---|
|
|
261
|
+
| `claude-code` (default) | `~/.claude` or `$CLAUDE_CONFIG_DIR` | yes, plus agents, commands, settings | `CLAUDE.md`, `@`-imports fragments | `~/.claude.json` |
|
|
262
|
+
| `codex` | `~/.codex` or `$CODEX_HOME` | yes | `AGENTS.md`, fragments concatenated | `config.toml` `[mcp_servers.*]` |
|
|
263
|
+
| `gemini` | `~/.gemini` | yes | `GEMINI.md`, concatenated | `settings.json` |
|
|
264
|
+
| `copilot` | `~/.copilot` or `$COPILOT_HOME` | yes | `copilot-instructions.md`, concatenated | `mcp-config.json` |
|
|
265
|
+
| `cursor` | `~/.cursor` | yes | none (Cursor's user rules live in its settings UI) | `mcp.json` |
|
|
266
|
+
| `agy` | `~/.gemini/config` | yes | `../AGENTS.md`, concatenated (agy reads `GEMINI.md` too, but Gemini CLI owns that one) | `mcp_config.json` |
|
|
267
|
+
| `agents` | `~/.agents` | yes | none | none |
|
|
268
|
+
|
|
269
|
+
MCP entries are stored in the shed in Claude Code's shape and translated on the way out: Gemini gets `httpUrl` and no `type`, Antigravity gets `serverUrl`, Copilot gets `type: local` and `tools: ["*"]`, Cursor gets `${env:VAR}` placeholders and Codex gets `env_vars` / `bearer_token_env_var` / `env_http_headers` with the variable *names*, so for those two the secret values never touch the config file. Gemini, Antigravity and Copilot do not expand placeholders, so lshed fills them from your shell at `restore`. Codex's `config.toml` is edited table by table; your comments and other settings stay as they are. `lshed init --agent gemini` reads the same files back into the shed shape, secrets masked.
|
|
270
|
+
|
|
271
|
+
Each agent root keeps its own `lshed/state.json`, so restoring into `~/.codex` never touches what lshed placed in `~/.claude`, and each can use a different profile or `--link` choice. Parts the target does not understand are announced and skipped: a profile with settings keys restores into Codex without them, with a line saying `codex 은 settings 를 다루지 않아 건너뜁니다`. Claude plugin packages are skipped the same way; `github:`/`git:` packages are cloned into every agent root that restores the profile, so give the other agents a profile without them if that is not what you want. `lshed init --agent codex` works too, and a shed made from Codex restores into Claude Code with `CLAUDE.md` generated from the same fragments. The shed's `agent:` is only a default for `--agent` (`$LSHED_AGENT` also works).
|
|
272
|
+
|
|
248
273
|
### Links instead of copies
|
|
249
274
|
|
|
250
275
|
On the machine where you do most of your editing, `restore --link` places skills, agents, commands and instruction fragments as links into the shed instead of copies. Edits in `~/.claude` land in the shed directly, `diff` has nothing to report, and `save` has nothing to do; `lshed sync` is the whole loop.
|
|
@@ -444,7 +469,7 @@ $ lshed add
|
|
|
444
469
|
```
|
|
445
470
|
lshed init [--shed <dir>] [--profile <name>] [--exclude <id...>]
|
|
446
471
|
lshed add [keys...] [--all] put things that appeared since init into the shed
|
|
447
|
-
lshed restore [profile] [--pick] [--link | --no-link] [--dry-run] [--no-backup] [--yes]
|
|
472
|
+
lshed restore [profile] [--pick] [--link | --no-link] [--dry-run] [--no-backup] [--yes] (--agent <name> to target another tool)
|
|
448
473
|
lshed status applied profile, drift, packages, missing env, new things
|
|
449
474
|
lshed diff files (or JSON keys) that differ between local and shed
|
|
450
475
|
lshed save [ids...] copy local edits back into the shed
|
|
@@ -457,7 +482,7 @@ lshed prune [--yes] drop everything no profile uses
|
|
|
457
482
|
|
|
458
483
|
Keys are `category/id`, or just `id` when unambiguous: `skills/paper-review`, `mcp/exa`, `packages/gstack`.
|
|
459
484
|
|
|
460
|
-
Global options: `--shed <dir>` (or `LSHED_HOME`; after the first restore lshed remembers it), `--root <dir>` (agent config root, default `~/.claude` or `
|
|
485
|
+
Global options: `--shed <dir>` (or `LSHED_HOME`; after the first restore lshed remembers it), `--agent <name>` (or `LSHED_AGENT`; default is the shed's `agent:`, then `claude-code`), `--root <dir>` (agent config root, default is the agent's own, e.g. `~/.claude` or `~/.codex`).
|
|
461
486
|
|
|
462
487
|
### What `restore` does
|
|
463
488
|
|