[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80324":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":12,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":11,"stars7d":14,"stars30d":15,"stars90d":13,"forks30d":13,"starsTrendScore":16,"compositeScore":17,"rankGlobal":8,"rankLanguage":8,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":8,"pushedAt":8,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":13,"starSnapshotCount":13,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},80324,"pi-emote","cgxeiji\u002Fpi-emote","cgxeiji",null,"TypeScript",80,10,1,0,12,16,30,3.12,"MIT License",false,"main",true,[],"2026-06-12 02:04:01","# CGx's pi-emote\n\n> **Currently looking to expand the emotes gallery!** If you have an emote set you'd like to submit, please make a PR!\n\nAnimated pixel-art emote that lives in the top-right corner of your pi TUI session. Reacts to what the agent is doing — thinking, talking, reading, writing, using tools, etc.\n\n![pi-emote demo](pi-emote-demo.gif)\n\nSupports Kitty, iTerm2, and ASCII rendering.\n\n## Gallery\n\nCommunity-contributed emote sets. [Submit yours via PR!](#custom-emotes)\n\n### Image Sets\n\n| Avatar | Name | Contributor |\n|--------|------|-------------|\n| \u003Cimg src=\"emotes\u002Fdefault\u002Fhi\u002Fhi1.png\" width=\"64\"> | `default` | [@cgxeiji](https:\u002F\u002Fgithub.com\u002Fcgxeiji) |\n| \u003Cimg src=\"emotes\u002Faza_choi\u002Fhi\u002Fhi_1.png\" width=\"64\"> | `aza_choi` | [@shennguyenrs](https:\u002F\u002Fgithub.com\u002Fshennguyenrs) |\n| \u003Cimg src=\"emotes\u002Faza_choi_nobg\u002Fhi\u002Fhi_1.png\" width=\"64\"> | `aza_choi_nobg` | [@shennguyenrs](https:\u002F\u002Fgithub.com\u002Fshennguyenrs) |\n\n### ASCII Sets\n\n| Avatar | Name | Contributor |\n|--------|------|-------------|\n| `(^ ◡ ^)\u002F` | `ascii` | [@cgxeiji](https:\u002F\u002Fgithub.com\u002Fcgxeiji) |\n| `ʕ•̫͡•ʔ` | `ascii-bear` | [@LCorleone](https:\u002F\u002Fgithub.com\u002FLCorleone) |\n\n## Install\n\n```bash\npi install git:github.com\u002Fcgxeiji\u002Fpi-emote\n```\n\n## States\n\n| State | Trigger |\n|-------|---------|\n| hi | Session start |\n| idle | Nothing happening (blinks occasionally) |\n| think | Reasoning tokens streaming |\n| talk | Text response streaming |\n| read | `read` tool \u002F reading tool output |\n| write | `write` or `edit` tool |\n| tool | Any other tool |\n| success | Successful tool execution |\n| failure | Failed tool execution |\n| compact | Context compaction |\n\n## Config\n\nDrop a `config.json` in one of these paths (highest priority wins):\n\n- `~\u002F.pi\u002Fagent\u002Fextensions\u002Fpi-emote\u002Fconfig.json` — your global prefs\n- `.pi\u002Fextensions\u002Fpi-emote\u002Fconfig.json` — project override\n\nOnly include what you want to change:\n\n```json\n{\n  \"size\": 12,\n  \"emotes\": [\n    { \"model\": \"*claude*\", \"emote-set\": \"my-avatar\" }\n  ]\n}\n```\n\nSee `config.json` in the extension root for all defaults.\n\n## Multiplexers\n\npi-emote can render image avatars through **tmux** using DCS passthrough. When tmux is detected, pi-emote auto-detects the outer terminal and picks the right image protocol.\n\n### tmux Setup\n\nAdd these to your `tmux.conf`:\n\n```bash\n# Required — allow image sequences to pass through to the outer terminal\nset -g allow-passthrough on\n\n# Required — detect outer terminal when attaching from a different terminal\nset -ga update-environment TERM\nset -ga update-environment TERM_PROGRAM\n\n# Recommended — reduces flicker during animation\nset -sg escape-time 0\n```\n\nThen restart tmux completely:\n\n```bash\ntmux kill-server && tmux\n```\n\nWithout `allow-passthrough`, pi-emote defaults to ASCII and shows a one-time warning with setup instructions.\n\n### Experimental Multiplexer Support\n\n| Outer Terminal | Protocol | Status |\n|----------------|----------|--------|\n| Ghostty | kitty-unicode | ✅ Stable, pane-safe, auto-detected |\n| kitty | kitty-unicode | ⚠️ Untested, pane-safe, auto-detected |\n| iTerm2 | iterm2 | ⚠️ Experimental, opt-in only (pane bleed in multi-pane layouts) |\n| WezTerm | iterm2 | ⚠️ Experimental, opt-in only (not verified) |\n\nThe outer terminal is detected via `tmux show-environment TERM_PROGRAM`, which reflects the currently attached terminal.\n\nGhostty and kitty use the **kitty-unicode** renderer (Unicode placeholders) which is pane-safe — images stay within their pane and clean up on session switch. This is the default when auto-detected.\n\niTerm2 and WezTerm use DCS passthrough for the iTerm2 image protocol. This works but has known limitations: images can bleed into adjacent panes and persist when switching sessions. **Not enabled by default** — opt in explicitly:\n\n```json\n{\n  \"terminals\": [\n    { \"match\": \"tmux\", \"render\": \"iterm2\" }\n  ]\n}\n```\n\n### Other Multiplexers\n\n**zellij** and **screen** are not yet supported and default to ASCII.\n\n### Manual Override\n\nForce a specific renderer:\n\n```json\n{\n  \"terminals\": [\n    { \"match\": \"tmux\", \"render\": \"kitty-unicode\" }\n  ]\n}\n```\n\nAvailable render values for tmux: `\"auto\"`, `\"kitty-unicode\"`, `\"kitty\"`, `\"iterm2\"`, `\"ascii\"`.\n\n- `\"auto\"` — detect outer terminal; uses kitty-unicode for Ghostty\u002Fkitty, ASCII for others\n- `\"kitty-unicode\"` — pane-safe Unicode placeholders (Ghostty, kitty)\n- `\"kitty\"` — classic DCS passthrough (single-pane only, experimental)\n- `\"iterm2\"` — iTerm2 DCS passthrough (single-pane only, experimental)\n- `\"ascii\"` — text fallback\n\n## Custom Emotes\n\nEmote sets live in `emotes\u002F\u003Cset-name>\u002F` with PNG frames per state:\n\n```\nemotes\u002Fmy-avatar\u002F\n├── idle\u002F*.png\n├── think\u002F*.png\n├── talk\u002F*.png\n├── read\u002F*.png\n├── write\u002F*.png\n├── tool\u002F*.png\n└── ...          # hi, success, failure, compact\n```\n\nNot all states are required. Missing ones just won't animate.\n\n### Where to put them\n\npi-emote searches in order:\n\n1. `.pi\u002Fextensions\u002Fpi-emote\u002Femotes\u002F\u003Cname>\u002F` (project)\n2. `~\u002F.pi\u002Fagent\u002Fextensions\u002Fpi-emote\u002Femotes\u002F\u003Cname>\u002F` (user)\n3. Extension built-in → falls back to `default`\n\n### Map models to sets\n\nGlob patterns against model ID, last match wins:\n\n```json\n{\n  \"emotes\": [\n    { \"model\": \"*\", \"emote-set\": \"default\" },\n    { \"model\": \"*claude*\", \"emote-set\": \"my-avatar\" },\n    { \"model\": \"*haiku*\", \"emote-set\": \"haiku-avatar\" }\n  ]\n}\n```\n\nIn this example, `claude` models use `my-avatar`, but `haiku` ones use `haiku-avatar`.\nSee `emotes\u002Fdefault\u002Femotes.json` for per-set frame config (blink frames, talk weights).\n\n## License\n\nMIT\n","pi-emote 是一个为 pi TUI 会话添加动态像素表情的项目。它能够根据用户的操作（如思考、交谈、阅读、写作或使用工具等）展示不同的动画表情，并且支持 Kitty、iTerm2 以及 ASCII 渲染模式。用户可以通过配置文件自定义表情大小和样式，同时该项目还支持 tmux 多路复用器下的图像传递。适用于希望增强终端交互体验，特别是对于频繁使用命令行界面进行开发或系统管理工作的用户。",2,"2026-06-11 04:00:20","CREATED_QUERY"]