{"id":"paseo-prompt-manager","repo":"yannelli/paseo-prompt-manager","url":"https://github.com/yannelli/paseo-prompt-manager","name":"paseo-prompt-manager","description":"Markdown prompt library for Paseo with local version history, imports, and optional Git sync","categories":["productivity"],"platforms":[],"caveats":[],"images":["https://raw.githubusercontent.com/yannelli/paseo-prompt-manager/74d00cada28c88dc5de7f43de4f85ddfab2cd9b4/docs/images/github-banner.png","https://raw.githubusercontent.com/yannelli/paseo-prompt-manager/74d00cada28c88dc5de7f43de4f85ddfab2cd9b4/docs/promo/light/library.png","https://raw.githubusercontent.com/yannelli/paseo-prompt-manager/74d00cada28c88dc5de7f43de4f85ddfab2cd9b4/docs/promo/light/composer.png","https://raw.githubusercontent.com/yannelli/paseo-prompt-manager/74d00cada28c88dc5de7f43de4f85ddfab2cd9b4/docs/promo/light/history.png","https://raw.githubusercontent.com/yannelli/paseo-prompt-manager/74d00cada28c88dc5de7f43de4f85ddfab2cd9b4/docs/promo/light/import.png","https://raw.githubusercontent.com/yannelli/paseo-prompt-manager/74d00cada28c88dc5de7f43de4f85ddfab2cd9b4/docs/promo/light/git-sync.png"],"themes":[],"health":{"manifestValid":true,"hasReadme":true,"hasLicense":true,"hasTests":true,"hasTypecheckScript":true,"updatedRecently":true},"scannedAt":"2026-10-20T14:48:47.989Z","addedAt":"2026-09-10T18:09:18+03:00","version":"0.5.0","security":{"status":"passed","blockingFindings":0,"advisoryFindings":0,"scannedAt":"2026-10-20T14:48:06.627Z","commit":"74d00cada28c88dc5de7f43de4f85ddfab2cd9b4"},"author":"Ryan Yannelli","license":"MIT","paseoVersionRequirement":">=0.11.0-beta.3","descriptionNodes":[{"type":"text","text":"Markdown prompt library for Paseo with local version history, imports, and optional Git sync"}],"caveatNodes":[],"manifest":{"id":"paseo-prompt-manager","description":"Markdown prompt library with version history, imports, and optional Git sync","requirements":{"paseo":">=0.11.0-beta.3"}},"repoMeta":{"stars":6,"defaultBranch":"main","pushedAt":"2026-10-20T14:27:30Z"},"owner":{"login":"yannelli","avatarUrl":"https://avatars.githubusercontent.com/u/59575788?v=4"},"installNotesHtml":"<p>Enable plugins in <strong>Settings → Plugins</strong>, then install from npm:</p>\n<pre><code class=\"language-sh\">paseo plugin add npm:@yannelli/paseo-prompt-manager\n</code></pre>\n<p>The plugin requires Paseo <code>0.11.0-beta.3</code> or later on the daemon and on each app that shows it. Git sync also requires Git on the daemon host.</p>\n<p>For Paseo 0.9 and 0.10, install release 0.2.0 with <code>paseo plugin add npm:@yannelli/paseo-prompt-manager@0.2.0</code>. For Paseo 0.8, install 0.2.0 from Git with <code>paseo plugin add yannelli/paseo-prompt-manager --ref v0.2.0</code>.</p>\n<p>Open <strong>Prompts</strong> in the sidebar to manage your library. Paseo provides the plugin's runtime dependencies.</p>","readmeText":"![Prompt Manager for Paseo: your prompts, versioned.](docs/images/github-banner.png)\n\n# Paseo Prompt Manager\n\nA Markdown prompt library for [Paseo](https://paseo.sh). Create, edit, search, and reuse prompts across agents, with local version history and optional Git sync.\n\n## Install\n\nEnable plugins in **Settings → Plugins**, then install from npm:\n\n```sh\npaseo plugin add npm:@yannelli/paseo-prompt-manager\n```\n\nThe plugin requires Paseo `0.11.0-beta.3` or later on the daemon and on each app that shows it. Git sync also requires Git on the daemon host.\n\nFor Paseo 0.9 and 0.10, install release 0.2.0 with `paseo plugin add npm:@yannelli/paseo-prompt-manager@0.2.0`. For Paseo 0.8, install 0.2.0 from Git with `paseo plugin add yannelli/paseo-prompt-manager --ref v0.2.0`.\n\nOpen **Prompts** in the sidebar to manage your library. Paseo provides the plugin's runtime dependencies.\n\n## Use prompts with agents\n\n- Choose **Prompts** in the agent composer bar to search saved prompts. Each result shows the title and up to four preview lines. Choose a result to send that prompt to the agent. The button shows after the agent starts.\n- Choose **Prompts** in the workspace header to search saved prompts and copy one to the clipboard. It also shows on a **New Agent** tab, where you paste the prompt into the first message.\n- In the composer attachment menu, choose **Saved prompt**. Search by title, filename, or words in the prompt, then attach it to your message.\n- Submit `/prompts` in an agent composer to open the prompt panel.\n- Submit `/prompt code-review` to send `code-review.md` to the current agent and start a turn.\n- From the prompt panel, choose **Send to agent** to send the selected prompt.\n\n### Variables\n\nWrap a placeholder in double braces to fill it in each time you use the prompt. Add a default after a pipe:\n\n```md\nTake a look at {{ module }}, find dead code, and clean it up.\nCreate a Linear ticket from this conversation and assign it to {{ person | me }}.\n```\n\nA name can use letters, digits, `_`, `-`, and spaces, such as `{{ Product Manager }}`. Braces in code spans and code blocks are never variables, so code such as `style={{ flex: 1 }}` or `${{ github.sha }}` is sent as written. Elsewhere, type `\\{{ name }}` for literal braces.\n\nThe editor lists the variables it finds under the Markdown, and **Preview** highlights each one with its default. Choosing a prompt with variables from the **Prompts** button or **Send to agent** opens a form with one field per variable, prefilled with its default. A variable used more than once is asked for once. Fields without a default must be filled in. `/prompt` can't show the form, so it fills in defaults and refuses a prompt with a variable that has none. Attachments contain the prompt as saved, with its placeholders.\n\nAttachment search matches many words across the title, filename, and content. Exact names and title matches appear first, with up to 50 results. Each result shows the title and a one-line preview of the first four body lines. Attachments contain a snapshot of the saved prompt.\n\n## Edit and version prompts\n\nChoose **New prompt**, enter a filename and Markdown content, then save. The first Markdown heading becomes the title. Files keep their normalized names when you edit their content.\n\nOpen **Details** in the editor to add a **Description** and comma-separated **Tags**. Search includes both fields. The folder chip above the list filters by folder and lists tags; the **Archived** chip includes archived prompts.\n\nFolders and subfolders are directories inside the library. Create them from the folder chip or the editor's **Folder** field. Selecting another folder and saving moves the prompt and retains its version history. Nested prompts use paths such as `/prompt engineering/security/code-review`.\n\nUse the expand button to give the editor the available workspace, and the **Edit / Preview** toggle to switch between Markdown and a formatted preview.\n\nBy default, the library lives at `~/.config/paseo/prompt-lib/`:\n\n```text\nprompt-lib/\n├── code-review.md\n└── versions/\n    └── code-review/\n        ├── code-review.2026-09-09T12-00-00-000Z_v1.md\n        └── code-review.2026-09-09T12-05-00-000Z_v2.md\n```\n\nEach save creates a full Markdown snapshot. **History** opens a side panel to inspect a snapshot as source or preview and restore it as a new version. **Archive** removes the current prompt and retains its history; turn on the **Archived** chip to find it, then choose **Restore**.\n\nDescriptions and tags use a `paseo` JSON field in Markdown frontmatter and are included in snapshots. Agents receive the prompt body. Nested history follows `versions/<folder>/<prompt-name>/<prompt-name>.<timestamp>_v<number>.md`; existing flat prompts keep their paths.\n\nYou can also edit files with your own editor. Saving a stale draft in the plugin rejects the write so you can reload the changed file. The plugin preserves externally edited content before replacing or archiving it.\n\n## Import Markdown files and folders\n\nOpen **Prompts → Import**.\n\n- In a browser client, use **Choose Markdown files** or **Choose folder** to import from your device.\n- On any client, enter absolute paths or `~/` paths under **Files or folders on the Paseo host**, one per line, then choose **Import paths**.\n\nFolders include subfolders. Choose an import destination to copy `.md` files into that folder and create their first versions. Folder imports preserve the selected folder and its subfolders with normalized names. Existing paths, including archived prompts, are skipped and reported. Source files stay in place.\n\nEach import supports up to 100 Markdown files totaling 8 MB, with a 512 KB limit per file. Hidden entries, symbolic links, and `versions` folders are excluded. Host folder scans stop at 5,000 entries.\n\n## Choose a library directory\n\nOpen **Prompts → Settings**, enter an absolute directory or `~/` path, and choose **Save settings**. Changing the directory opens a different library; it does not move files.\n\nPreferences live at `~/.config/paseo/prompt-manager.json`. If `XDG_CONFIG_HOME` is set, it replaces `~/.config` for the default library and preferences. The library belongs to the selected daemon host and is shared across its clients and agents.\n\n## Optional Git sync\n\n1. Configure your Git author name, email, and remote credentials on the daemon host. Background sync cannot answer password or passphrase prompts, so use a credential helper or an SSH agent.\n2. Turn **Git sync** on in library settings and save.\n3. Paste a remote URL, such as `git@github.com:you/prompts.git`, and choose **Set up**. The repository can be empty or already hold prompts from another machine. Leave the branch blank to use the remote's default branch. Leave the URL blank for local Git checkpoints only.\n4. Under **When to sync**, choose a mode:\n   - **Manual**: sync only when you choose **Sync now**.\n   - **Automatic**: sync a few seconds after each change.\n   - **Scheduled**: sync every 5, 15, 30, or 60 minutes.\n\nAutomatic and scheduled modes also pull when you open the library. Each sync commits prompt files and version history, merges the remote branch, and pushes. Edits to different prompts on two machines merge. If both machines change the same prompt, sync stops, leaves local commits intact, and shows the error in the sidebar and settings. Resolve the conflict with Git, then sync again. The library must be the repository root. Unrelated staged files block sync.\n\nYou can change the remote URL or branch later in settings. Clearing the URL disconnects the remote.\n\n## Screenshots\n\nThese images are illustrations of the plugin UI with sample data. They are not captures of a running Paseo app. Each image is 1920×1080 in dark and light themes. See [promo images](docs/promo-images.md) to render them again.\n\n### Prompt library\n\n![Prompts panel with the library list and the Code review prompt open in the editor](docs/promo/light/library.png)\n\n### Composer picker\n\n![Prompts popover above the agent composer with search results for review](docs/promo/light/composer.png)\n\n### Version history\n\n![Expanded editor with the version history panel and version 1 selected](docs/promo/light/history.png)\n\n### Import\n\n![Import prompts view with device and host sources and an import result](docs/promo/light/import.png)\n\n### Git sync\n\n![Library settings with Git sync on and the repository status](docs/promo/light/git-sync.png)\n\nThe dark versions are in [docs/promo/dark](docs/promo/dark). Open [docs/promo/index.html](docs/promo/index.html) to compare both themes.\n\n## Development\n\nRequires Node.js 24 or later and npm.\n\n```sh\ngit clone https://github.com/yannelli/paseo-prompt-manager.git\ncd paseo-prompt-manager\nnpm ci\nnpm run check\npaseo plugin install \"$PWD\"\n```\n\nAfter changing plugin code, run the checks and reload:\n\n```sh\npaseo plugin reload paseo-prompt-manager\npaseo plugin ls paseo-prompt-manager\npaseo plugin logs paseo-prompt-manager\n```\n\nThe unit tests cover storage, imports, search, versioning, conflicts, Git sync, and the release script using temporary directories and local Git remotes. End-to-end tests run the plugin in the Paseo web, desktop, Android, and iOS apps; see [docs/e2e.md](docs/e2e.md).\n\n```sh\nnpx playwright install chromium\nnpm run e2e:web\n```\n\n[docs/INDEX.md](docs/INDEX.md) lists project notes, including which Paseo SDK release adds each plugin API this project uses. Read it before changing `requirements.paseo` or the `@getpaseo/plugin` version.\n\n## Releases\n\nGitHub Actions releases on qualifying pushes to `main` and `beta`. `main` publishes `X.Y.Z` to the npm `latest` dist-tag and marks the GitHub release as Latest. `beta` publishes `X.Y.Z-beta.N` to the `beta` dist-tag as a GitHub pre-release. The workflow updates `package.json` and `package-lock.json`, pushes an annotated tag, publishes release notes, and publishes [`@yannelli/paseo-prompt-manager`](https://www.npmjs.com/package/@yannelli/paseo-prompt-manager) through npm trusted publishing (OIDC) with no npm token. See [npm publishing](docs/npm-publishing.md) for the channels, package contents, and trusted publisher setup.\n\nUse Conventional Commits in commits and squash-merge titles:\n\n| Commit | Version change |\n| --- | --- |\n| `fix:`, `perf:`, `revert:` | Patch |\n| `feat:` | Minor |\n| `!` after the type/scope, or a `BREAKING CHANGE:` footer | Major, including before 1.0 |\n| `docs:`, `chore:`, `ci:`, and other types without a breaking marker | No release |\n\nRun `npm run release:dry-run` from a clean `main` or `beta` checkout with all tags fetched to preview the next release. Rerun the **Release** workflow to complete a GitHub or npm publication interrupted after its tag was pushed.\n\n## License\n\n[MIT](LICENSE), copyright 2026 Ryan Yannelli.\n"}