pi-sticky-usermessage
Sticky header showing your last user message above the editor in Pi coding agent
Package details
Install pi-sticky-usermessage from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-sticky-usermessage- Package
pi-sticky-usermessage- Version
3.1.0- Published
- May 11, 2026
- Downloads
- 156/mo · 14/wk
- Author
- ngsoftware
- License
- MIT
- Types
- extension
- Size
- 38.9 KB
- Dependencies
- 0 dependencies · 1 peer
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-sticky-usermessage
Sticky header that shows your last user message above the editor in Pi coding agent. Features persistence, smart formatting, and sensitive data filtering.
What it does
After you send a prompt, a persistent bar above the input editor shows your message with rich metadata. Perfect for keeping context visible during long tool-execution sequences.
▎ 14:32 · ● new </>
Fix the auth middleware to handle expired tokens properly
and add a retry with exponential backoff to the client
Features
✨ Core
- Persistent Configuration: Settings saved across sessions
- Smart Truncation: Word-boundary aware, respects max lines
- Syntax Awareness: Highlights file paths, URLs, functions, errors
- Overflow Indicator: Shows
… +N more lineswhen message exceeds display
🎨 Customization
- Timestamp Display: Show when the message was sent
- Message Type Indicators: ● new, → follow-up, ✎ edit
- Code Block Detection: Shows
</>marker when code is present - Custom Prefix Symbol: Change the
▎to any character - Theme-Aware Colors: Uses your active Pi theme colors
🔒 Privacy & Security
- Sensitive Data Filtering: Automatically redacts emails, API keys, passwords, IPs
- Custom Patterns: Add your own regex patterns for redaction
- Toggle Filtering: Enable/disable per your needs
Install
pi install pi-sticky-usermessage
Or test locally:
pi -e ./src/index.ts
Usage
The header is on by default after installation.
Commands
| Command | Effect |
|---|---|
/sticky |
Show current status (ON / OFF) |
/sticky on |
Enable the sticky header |
/sticky off |
Disable and clear the header |
/sticky show |
Show detailed configuration |
/sticky reset |
Reset to default settings |
/sticky config <key>=<value> ... |
Update configuration |
/sticky-lines <number> |
Set max lines (1-20) |
/sticky-width <number> |
Set max width (20-200) |
Configuration Examples
# Change multiple settings at once
/sticky config maxLines=5 showTimestamp=false smartTruncation=true
# Customize colors
/sticky config timestampColor=yellow metadataColor=cyan
# Change prefix symbol
/sticky config prefixSymbol="→"
# Disable sensitive data filtering
/sticky config filterSensitive=false
Configuration Options
| Key | Default | Description |
|---|---|---|
enabled |
true |
Start enabled |
maxLines |
3 |
Maximum message lines to display (1-20) |
maxWidth |
120 |
Characters per line before ellipsis (20-200) |
showTimestamp |
true |
Show message timestamp |
showMessageType |
true |
Show message type indicator |
smartTruncation |
true |
Apply smart syntax highlighting |
codeBlockIndicator |
true |
Show </> for code blocks |
prefixSymbol |
"▎" |
Prefix character for header |
truncateAtWordBoundary |
true |
Truncate at word boundaries |
filterSensitive |
true |
Filter sensitive data |
customPatterns |
undefined |
Custom regex patterns for redaction |
timestampColor |
"dim" |
Theme color for timestamps |
metadataColor |
"muted" |
Theme color for metadata |
Sensitive Data Filtering
The extension automatically detects and redacts:
- Email addresses:
user@example.com→[email] - IP addresses:
192.168.1.1→[ip] - Phone numbers:
(555) 123-4567→[phone] - API keys:
sk-abc123...→[key] - Bearer tokens:
Bearer xyz→Bearer [token] - Passwords:
password: secret123→password [redacted] - API keys:
api_key: abc123→api_key [redacted] - Secrets:
secret: xyz→secret [redacted]
Custom Patterns
Add custom regex patterns via the API or by modifying the config in code:
config.customPatterns = [
"\\b[A-Z]{2}-\\d{4}\\b", // Ticket numbers like AB-1234
"\\b\\d{4}-\\d{4}-\\d{4}-\\d{4}\\b", // Credit card format
];
Syntax Highlighting
When smartTruncation is enabled, the extension highlights:
- File paths:
src/components/Button.tsx(accent color) - URLs:
https://example.com(cyan color) - Function calls:
fetchData()(yellow color) - Errors/warnings:
Error: failed(error color)
Theme Colors
The extension uses these Pi theme color names:
| Color | Usage |
|---|---|
accent |
Code block markers, file paths |
muted |
Metadata, message type |
dim |
Timestamps, overflow indicator |
cyan |
URLs |
yellow |
Function calls |
error |
Error/warning patterns |
Technical Details
Persistence
Configuration and last message metadata are persisted using pi.appendEntry():
pi.appendEntry("sticky-config", {
config: { ... },
lastMetadata: { ... }
});
State is automatically restored on session_start.
Event Capture
Messages are captured from the before_agent_start event, which fires for every prompt that reaches the agent.
Troubleshooting
Widget not showing
- Check if enabled:
/sticky - Verify UI is available (not in print mode)
- Check for errors in Pi logs
Settings not persisting
- Ensure session is saved (Pi auto-saves)
- Check file permissions for Pi data directory
- Try
/sticky resetthen reconfigure
Sensitive data not filtered
- Verify
filterSensitive: truevia/sticky show - Check if custom patterns are needed
- Test with known patterns (email, API key)
Text not truncating correctly
- Check
maxWidthsetting via/sticky show - Verify
truncateAtWordBoundaryis set as desired - Try adjusting
maxLinesfor better fit
License
MIT