pi-session-context
A pi coding agent extension that tracks and displays session context (worktree, Jira ticket, GitLab MR) in the footer
Package details
Install pi-session-context from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-session-context- Package
pi-session-context- Version
1.1.0- Published
- May 7, 2026
- Downloads
- 108/mo ยท 18/wk
- Author
- it-ony
- License
- MIT
- Types
- extension, skill
- Size
- 42.4 KB
- Dependencies
- 0 dependencies ยท 2 peers
Pi manifest JSON
{
"extensions": [
"./extensions"
],
"skills": [
"./skills"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-session-context
A pi coding agent extension that tracks and displays what the agent is working on in the footer โ worktree, Jira ticket, GitLab/GitHub MR, pipeline status, or any custom key.
๐ฟ my-repo feat/SDK-1234-fix-auth ๐ SDK-1234 ๐ #771 ๐ก deploy
Entries are clickable OSC 8 hyperlinks in supported terminals. Pipeline icons update automatically as the build progresses.
How it works
Context entries are stored as a map. Each entry has a value, an optional type that controls rendering, and an optional icon:
| type | rendering | value |
|---|---|---|
"dir" |
git root + branch (branch is a clickable link to the remote) | filesystem path |
"link" |
clickable hyperlink with a friendly label | full URL |
| (omit) | icon key value plain text |
anything |
The agent calls set_context with a map of entries to update. Keys not mentioned are left unchanged. Pass value: "" to clear a key. An optional label field overrides the auto-derived display text for link entries.
Well-known keys
Three keys have default icons and extra behaviour:
| key | icon | extra behaviour |
|---|---|---|
worktree |
๐ฟ | Sets the bash working directory โ no cd needed |
ticket |
๐ | โ |
mr |
๐ | โ |
Any other key is shown with ยท as the default icon.
Passive detection
The extension scans every tool call for paths inside PI_WORKTREE_BASE. When a worktree path is found it automatically sets worktree and detects the branch โ no explicit set_context call needed.
Use cases
Worktree
Use type: "dir" with the worktree key. The extension resolves the git root, detects the current branch, and reads the remote URL so the branch name becomes a clickable link.
The bash tool is automatically redirected to run from that directory for the rest of the session.
{
"context": {
"worktree": {
"value": "~/Development/worktree/my-repo/feat/SDK-1234-fix-auth",
"type": "dir",
"icon": "๐ฟ"
}
}
}
Renders as: ๐ฟ my-repo feat/SDK-1234-fix-auth (branch links to https://gitlab.example.com/โฆ/-/tree/feat/SDK-1234-fix-auth)
Clearing the worktree key also resets the bash CWD back to the session default:
{ "context": { "worktree": { "value": "" } } }
Jira ticket
Use type: "link" with the full Jira issue URL. The extension extracts the ticket key (SDK-1234) as the display label and renders it as a clickable hyperlink.
{
"context": {
"ticket": {
"value": "https://myorg.atlassian.net/browse/SDK-1234",
"type": "link",
"icon": "๐"
}
}
}
Renders as: ๐ SDK-1234 (clickable, opens the issue in the browser)
GitLab / GitHub MR or PR
Use type: "link" with the full MR or PR URL. The extension extracts the number and displays it as #771.
{
"context": {
"mr": {
"value": "https://gitlab.example.com/myorg/my-repo/-/merge_requests/771",
"type": "link",
"icon": "๐"
}
}
}
Renders as: ๐ #771 (clickable, opens the MR in the browser)
Works identically for GitHub pull requests (/pull/42 โ #42).
Custom entries (plain text)
Any key without a type is displayed as icon key value. Useful for tracking things like environment, target branch, or task status.
{
"context": {
"env": { "value": "staging", "icon": "๐" },
"target": { "value": "develop", "icon": "๐ฏ" }
}
}
Renders as: ๐ env staging ๐ฏ target develop
Pipeline monitoring
Use monitor_pipeline after triggering a CI/CD pipeline. The extension fetches the status immediately, shows a live clickable badge in the footer, and polls until the pipeline finishes. A pi notification fires on completion.
{
"url": "https://gitlab.com/org/repo/-/pipelines/12345",
"label": "deploy",
"interval_seconds": 30
}
Supported URL formats:
| Platform | Pattern |
|---|---|
| GitLab pipeline | https://<host>/group/project/-/pipelines/ID |
| GitLab job | https://<host>/group/project/-/jobs/ID |
| GitHub Actions run | https://github.com/owner/repo/actions/runs/ID |
Self-hosted GitLab is supported โ any host is accepted.
Status icons โ update automatically in the footer:
| Icon | Status |
|---|---|
| โณ | pending / queued |
| ๐ก | running |
| โ | success |
| โ | failed |
| โ | canceled |
| โญ | skipped |
| โ ๏ธ | fetch error (bad token / network) |
Removing a monitor:
- Agent: call
stop_monitor({ label: "deploy" }) - User: type
/pipeline-monitorsโ interactive list โ select โ confirm
Putting it all together
A typical agent call when starting work on a ticket:
{
"context": {
"worktree": {
"value": "~/Development/worktree/my-repo/feat/SDK-1234-fix-auth",
"type": "dir",
"icon": "๐ฟ"
},
"ticket": {
"value": "https://myorg.atlassian.net/browse/SDK-1234",
"type": "link",
"icon": "๐"
}
}
}
After pushing and opening the MR, add it. Then kick off CI and monitor it:
{
"context": {
"mr": {
"value": "https://gitlab.example.com/myorg/my-repo/-/merge_requests/771",
"type": "link",
"icon": "๐"
}
}
}
// monitor_pipeline
{
"url": "https://gitlab.example.com/myorg/my-repo/-/pipelines/12345",
"label": "deploy"
}
Footer: ๐ฟ my-repo feat/โฆ ๐ SDK-1234 ๐ #771 ๐ก deploy
When the task is done, clear everything:
{
"context": {
"worktree": { "value": "" },
"ticket": { "value": "" },
"mr": { "value": "" }
}
}
Stop any remaining monitors:
// stop_monitor
{ "label": "deploy" }
Installation
pi install npm:pi-session-context
# or directly from GitHub:
pi install git:github.com/it-ony/pi-session-context
Configuration
| Variable | Default | Description |
|---|---|---|
PI_WORKTREE_BASE |
~/Development/worktree |
Base directory scanned for git worktrees |
GITLAB_TOKEN |
โ | GitLab personal access token (read_api scope). Required for private projects. |
GITHUB_TOKEN |
โ | GitHub personal access token. Required for private repos. |
PI_MONITOR_DEFAULT_INTERVAL |
10 |
Default pipeline poll interval in seconds (min 5). |
Set in your shell config (e.g. ~/.config/fish/config.fish or ~/.zshrc):
export PI_WORKTREE_BASE="$HOME/code/worktrees"
License
MIT