Repository navigation
feat(personal): install pinned Paseo plugins at sandbox startup - #9
Merged
Merged
Conversation
…h quote-notes Add a background startup command that runs paseo-plugins-install.sh. It waits for the Paseo daemon from the separate paseo kit, enables the global plugin switch, and installs each listed plugin from a source pinned to a full commit (git) or exact version (npm). The first plugin is quote-notes (Codex Style Annotations 0.2.2) at 5ce92527c99a328b28775c7d745f324f2cc84309. The kit gains its first commands block and one egress host, github.com. See personal/docs/decisions/0003. scripts/verify section 3d checks the installer.
…4.0) Add npm:@gpambrozio/paseo-skills at exact version 0.4.0, the version the Paseo registry lists. The plugin lists the skills each agent session can use, renders each SKILL.md and can invoke one. It reads ~/.claude, ~/.codex and ~/.agents/skills, writes nothing, and has no network or subprocess calls (reviewed at 0.4.0; tarball sha512 recorded in the README and checked against the registry). First npm-sourced plugin, so caps.network gains registry.npmjs.org, and scripts/verify now fails if an npm-sourced plugin is listed without that host.
…0.5.0) Add npm:paseo-plugin-mermaid at exact version 0.5.0, the version the Paseo registry lists. The plugin draws mermaid code blocks in chat as diagrams and opens .mmd files as diagrams. It is client-only: no server code, no network calls, no subprocess (reviewed at 0.5.0; tarball sha512 recorded in the README and checked against the registry).
…autiful-chat) Add git:ABorakati/beautiful-chat at commit 42b61d8301b5400a67821bbbfcf99fa8b681dc37, the commit the Paseo registry lists. It redraws chat timeline items as typed, syntax-highlighted cards. Its transformers do not gate on provider, so it applies to every agent, not only Oh My Pi. Its manifest runs `npm ci --include=dev` at install, unsandboxed. At the pinned commit all 361 lockfile entries resolve from registry.npmjs.org with integrity hashes and the only install script is fsevents (macOS only). Documented in the README and ADR 0003 as a point-in-time review. It conflicts with mermaid by default: its "Assistant markdown" setting must be turned off once per browser origin, which the kit cannot do because the setting lives in localStorage. Documented in the README. Hardening from adversarial review of the whole branch: - install_plugin now also refuses git sources that are not exactly owner/repo and npm sources that carry a version, tag or non-registry spec, at run time. - scripts/verify section 3d requires the git install to keep --ref "$pin" and anchors the source shapes. - The deadline is per plugin, no sleep after the last attempt, and an already installed plugin at a different revision is logged, not silently skipped. - README and ADR corrected: setting name, localStorage origin caveat, what was tested.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
A new sandbox starts with Paseo's global
pluginsEnabledswitch unset (treated as off) and no plugins installed, so the author's Paseo plugins had to be installed by hand every time. Thepersonalkit was files-only; a plugin install cannot be a file drop because it needs a running daemon.What changed
The
personalkit gains one background startup command that runs~/paseo-plugins-install.sh. The script waits for the Paseo daemon from the separatepaseokit, enables plugins, and installs each listed plugin from a pinned source. It always exits 0 and logs to~/.local/state/paseo/paseo-plugins.log, so it cannot fail a sandbox create. Without the paseo kit it installs nothing.One commit per plugin:
quote-notes0.2.2git:xzthemeofsss/paseo-plugins@5ce92527c99a328b28775c7d745f324f2cc84309skills0.4.0npm:@gpambrozio/paseo-skills@0.4.0mermaid0.5.0npm:paseo-plugin-mermaid@0.5.0beautiful-chat0.1.0git:ABorakati/beautiful-chat@42b61d8301b5400a67821bbbfcf99fa8b681dc37Reviewed and not included:
progress(declined),design-canvas(too new, deferred). Not Cafe (its auto-updater would undo the pins).Reasoning is in
personal/docs/decisions/0003-install-paseo-plugins-at-startup.md.Plan as executed
personal/files/home/paseo-plugins-install.sh(new, mode 0755): the installer.install_pluginrefuses anything butgit:owner/repowith a lowercase 40-hex commit, ornpm:packagewith an exactx.y.z. No registry-id installs.personal/spec.yaml:commandsstartup entry (background: true), file record,caps.network.allow: [github.com, registry.npmjs.org].personal/scripts/verifysection 3d: checks the guard is present, that onlyinstall_plugincallspaseo plugin installand keeps--ref "$pin", that every call is pinned, and that an npm plugin implies the npm host.Verification
Run on Linux in the dev sandbox:
bash personal/scripts/verify: 29 passed, 0 failed (shellcheck included).scripts/validate-kits.pyagainst Patterns pinned ata290d5d8…: all 6 kits valid.pytest scripts/tests: 69 passed.ruff checkandruff format --check: clean.scan_unsafe_shell.py personal: 0 errors, 0 warnings.PASEO_HOME(real git clones and npm installs): frompluginsEnabledunset, one run enabled plugins and installed all four;paseo plugin lsshowed eachrunningat its pin. A second run skipped all four. No daemon: logged and exited 0. Guard refused a branch, a short or uppercase SHA, an npm range or tag, a bare registry id,git:sources with extra segments or@ref, andnpm:github:sources before callingpaseo. Concurrent run exited at the run lock; TERM left no lock.--ref, an npm tag, an npmgithub:source, a git@ref, and a trailing comment each fail section 3d.skillsandmermaidwere checked against the registry listing and match the lockfiles the daemon wrote.Not verified (be honest about these before merging):
acq runwith the paseo kit on msb or sbx (noacqin the dev sandbox).git clonebehind an HTTPS-inspecting proxy whose CA is not in the system store.gitleaks(not installed in the dev sandbox; the kit's own credential scan passes).Rollback
Revert the merge, or drop the
commandsentry and thepaseo-plugins-install.shrecord frompersonal/spec.yaml. Sandboxes already created keep their plugins until recreated (paseo plugin remove <id>removes one).Security impact
commandsblock in this kit, and two new egress hosts (github.com,registry.npmjs.org).caps.networkis sandbox-wide, so every agent in the sandbox can reach them.beautiful-chatrunsnpm ci --include=devat install with the daemon's privileges. At the pinned commit all 361 lockfile entries resolve fromregistry.npmjs.orgwith integrity hashes and the only install script isfsevents(macOS only). That is a lockfile-metadata review, not a read of 360 packages.scripts/verifydoes not inspect a plugin'sbuildlist; the README tells whoever bumps a pin to read it.Known follow-up (once merged)
mermaidandbeautiful-chatconflict until Beautiful Chat's Assistant markdown setting is switched off. That setting lives in browserlocalStorage(per origin), so the kit cannot set it. See the README.AI assistance: this change was written with OpenCode (claude-sonnet-5.5) and requires human review before merge.
Co-authored-by: OpenCode Agent bmogilefsky@gmail.com