| name | pi-share |
| description | Load and parse session transcripts from shittycodingagent.ai (pi-share) URLs. Fetches gists, decodes embedded session data, and extracts conversation history. |
pi-share / shittycodingagent.ai Session Loader
Load and parse session transcripts from shittycodingagent.ai (pi-share) URLs.
When to Use
Use this skill when the user provides a URL like:
https://shittycodingagent.ai/session/?<gist_id>- Or just a gist ID like
46aee35206aefe99257bc5d5e60c6121
How It Works
- Session exports are stored as GitHub Gists
- The URL contains a gist ID after the
? - The gist contains a
session.htmlfile with base64-encoded session data - The helper script fetches and decodes this to extract the full conversation
Usage
# Get full session data (default)
node ~/.pi/agent/skills/pi-share/fetch-session.mjs "<url-or-gist-id>"
# Get just the header
node ~/.pi/agent/skills/pi-share/fetch-session.mjs <gist-id> --header
# Get entries as JSON lines (one entry per line)
node ~/.pi/agent/skills/pi-share/fetch-session.mjs <gist-id> --entries
# Get the system prompt
node ~/.pi/agent/skills/pi-share/fetch-session.mjs <gist-id> --system
# Get tool definitions
node ~/.pi/agent/skills/pi-share/fetch-session.mjs <gist-id> --tools
Session Data Structure
The decoded session contains:
interface SessionData {
header: {
type: "session";
version: number;
id: string; // Session UUID
timestamp: string; // ISO timestamp
cwd: string; // Working directory
};
entries: SessionEntry[]; // Conversation entries (JSON lines format)
leafId: string | null; // Current branch leaf
systemPrompt?: string; // System prompt text
tools?: { name: string; description: string }[];
}
Entry types include:
message- User/assistant/toolResult messages with content blocksmodel_change- Model switchesthinking_level_change- Thinking mode changescompaction- Context compaction events
Message content block types:
text- Text contenttoolCall- Tool invocation withtoolNameandargsthinking- Model thinking contentimage- Embedded images
Example: Analyze a Session
# Pipe entries through jq to filter
node ~/.pi/agent/skills/pi-share/fetch-session.mjs "<url>" --entries | jq 'select(.type == "message" and .message.role == "user")'
# Count tool calls
node ~/.pi/agent/skills/pi-share/fetch-session.mjs "<url>" --entries | jq -s '[.[] | select(.type == "message") | .message.content[]? | select(.type == "toolCall")] | length'