Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions plugins/codex-parallel-verify/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,9 @@ Forked candidates stay in the baseline after `discard`, because a worktree workf
- Exit 125 from the CLI means LayerFS refused the call. `Exists` on a second `init` of the same name is not a prompt to retry.
- `discard` and `keep` do not delete commits. Discarded losers stay as deduplicated history. Unmounting with discard drops an uncommitted overlay and copies nothing.
- A Cursor plugin, the DeepSeek Harness UI, and changes to LayerFS itself are out of scope.

## 0.1.1 verification

The implementation passed 43 tests and a real Linux run on Docker 29.1.3 (Engine API 1.52): initialize with an install, fork two Branches, edit the same file differently, and run `verify-all --jobs 2`. One candidate passed and one failed as expected. Both completed one mount, exec, commit and unmount without cleanup errors; unchanged verification state returned `UpToDate`.

The 0.1.1 metadata update passed the affected tests. These checks do not qualify macOS or the Windows-host worker route, and are not performance measurements. The listing remains `preview`.
2 changes: 1 addition & 1 deletion plugins/codex-parallel-verify/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ node --input-type=module -e 'import { loadSdk } from "./src/load.js"; const sdk

Success prints `function function`. If it does not, stop. Do not import `@layerfs/agent/internal`.

6. A live init needs a Linux `layerfs-daemon` and a runtime image built from commit {{layerfs.commit}}. Build them the way `api/README.md` and `api/how-to-use/runtime.md` in the LayerFS checkout describe (`npm --prefix "$LAYERFS_REPO/api" run build:native` builds the addon on a macOS or Linux host). Then set `LAYERFS_HOME` (for example `$HOME/.layerfs-codex`), `LAYERFS_IMAGE` to that image's sha256 id, and `LAYERFS_DAEMON` to the absolute path of `layerfs-daemon`. On macOS and Windows also set `LAYERFS_BUNDLE` to the sealed Linux bundle from that same commit (it contains `layerfs-daemon`, `layerfs.node`, and `manifest.json`). The CLI calls `runtime.worker.start()` once and sets `LAYERFS_WORKER_ENDPOINT` to `$LAYERFS_HOME/worker/endpoint.json`. Do not start a second worker for the same home. On Linux, leave `LAYERFS_WORKER_ENDPOINT` unset so Store calls stay in-process. On Windows, pass `--wsl-distro`, `--wsl-user`, `--wsl-node`, and `--wsl-home` when the runtime defaults (Ubuntu, root, `/usr/local/bin/node`) are wrong.
6. A live init needs a Linux `layerfs-daemon` and a runtime image built from commit {{layerfs.commit}}. Build them the way `api/README.md` and `api/docs/runtime.md` in the LayerFS checkout describe (`npm --prefix "$LAYERFS_REPO/api" run build:native` builds the addon on a macOS or Linux host). Then set `LAYERFS_HOME` (for example `$HOME/.layerfs-codex`), `LAYERFS_IMAGE` to that image's sha256 id, and `LAYERFS_DAEMON` to the absolute path of `layerfs-daemon`. On macOS and Windows also set `LAYERFS_BUNDLE` to the sealed Linux bundle from that same commit (it contains `layerfs-daemon`, `layerfs.node`, and `manifest.json`). The CLI calls `runtime.worker.start()` once and sets `LAYERFS_WORKER_ENDPOINT` to `$LAYERFS_HOME/worker/endpoint.json`. Do not start a second worker for the same home. On Linux, leave `LAYERFS_WORKER_ENDPOINT` unset so Store calls stay in-process. On Windows, pass `--wsl-distro`, `--wsl-user`, `--wsl-node`, and `--wsl-home` when the runtime defaults (Ubuntu, root, `/usr/local/bin/node`) are wrong.
7. Initialize once from the plugin checkout:

```bash
Expand Down
10 changes: 10 additions & 0 deletions plugins/codex-parallel-verify/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,16 @@
},
"status": "preview",
"versions": [
{
"version": "0.1.1",
"commit": "259fed402f84db273929f3a83ad7a8ce32888217",
"date": "2026-10-28",
"layerfs": {
"version": "v1.1.0",
"commit": "4b5276216a2e9f780194a554ef9f0c33f9b6ba6d"
},
"notes": "Update SDK checkout paths and pin LayerFS with Docker API negotiation (#476); Linux API 1.52 two-candidate verification passed."
},
{
"version": "0.1.0",
"commit": "e440813d6ca2cc973ddae517319addeb52b694b6",
Expand Down
16 changes: 11 additions & 5 deletions plugins/cursor-agents/README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
Cursor coding agents work on LayerFS Branches and Workspaces instead of git worktrees. One task gets one Branch. File edits go through `fs.*`. Bash runs as `workspace.mount`, then `exec`, `commit`, and `unmount`. Each LayerFS call is attempted once.

Plugin id: `cursor-agents`. Package: `layerfs-cursor-agents` `0.1.0`. This repository is for Cursor only. It does not install Claude Code skills, hooks, or configuration, and it does not ship a history dashboard.
Plugin id: `cursor-agents`. Package: `layerfs-cursor-agents` `0.1.1`. This repository is for Cursor only. It does not install Claude Code skills, hooks, or configuration, and it does not ship a history dashboard.

The LayerFS commit this version was built against is `commit` in [`layerfs.json`](https://github.com/earsonlau/layerfs-cursor-agents/blob/1802b525cca2ff9730678c01f8aefcc107223940/layerfs.json): `ad78914e36b258b360daf13aec164b5655814689` (LayerFS v1.1.0).
The LayerFS commit this version was built against is `commit` in [`layerfs.json`](https://github.com/earsonlau/layerfs-cursor-agents/blob/66aafb319a6bf05a4745763c325b87cb6016587f/layerfs.json): `4b5276216a2e9f780194a554ef9f0c33f9b6ba6d` (LayerFS v1.1.0).

## What it adds

- A Cursor skill at [`.cursor/skills/layerfs-agent/SKILL.md`](https://github.com/earsonlau/layerfs-cursor-agents/blob/1802b525cca2ff9730678c01f8aefcc107223940/.cursor/skills/layerfs-agent/SKILL.md). The same skill is at [`.agents/skills/layerfs-agent/SKILL.md`](https://github.com/earsonlau/layerfs-cursor-agents/blob/1802b525cca2ff9730678c01f8aefcc107223940/.agents/skills/layerfs-agent/SKILL.md) for agents that look there.
- A Cursor skill at [`.cursor/skills/layerfs-agent/SKILL.md`](https://github.com/earsonlau/layerfs-cursor-agents/blob/66aafb319a6bf05a4745763c325b87cb6016587f/.cursor/skills/layerfs-agent/SKILL.md). The same skill is at [`.agents/skills/layerfs-agent/SKILL.md`](https://github.com/earsonlau/layerfs-cursor-agents/blob/66aafb319a6bf05a4745763c325b87cb6016587f/.agents/skills/layerfs-agent/SKILL.md) for agents that look there.
- `layerfs-cursor-setup`, which checks out that LayerFS commit, links the official `layerfs` command onto `PATH`, and writes `LAYERFS_*` settings.
- On Linux, Store calls stay in the agent process. On macOS and Windows the setup starts the home worker with `@layerfs/runtime` and sets `LAYERFS_WORKER_ENDPOINT`.

Expand All @@ -18,7 +18,7 @@ The skill is the procedure. Short form:
2. `branch.fork` one Branch for the task. Do not add a git worktree.
3. Edit with `fs.write`, `fs.edit`, `fs.apply`, and the other `fs.*` calls.
4. Run bash as `sandbox.create` (when you need a Sandbox), then `workspace.mount`, `workspace.exec`, `workspace.commit`, and `workspace.unmount`. Unmount in `finally`. On `Conflict`, stay in that Workspace until you resolve it or discard it.
5. On `Conflict`, `Busy`, or `NoSuchSandbox`, follow [`refusals.md`](https://github.com/earsonlau/layerfs-cursor-agents/blob/1802b525cca2ff9730678c01f8aefcc107223940/.cursor/skills/layerfs-agent/references/refusals.md) once. Do not replay the refused call.
5. On `Conflict`, `Busy`, or `NoSuchSandbox`, follow [`refusals.md`](https://github.com/earsonlau/layerfs-cursor-agents/blob/66aafb319a6bf05a4745763c325b87cb6016587f/.cursor/skills/layerfs-agent/references/refusals.md) once. Do not replay the refused call.

`examples/task-branch.mjs` forks a Branch (or keeps it if the name is taken) and writes one file. It imports the public SDK from `LAYERFS_REPO`.

Expand Down Expand Up @@ -61,4 +61,10 @@ When `LAYERFS_REPO` points at the pinned checkout, the same command also imports

## License

MIT. See [LICENSE](https://github.com/earsonlau/layerfs-cursor-agents/blob/1802b525cca2ff9730678c01f8aefcc107223940/LICENSE).
MIT. See [LICENSE](https://github.com/earsonlau/layerfs-cursor-agents/blob/66aafb319a6bf05a4745763c325b87cb6016587f/LICENSE).

## 0.1.1 verification

The implementation passed 27 tests, with the optional Docker test skipped in that run, then passed the real Docker Workspace round-trip separately on Linux with Docker 29.1.3 (Engine API 1.52). The installer regression suite also passed after checking the relocated CLI install target.

The 0.1.1 metadata update passed the affected tests. These checks do not qualify macOS or the Windows-host worker route, and are not performance measurements. The listing remains `preview`.
10 changes: 10 additions & 0 deletions plugins/cursor-agents/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,16 @@
},
"status": "preview",
"versions": [
{
"version": "0.1.1",
"commit": "66aafb319a6bf05a4745763c325b87cb6016587f",
"date": "2026-10-28",
"layerfs": {
"version": "v1.1.0",
"commit": "4b5276216a2e9f780194a554ef9f0c33f9b6ba6d"
},
"notes": "Update setup, package links, CLI and addon paths for the upstream directory split; real Linux API 1.52 Workspace round-trip passed."
},
{
"version": "0.1.0",
"commit": "1802b525cca2ff9730678c01f8aefcc107223940",
Expand Down