Agent skill

Pneuma Session

by pandazki in pandazki/pneuma-skills

Rewrite the active Pneuma session's UI title + one-line summary so the launcher and ProjectPanel rows reflect what the session is actually about.

MITAuto-check passed

Install Pneuma Session

skills CLI
$ npx skills add pandazki/pneuma-skills --skill pneuma-session -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install pandazki/pneuma-skills pneuma-session --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/modes/_shared/skills/pneuma-session .claude/skills/pneuma-session && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
pneuma-session
GitHub stars
161
Token cost
~2.8k tokens
SKILL.md length
1,482 words
Files
1
Skills in repo
30
Repo updated
First seen
Licence
MIT

At a glance

Rewrite the active Pneuma session's UI title + one-line summary so the launcher and ProjectPanel rows reflect what the session is actually about.

  • Works in 4 steps: The conversation transcript above this… → $PNEUMA_PROJECT_ROOT/.pneuma/project.json… → $PNEUMA_PROJECT_ROOT/.pneuma/project-atla… → …
  • The user asks to 整理 / 概括 / refresh / re-title / summarize this session
  • SKILL.md covers The mechanism, What goes in each field, When to refine and When NOT to refine, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Pneuma Session is an agent skill from pandazki/pneuma-skills. Rewrite the active Pneuma session's UI title + one-line summary so the launcher and ProjectPanel rows reflect what the session is actually about. Use this skill whenever the user asks to "整理 / 概括 / refresh / re-title / summarize this session", whenever the conversation has produced substantive work and the default title ("WebCraft session") is now uninformative, or before the user pauses a long session — the next time they reopen it, the row needs to say more than "<pneuma:env reason='opened'". Cheap to run…

Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It works with Bash. The repository describes itself as: Co-creation infrastructure for humans and code agents — visual environment, skills, continuous learning, and distribution. The licence is MIT.

When your agent uses it

  • The user asks to 整理 / 概括 / refresh / re-title / summarize this session
  • Whenever the conversation has produced substantive work and the default title (WebCraft session) is now uninformative
  • Before the user pauses a long session — the next time they reopen it
  • The row needs to say more than <pneuma:env reason=opened

Example prompts

  • “整理 / 概括 / refresh / re-title / summarize this session”
  • “WebCraft session”
  • “<pneuma:env reason=”
  • “/pneuma-session”

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. The conversation transcript above this prompt. What did the user ask for? What did you build? What direction did the session take?
  2. $PNEUMA_PROJECT_ROOT/.pneuma/project.json (project sessions only). The project's displayName + description set the surrounding context…
  3. $PNEUMA_PROJECT_ROOT/.pneuma/project-atlas.md (project sessions only, when present). The atlas describes the project's whole landscape…
  4. The mode you're in. Read the current mode's SKILL.md at the concrete backend-specific path named in your injected instructions if you need…

What it can do on your machine

Read from SKILL.md and the folder at commit 0023d3c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are bash).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Pneuma Session loads about 2.8k tokens when it runs. Until then it costs about 143 tokens; SKILL.md has 1,482 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~143
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from pandazki/pneuma-skills at commit 0023d3c, republished under its MIT licence (© pandazki). 1,482 words, ~2,760 tokens.

Download SKILL.mdSave it as .claude/skills/pneuma-session/SKILL.md (or your agent's skills folder).
name
pneuma-session
description
Rewrite the active Pneuma session's UI title + one-line summary so the launcher and ProjectPanel rows reflect what the session is actually about. Use this skill whenever the user asks to "整理 / 概括 / refresh / re-title / summarize this session", whenever the conversation has produced substantive work and the default title ("WebCraft session") is now uninformative, or before the user pauses a long session — the next time they reopen it, the row needs to say more than "<pneuma:env reason='opened'>". Cheap to run, persistent across reopens, mode-agnostic.

Refining your session's identity

Every Pneuma session has a row in the launcher (Recent Sessions) and inside its project (ProjectPanel). The row has two slots:

  • Title — defaults to "<Mode> session" (e.g. "WebCraft session"). Mode-only.
  • Description / preview — defaults to the first user prompt. For project sessions, the first prompt is the server-emitted <pneuma:env reason="opened" /> synthetic tag — which carries zero information for a human scanning the list.

Until you refine, both fields are placeholders. Three "WebCraft session" rows look identical except for their thumbnails. The user has to remember by time, which they won't.

This skill is how you fix that. You write a meaningful title + one-sentence summary into <sessionDir>/session.json, and the launcher row updates in place. The data persists across reopens; the launcher's own listing always reads from your last refine.

The mechanism

bash
$PNEUMA_CLI session refine --json '{"displayName": "<≤40 chars>", "description": "<≤280 chars>"}'

Always call through the $PNEUMA_CLI env var, not the literal pneuma binary. The env var resolves to the right invocation regardless of how Pneuma was installed (npm-global, dev worktree, desktop bundle); writing the literal pneuma session refine only works when the binary happens to be on PATH, which it usually isn't inside the agent's sandbox. $PNEUMA_CLI is a single executable path, so the call behaves the same in bash, zsh, and fish, quoted or unquoted.

The command POSTs to the running Pneuma server (via $PNEUMA_SERVER_URL), which atomically rewrites <sessionDir>/session.json, syncs the global registry at ~/.pneuma/sessions.json, and broadcasts an event so any open browsers refresh the row without a reload.

Both fields are optional. Sending just displayName rewrites only the title; just description rewrites only the summary. Send both when the session has changed enough to warrant a fresh pair. The server validates lengths and rejects empties.

Run it from your default Bash tool. It's a one-shot HTTP call — no background process, no follow-up needed. On success the command prints Session meta refined. and exits 0; on failure it prints the server's error to stderr and exits non-zero.

What goes in each field

The goal is to make the row useful to a human scanning a list a week from now. Two principles:

Describe the session, not the work. The row is a session identifier, not a worklog. Write what the session is about, the user-facing concern, not the sequence of edits you made.

Don'tDo
"Implemented three React hooks""加载状态卡片调研"
"Edited hero.html 7 times""Hero section landing-page iteration"
"Created file pricing.html and modified manifest.json""Pricing page draft for the launch site"

Match the user's register. If the user has been writing in Chinese, the refined title should be in Chinese too — they're scanning their own list. If the project's displayName in project.json is English, English is fine. Read the room.

displayName (≤40 chars)

The new title. Short. A scannable label, not a sentence. Capitalize as you would a headline. No trailing period.

Replacement, not augmentation — the mode is shown via the row's icon (and a hover tooltip), so don't prefix with "WebCraft · ". Just the topic.

Good shapes:

  • 加载状态卡片调研
  • Hero section iteration
  • Pricing page · v3 layout
  • 负熵痕迹 · 写作框架

If the user has explicitly renamed the session (via --session-name or a future rename UI), your displayName is recorded but the explicit name still wins in the listing — user intent beats inference. You don't need to detect this; the server handles precedence.

description (≤280 chars)

The new summary. One or two sentences. Should fit on one line in the row, with the second sentence as overflow on hover. Plain prose, no markdown.

Tell a user re-encountering this row in a week: "what was I doing here?" and "should I open it?". Concrete enough to disambiguate from sibling sessions, abstract enough to survive minor reshuffles.

Good shapes:

  • Iterating on three loading-state card variants for the dashboard's data-fetching screens. Picked a skeleton + shimmer combo; still tuning the timing curve.
  • Drafting the hero section for the launch site. Brand voice: "calm and clinical and careful". Holding on grayscale palette until copy lands.
  • 负熵痕迹(写作框架)的第一稿,聚焦"代码 agent 留下的 entropy 痕迹"这条主线。结构定了三段,标题待定。

When to refine

You'll find two natural triggers. Both go through the same CLI; only the framing differs.

When the user asks

Phrases like:

  • "整理一下会话信息"
  • "重新概括下这个 session"
  • "refresh the title / summary"
  • "rename this session based on what we've done"
  • "give this session a real title"

Run $PNEUMA_CLI session refine synchronously (no subagent). The user is asking right now; they're waiting for confirmation. Read the conversation so far, compose displayName + description, call the CLI, then reply with a one-line acknowledgment showing the new title.

On your own judgment

The intent here is: when the row would actually be more useful with a refined title than the default, refine. When it wouldn't, don't. Default to not refining — premature refines write a title before the session has a clear shape, and you'll either churn it later or leave a misleading row.

Strong signals to refine:

  • The conversation has gone past a clear inflection point: a brief was agreed, a direction was picked, a deliverable was produced. The session has a topic now.
  • The user has been working for a while (rule of thumb: 15+ substantive user turns, or 3+ artifacts produced), and the default title is still "<Mode> session".
  • You hit a milestone the user will care about — a feature shipped, a draft completed, a critique pass finished — and the row should reflect the new state of play.

Weak signals (don't refine on these alone):

  • A single message was exchanged.
  • The user is still in the discovery / interview phase (their intent isn't settled yet).
  • You wrote one file but the session's purpose is unclear.

When you decide to refine proactively, use a subagent so the main turn isn't blocked. Use the active harness's delegation tool, when available, to create a fresh worker that reads the project atlas + the conversation so far and writes the refined fields. Pattern:

1. Identify that a refine would be useful.
2. Launch a subagent with the available delegation tool. Brief it:
   - "Read $PNEUMA_PROJECT_ROOT/.pneuma/project.json and project-atlas.md."
   - "Read the current conversation transcript above this prompt."
   - "Compose displayName (≤40 chars) and description (≤280 chars) describing
      what this session is *about* — the user-facing concern, in the user's
      language. Don't list what was done."
   - "Run: $PNEUMA_CLI session refine --json '<your json>'. Print the result and stop."
3. The subagent returns; you don't need to mention the refine to the user
   unless the user asks. The row updates silently.

If delegation is unavailable in the active harness, do the refine inline at a natural pause — between two unrelated turns, or right before you hand the conversation back to the user with a question. Don't refine mid-task; the user is watching you work.

Show full SKILL.md (482 more words)Show less
Refine cadence

Refining once at the right moment is far better than refining many times. As a soft cap: don't refine more than once per ~20 user turns unless the user asks or the session's topic genuinely changed (a pivot — different feature, different deliverable). A row that flickers between titles is worse than a stale one.

When NOT to refine

  • The session has done basically nothing yet. The default "<Mode> session" is the right title for an empty session — anything else is a lie.
  • The user has explicitly renamed the session (via --session-name on launch). Your displayName write is recorded but doesn't change the listing; the noise isn't worth it. Still send a description if you have a good one.
  • You've just refined recently and nothing has materially changed since.
  • The user told you to leave the title alone, or set it themselves in chat.
  • A handoff just landed and the session has only seen the handoff payload + one or two turns of orientation. Wait until real work shows the topic.

Inputs you have

Compose the refined fields from these sources:

  1. The conversation transcript above this prompt. What did the user ask for? What did you build? What direction did the session take?
  2. $PNEUMA_PROJECT_ROOT/.pneuma/project.json (project sessions only). The project's displayName + description set the surrounding context. Your session is a part of this — refine accordingly. Don't repeat the project name verbatim in your session title; the row is already inside the project's scope.
  3. $PNEUMA_PROJECT_ROOT/.pneuma/project-atlas.md (project sessions only, when present). The atlas describes the project's whole landscape — anchors, deliverables, open questions. Use it to figure out which slice of the project this session is hitting.
  4. The mode you're in. Read the current mode's SKILL.md at the concrete backend-specific path named in your injected instructions if you need a refresher on what the mode's job is. The title should still be domain-specific, not mode-specific.

You do not read other sibling sessions in the project. Cross-session inference is out of scope for this skill — each session refines itself.

What success looks like

Open the launcher. Find your session's row. The title and the line below it together should answer "what is this session about, in a way that distinguishes it from the other rows around it?" If yes, the refine landed. If you scan the row and still can't tell what's going on, the description is too abstract; revise.

Three project sessions, all WebCraft:

  • ✅ Hero section · cinematic variant / "Trying a darker hero direction with type-driven impact; layered on the existing palette so a rollback is one file."
  • ✅ Pricing page draft v3 / "Three-tier comparison with annual/monthly toggle. Holding on copy until the legal team weighs in."
  • ✅ Footer + nav rebuild / "Replacing the placeholder footer + collapsing the nav from 6 items to 4. Affects every page; will need a polish pass after."

All three are clearly distinct topics in the same project. That's the bar.

© pandazki, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in modes/_shared/skills/pneuma-session of pandazki/pneuma-skills.

Open the folder on GitHubat commit 0023d3c

Compare with similar skills

Pneuma Session next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Pneuma Session compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Pneuma Session this skillpandazki/pneuma-skills161—~2.8kAutomated safety check: PassMIT
Hook Development for Claude Code Pluginsanthropics/claude-plugins-official38k10 repos~4.1kAutomated safety check: NotesApache-2.0
Plugin Settings Patternanthropics/claude-plugins-official38k7 repos~3kAutomated safety check: PassApache-2.0
Mole Bug Patternstw93/Mole70k—~2kAutomated safety check: PassGPL-3.0
Neat-Freak Knowledge CloseoutKKKKhazix/khazix-skills21k—~1.9kAutomated safety check: PassMIT
E2Ecallstack/react-native-pager-view3.4k1 repos~2.1kAutomated safety check: PassMIT

Similar skills

  • Hook Development for Claude Code Plugins

    anthropics/claude-plugins-official

    Official

    Explains how to write Claude Code plugin hooks, both prompt-based checks and bash commands, for events such as PreToolUse, Stop and SessionStart.

    38k GitHub starsUsed in 10 repos~4.1k tokens
    Agent WorkflowsAuto-check: notes
  • Plugin Settings Pattern

    anthropics/claude-plugins-official

    Official

    Shows how Claude Code plugins keep per-project settings and state in .claude/plugin-name.local.md files with YAML frontmatter and a markdown body.

    38k GitHub starsUsed in 7 repos~3k tokens
    Agent WorkflowsAuto-check passed
  • A catalog of recurring bug shapes in the Mole Mac cleaner, used to review safety-sensitive diffs for deletion safety, unbounded commands, shell traps and weak tests.

    70k GitHub stars~2k tokensUpdated today
    DevelopmentAuto-check passed
  • Neat-Freak Knowledge Closeout

    KKKKhazix/khazix-skills

    Brings project docs, agent rule files, authorized memory and leftover workspace files back in line with what the code and runtime actually do at the end of a work session.

    21k GitHub stars~1.9k tokensUpdated 9 days ago
    Agent WorkflowsAuto-check passed
  • E2E

    callstack/react-native-pager-view

    Agentic end-to-end tests with e2e, the e2e runner. An agent skill from callstack/react-native-pager-view.

    3.4k GitHub starsUsed in 1 repo~2.1k tokens
    Testing & QAAuto-check passed
  • Runs a spec-driven workflow from PRD to epic to GitHub issues to parallel agents, with status, standup and blocked-work reports from bundled scripts.

    8.4k GitHub stars~1.1k tokensUpdated 6 mo ago
    Product & Project ManagementAuto-check passed

More from pandazki/pneuma-skills

All 30 skills in this repo
  • Pneuma Bansho

    pandazki/pneuma-skills

    Explain something by writing it on a board. An agent skill from pandazki/pneuma-skills.

    161 GitHub stars~6.9k tokensUpdated yesterday
    Auto-check passed
  • Pneuma Clipcraft

    pandazki/pneuma-skills

    AI-orchestrated video production on @pneuma-craft. An agent skill from pandazki/pneuma-skills.

    161 GitHub stars~7.5k tokensUpdated yesterday
    Auto-check: notes
  • Pneuma Lucid

    pandazki/pneuma-skills

    Pneuma Lucid Mode workspace guidelines. An agent skill from pandazki/pneuma-skills.

    161 GitHub stars~4.6k tokensUpdated yesterday
    Auto-check: warnings
  • Pneuma Plotwise

    pandazki/pneuma-skills

    Pneuma Plotwise workspace guidelines. An agent skill from pandazki/pneuma-skills.

    161 GitHub stars~8.9k tokensUpdated yesterday
    Auto-check passed
  • Pneuma Sprite

    pandazki/pneuma-skills

    Pneuma Sprite Mode workspace guidelines. An agent skill from pandazki/pneuma-skills.

    161 GitHub stars~16k tokensUpdated yesterday
    Auto-check passed
  • Pneuma Webcraft

    pandazki/pneuma-skills

    Pneuma WebCraft Mode workspace guidelines with Impeccable.style design intelligence.

    161 GitHub stars~7.5k tokensUpdated yesterday
    Auto-check: notes

Works with

Questions about Pneuma Session

What does Pneuma Session do?

Rewrite the active Pneuma session's UI title + one-line summary so the launcher and ProjectPanel rows reflect what the session is actually about. Pneuma Session is an agent skill from pandazki/pneuma-skills. Rewrite the active Pneuma session's UI title + one-line summary so the launcher and ProjectPanel rows reflect what the session is actually about.

When should I use Pneuma Session?

Pneuma Session fits situations like: the user asks to 整理 / 概括 / refresh / re-title / summarize this session; whenever the conversation has produced substantive work and the default title (WebCraft session) is now uninformative; before the user pauses a long session — the next time they reopen it; the row needs to say more than <pneuma:env reason=opened.

How do I install Pneuma Session in Claude Code?

Run `npx skills add pandazki/pneuma-skills --skill pneuma-session -a claude-code`. Or copy the skill folder (modes/_shared/skills/pneuma-session in pandazki/pneuma-skills) into .claude/skills/pneuma-session in your project. Claude Code loads it when a task matches its description.

How do I install Pneuma Session in Codex?

Run `npx skills add pandazki/pneuma-skills --skill pneuma-session -a codex`. Or copy the skill folder (modes/_shared/skills/pneuma-session in pandazki/pneuma-skills) into .agents/skills/pneuma-session in your project. Codex loads it when a task matches its description.

Can I use Pneuma Session in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add pandazki/pneuma-skills --skill pneuma-session -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pneuma-session, .gemini/skills/pneuma-session, .github/skills/pneuma-session and .opencode/skills/pneuma-session in your project.

What does Pneuma Session need to run?

SKILL.md names no scripts, command-line tools or credentials: Pneuma Session is instructions for the agent only.

Does Pneuma Session access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Pneuma Session safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Pneuma Session use?

Pneuma Session is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Pneuma Session use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Pneuma Session?

Skills that share tags, products or a category with Pneuma Session: Hook Development for Claude Code Plugins (anthropics/claude-plugins-official, 38k stars), Plugin Settings Pattern (anthropics/claude-plugins-official, 38k stars), Mole Bug Patterns (tw93/Mole, 70k stars) and Neat-Freak Knowledge Closeout (KKKKhazix/khazix-skills, 21k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Pneuma Session?

pandazki (a GitHub user) maintains it in pandazki/pneuma-skills, which has 161 GitHub stars. The repository holds 30 skills in this directory. The repository was last updated on October 9, 2026.

Source: pandazki/pneuma-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.