{"_id":"@amolith/pi-personas","_rev":"5-ef44e6df015650fc017dd9b32747c6fd","name":"@amolith/pi-personas","dist-tags":{"beta":"0.1.0","latest":"0.1.0"},"versions":{"0.1.0-beta.0":{"name":"@amolith/pi-personas","version":"0.1.0-beta.0","keywords":["pi-package"],"_id":"@amolith/pi-personas@0.1.0-beta.0","maintainers":[{"name":"amolith","email":"amolith@secluded.site"}],"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"456acb5bc766c5dc2daebc4cbbaf2d2cc046b635","tarball":"https://registry.npmjs.org/@amolith/pi-personas/-/pi-personas-0.1.0-beta.0.tgz","fileCount":5,"integrity":"sha512-6bidhzruSWaRlGToCK6G3tuSWiWD+dm1Dopd35nkSzTSSUFHDchoziNeGrJiUs8e++2Jk4BEqf/MrjH9g3EjuA==","signatures":[{"sig":"MEUCIFudBqlwLnYXcPF8LGUd+QWjtFSsN6Y0VSDJBdsEYiMfAiEA+Ig6zOwv9oDhFZprz2fbRfmFLfkgI1bcp09CE8rdLT0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8530},"type":"module","gitHead":"aeb6e2c7030d76b42f9aaa9ae5d14cc2ff217bc9","scripts":{"typecheck":"tsc --noEmit"},"_npmUser":{"name":"amolith","email":"amolith@secluded.site"},"repository":{"url":"https://git.secluded.site/pi-extensions","type":"git","directory":"packages/personas"},"_npmVersion":"11.16.0","description":"Switchable agent personas for Pi","directories":{},"_nodeVersion":"26.3.0","_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-personas_0.1.0-beta.0_1780679028627_0.08953487548327277","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.1":{"name":"@amolith/pi-personas","version":"0.1.0-beta.1","keywords":["pi-package"],"_id":"@amolith/pi-personas@0.1.0-beta.1","maintainers":[{"name":"amolith","email":"amolith@secluded.site"}],"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"fb57d0efd707ea8854d666b277d85df1d26ceec2","tarball":"https://registry.npmjs.org/@amolith/pi-personas/-/pi-personas-0.1.0-beta.1.tgz","fileCount":6,"integrity":"sha512-DD8rK7XMrMecsSaUeul73ay6p7HOStola9f9yUhJaWk0U5U8s188F73hKc4OL0PXYikr4oRk26htck/lTWNeXg==","signatures":[{"sig":"MEQCICOhIuxE2HBTZhe+Wib+tE0mGJHe2946Qco3t92T8lBVAiAQQFsPJlNqh/TTiw6J5hS9g4yMSnKn3AK51U3hH5OSBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12349},"type":"module","gitHead":"932848921039a2e626a97027e0eaab951a4625c4","scripts":{"typecheck":"tsc --noEmit"},"_npmUser":{"name":"amolith","email":"amolith@secluded.site"},"repository":{"url":"https://git.secluded.site/pi-extensions","type":"git","directory":"packages/personas"},"_npmVersion":"11.16.0","description":"Switchable agent personas for Pi","directories":{},"_nodeVersion":"26.3.0","_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-personas_0.1.0-beta.1_1780691081945_0.10763160415726514","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@amolith/pi-personas","version":"0.1.0","keywords":["pi-package"],"_id":"@amolith/pi-personas@0.1.0","maintainers":[{"name":"amolith","email":"amolith@secluded.site"}],"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"2bb1fe05a811557cf112eb088563c7c91ba23fe4","tarball":"https://registry.npmjs.org/@amolith/pi-personas/-/pi-personas-0.1.0.tgz","fileCount":6,"integrity":"sha512-FCw/1o59Acncm4367Mt54HMskunoyh9GG9o+9k5PeDV78L+P6ScTTM6LaVB8WKOAuma+gen4gCQ/8IblZdQJNg==","signatures":[{"sig":"MEUCIQC/gO+GX8LC8W8UYdOds8aHBLGAN85ZQTD+pIZrN7DQZAIgBx8H46Gvkf7F1My45MIqq2YoabwxUUhdjLQ9DpZglgc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12342},"type":"module","gitHead":"1300e15910e3eb4a2856d388cb4855c4ccba11b7","scripts":{"typecheck":"tsc --noEmit"},"_npmUser":{"name":"amolith","email":"amolith@secluded.site"},"repository":{"url":"https://git.secluded.site/pi-extensions","type":"git","directory":"packages/personas"},"_npmVersion":"11.16.0","description":"Switchable agent personas for Pi","directories":{},"_nodeVersion":"26.3.0","_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-personas_0.1.0_1780697055525_0.1434765678434302","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-06-05T17:03:48.518Z","modified":"2026-06-05T22:04:28.701Z","0.1.0-beta.0":"2026-06-05T17:03:48.762Z","0.1.0-beta.1":"2026-06-05T20:24:42.104Z","0.1.0":"2026-06-05T22:04:15.704Z"},"keywords":["pi-package"],"repository":{"url":"https://git.secluded.site/pi-extensions","type":"git","directory":"packages/personas"},"description":"Switchable agent personas for Pi","maintainers":[{"name":"amolith","email":"amolith@secluded.site"}],"readme":"<!--\nSPDX-FileCopyrightText: Amolith <amolith@secluded.site>\n\nSPDX-License-Identifier: CC0-1.0\n-->\n\n# `@amolith/pi-personas`\n\n[![pi-personas on NPM](https://img.shields.io/npm/v/@amolith/pi-personas)](https://www.npmjs.com/package/@amolith/pi-personas)\n[![Licensed under MutuaL-1.2](https://img.shields.io/badge/License-MutuaL--1.2-af2e1a?style=flat&labelColor=110402&link=https%3A%2F%2Fcodeberg.org%2FMutualism%2FMutualist-License)](https://codeberg.org/Mutualism/Mutualist-License)\n[![REUSE status](https://api.reuse.software/badge/git.secluded.site/pi-extensions)](https://api.reuse.software/info/git.secluded.site/pi-extensions)\n[![scratchanitch.dev badge](https://img.shields.io/badge/scratchanitch-dev-FFC4B5)](https://scratchanitch.dev)\n[![Liberapay donation status](https://img.shields.io/liberapay/receives/Amolith.svg?logo=liberapay)](https://liberapay.com/Amolith/)\n\nCode with a grumpy senior today and work with a patient tutor tomorrow. Switch\nbetween them with `/persona`. The active one persists across sessions until\nchanged. Setting a persona prior to startup appends it to the system prompt.\nChanging it mid-session sends the persona content as a steering message.\n\nPersonas are loaded from `persona-name.md` files in\n`$PI_CODING_AGENT_DIR/personas/`. `/persona` is interactive and `/persona grug`\nsets it directly.\n\n## Install\n\n```sh\npi install npm:@amolith/pi-personas\n```\n\n## Write personas\n\nCreate one markdown file per persona in `$PI_CODING_AGENT_DIR/personas/`:\n\n```text\n$PI_CODING_AGENT_DIR/personas/grumpy-senior.md\n$PI_CODING_AGENT_DIR/personas/patient-tutor.md\n```\n\nThe file name without `.md` is the persona name. That's what `/persona` and the\n`persona` setting use.\n\n## Switch personas\n\nOpen an interactive picker:\n\n```text\n/persona\n```\n\nSwitch directly:\n\n```text\n/persona patient-tutor\n```\n\nClear the active persona:\n\n```text\n/persona none\n```\n\n`unset` and `clear` also clear the active persona.\n\n## Remember the active persona\n\nThe active persona persists as the `persona` key in\n`$PI_CODING_AGENT_DIR/settings.json`:\n\n```json\n{\n  \"persona\": \"patient-tutor\"\n}\n```\n\nThe extension only accepts persona names that match markdown files under\n`$PI_CODING_AGENT_DIR/personas/`.\n\n## What happens when it changes\n\nIf a persona is set before startup, the extension reads it at session start and\nappends it to the system prompt for the lifetime of the session.\n\nWhen you set or clear a persona mid-session, the extension updates the setting\nimmediately and sends a one-shot hidden reminder message. It does not rewrite\nthe session's system prompt mid-stream.\n","readmeFilename":"README.md"}