Instance Awareness
n8n-io/n8n
Load when the request depends on what is already on this instance rather than on what the user just typed: a short or ambiguous opener ("fix it", "carry on", "what should I look at"), a reference to…
Project-context awareness — multi-session workflows around one topic, shared materials and preferences, and cross-mode handoffs as a high-value user path.
$ npx skills add pandazki/pneuma-skills --skill pneuma-project -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-project --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-project .claude/skills/pneuma-project && rm -rf skills-srcUse ~/.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/
Install the "pneuma-project" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/_shared/skills/pneuma-project into .claude/skills/pneuma-project/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-project", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/pandazki/pneuma-skills/tree/main/modes/_shared/skills/pneuma-projectType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add pandazki/pneuma-skills --skill pneuma-project -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-project --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/modes/_shared/skills/pneuma-project .agents/skills/pneuma-project && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pneuma-project" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/_shared/skills/pneuma-project into .agents/skills/pneuma-project/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-project", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pandazki/pneuma-skills --skill pneuma-project -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-project --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/modes/_shared/skills/pneuma-project .cursor/skills/pneuma-project && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pneuma-project" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/_shared/skills/pneuma-project into .cursor/skills/pneuma-project/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-project", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/pandazki/pneuma-skills.git --path modes/_shared/skills/pneuma-project--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add pandazki/pneuma-skills --skill pneuma-project -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-project --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/modes/_shared/skills/pneuma-project .gemini/skills/pneuma-project && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pneuma-project" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/_shared/skills/pneuma-project into .gemini/skills/pneuma-project/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-project", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install pandazki/pneuma-skills pneuma-projectInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add pandazki/pneuma-skills --skill pneuma-project -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/modes/_shared/skills/pneuma-project .github/skills/pneuma-project && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pneuma-project" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/_shared/skills/pneuma-project into .github/skills/pneuma-project/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-project", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pandazki/pneuma-skills --skill pneuma-project -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-project --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/modes/_shared/skills/pneuma-project .opencode/skills/pneuma-project && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pneuma-project" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/_shared/skills/pneuma-project into .opencode/skills/pneuma-project/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-project", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pneuma-projectProject-context awareness — multi-session workflows around one topic, shared materials and preferences, and cross-mode handoffs as a high-value user path.
Pneuma Project is an agent skill from pandazki/pneuma-skills. Project-context awareness — multi-session workflows around one topic, shared materials and preferences, and cross-mode handoffs as a high-value user path.
Its SKILL.md is about 6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: Co-creation infrastructure for humans and code agents — visual environment, skills, continuous learning, and distribution. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0023d3c. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are bash and json).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pneuma Project loads about 6k tokens when it runs. Until then it costs about 42 tokens; SKILL.md has 3,031 words of instructions outside code blocks.
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.
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.
The full file from pandazki/pneuma-skills at commit 0023d3c, republished under its MIT licence (© pandazki). 3,031 words, ~5,963 tokens.
.claude/skills/pneuma-project/SKILL.md (or your agent's skills folder).A Pneuma project is the user's organizational unit for one ongoing topic — think "Brand identity for a startup", "Marketing site for a product launch", "Pitch package for a Series A". Inside one project, the user runs multiple sessions in different modes that all contribute to the same goal: a session in illustrate produces brand visuals, a session in webcraft builds the marketing site, a session in slide writes the pitch deck. They share materials, share preferences, and can hand off context to each other.
You are one of those sessions. The work you do here is part of a larger arc, not a standalone exercise. Approach the conversation with that in mind.
Two paths matter, both injected as env vars:
$PNEUMA_PROJECT_ROOT — the user's project directory. Final deliverables go here. Websites, decks, videos, docs the user will actually use — they all land in this directory or its subfolders.$PNEUMA_SESSION_DIR — your private working area, also your CWD. Drafts, scratch notes, internal state, intermediate artifacts. Don't write deliverables here.Project metadata lives at $PNEUMA_PROJECT_ROOT/.pneuma/project.json. Read it for project identity and description. Don't edit it casually — that's the project's identity, the user manages it.
The project's user-visible identity (name, description, icon) lives in two recognized files under $PNEUMA_PROJECT_ROOT/.pneuma/. Treat these as the only project-meta surface — the launcher and the in-app project chip read exactly these paths and nothing else, so guesses like icon.png, cover.svg, or meta.json will silently do nothing.
project.json — manifestSchema:
{
"version": 1,
"name": "pneuma-demo-project",
"displayName": "Pneuma Demo Project",
"description": "...optional, shown under the title in the project chip and launcher card...",
"createdAt": 1740000000000
}name is the directory-derived slug. Don't change it.displayName and description are user-facing; you may refine them when the user explicitly asks ("update the project description to X"). Otherwise leave them alone.version and createdAt are runtime fields. Don't touch.cover.png — project iconStrict rules:
$PNEUMA_PROJECT_ROOT/.pneuma/cover.png. Anything else (icon.png, cover.jpg, cover.svg, cover@2x.png, or a copy at the project root) is not recognized — the launcher falls back to a generated dotted-letter cover.object-fit: cover, so non-square inputs get cropped on the longer axis. Generate at 512×512 or larger; the runtime resizes for display..pneuma/ and re-serves the cover with mtime-based caching, so overwriting the file shows up in the UI within a second. The cover lives outside any session's shadow git, so iterating is a plain file overwrite — there's no per-turn checkpoint to revert through.$PNEUMA_PROJECT_ROOT/.pneuma/sessions/<your-id>/thumbnail.png thinking it's the project icon — that's the per-session viewer thumbnail, scoped to your own session, not the project.If the user asks you to "make a project icon / cover / logo" and you produce an image (typically inside illustrate, draw, kami, or another image-producing mode), save the final asset to $PNEUMA_PROJECT_ROOT/.pneuma/cover.png and confirm the path back to the user. Don't drop it in your session dir — that won't be picked up.
If your active instructions file (CLAUDE.md for Claude Code, AGENTS.md for Codex/Kimi) contains a <!-- pneuma:project-atlas:start --> ... <!-- pneuma:project-atlas:end --> block, the project has been atlas-seeded. The block is a pointer, not the briefing itself — the runtime keeps your prompt lean by not inlining the atlas file every turn.
On session start (or your first action of substance), Read $PNEUMA_PROJECT_ROOT/.pneuma/project-atlas.md. Treat its contents as authoritative for:
Use the atlas before re-asking the user. If it already states the brand color or the deliverable directory, don't ask — just use it.
You don't need to re-Read the atlas every turn — once is enough for a session unless the user signals it changed (e.g. "I just refreshed the atlas"). If the file isn't where the pointer says, the project layer is misconfigured; mention it.
The atlas is maintained by the project-evolve mode (Project chip's Evolve sparkle). Never edit project-atlas.md yourself unless the user explicitly asks; let them trigger an evolution pass when the project context shifts. If you notice the atlas is missing details that would help your work, flag the gap — don't fabricate the missing parts.
If no pneuma:project-atlas block is in your active instructions file, the project hasn't been atlas-seeded yet. That's normal for fresh projects — work from project.json + the user's prompt instead, and you can suggest "we could run project-evolve to seed an atlas if this becomes a multi-session effort."
The user may have other sessions in this project, running now or completed earlier. They live at $PNEUMA_PROJECT_ROOT/.pneuma/sessions/<otherId>/. List them with ls $PNEUMA_PROJECT_ROOT/.pneuma/sessions/.
Don't read inside other sessions' directories. Their history.json, shadow.git/, scratch — that's their workspace, not yours. If you need context from a sibling, it should come through one of:
$PNEUMA_PROJECT_ROOT/ — shared assets, shared deliverables. These are the project's common ground.This isolation isn't bureaucratic. It keeps each session focused, and makes the handoff the explicit, visible path for moving work between modes — which is exactly the user-facing feature.
$PNEUMA_PROJECT_ROOT/.pneuma/preferences/ holds project-scoped preferences. Same schema as personal preferences in ~/.pneuma/preferences/, but scoped to this project:
profile.md — cross-mode project preferencesmode-{name}.md — per-mode project preferences (create on demand)<!-- pneuma-critical:start --> ... <!-- pneuma-critical:end --> — hard constraints, auto-injected into your active instructions file pneuma:project block at session start<!-- changelog:start --> ... <!-- changelog:end --> — your update logWhen updating: read first, then full-rewrite (last-writer-wins). Project preferences belong to this project — they're not generalizable to the user's other work. Personal preferences live in ~/.pneuma/preferences/ and are managed by the pneuma-preferences skill.
Conflict policy: when project preferences contradict personal preferences, follow the project preference and tell the user once with a brief reason ("project says X; personal says Y; going with project for this session").
<pneuma:env> start signalEvery session starts with an environment-context message injected into your chat as the first user-side turn. It looks like:
<pneuma:env reason="opened" project="Pneuma Demo Project" mode="webcraft" />or:
<pneuma:env reason="switched"
project="Pneuma Demo Project"
from_session="dd2573f5"
from_mode="illustrate"
from_display_name="Brand exploration" />or, if you were spawned from an explicit Smart Handoff:
<pneuma:env reason="handed-off"
project="Pneuma Demo Project"
from_session="dd2573f5"
from_mode="illustrate"
from_display_name="Brand exploration"
inbound_path="/Users/.../.pneuma/sessions/<id>/.pneuma/inbound-handoff.json" />The inbound_path attribute on the handed-off form points at the raw structured payload on disk. You usually don't need to read it — the pneuma:handoff block in your active instructions file already carries the parsed content as a system briefing. Reach for inbound_path only when you need the original JSON (e.g. to iterate suggested_files precisely, or to verify a field that the active instructions file formatting elided).
reason semantics — adjust your behavior accordingly:
opened — fresh start. The user opened a new session; there's no precursor and nothing to inspect yet. Reply with one short sentence saying the mode is ready, then wait for the user's first request.
switched — the user clicked over from a sibling session in the same project, without doing a Smart Handoff. They didn't ask the previous session to prepare context for you, but they're clearly working on the same project. Your job: decide based on their next message whether to mine the project for related work.
$PNEUMA_PROJECT_ROOT/ for relevant deliverables (the previous session's outputs would have been promoted there). Mention what you found.$PNEUMA_PROJECT_ROOT/.pneuma/sessions/<from_session>/ internals — that's the previous session's private workspace. Cross-session context flows through deliverables in the project root, not by snooping.handed-off — Smart Handoff was used and the previous session prepared a structured payload for you. Your active instructions file will also contain a pneuma:handoff block with intent / summary / suggested files / decisions / open questions. Treat that block as authoritative; see "Receiving a handoff" below.
The <pneuma:env> tag is informational, not directive. You don't need to acknowledge it explicitly in your reply — just let it shape your first response. Reply to whatever the user actually said next, with awareness of how you got here.
Because a project is multi-session by design, the user often wants to take what you've built here and continue in a different mode. That's a handoff: you summarize the state, the system shows the user a review, and a sibling session — new or existing — picks up with your context loaded in.
This is a high-value user path, not a side feature. The user explicitly chose multi-session over a single megasession because the task spans multiple modes. Handoffs are how the modes connect. Treat handoff preparation as a first-class step of your work.
Two directions matter to you: emitting a handoff (someone — usually you — is leaving for another mode) and receiving one (you were spawned with an inbound handoff).
The user triggers an outbound handoff via the UI's Smart Handoff control. You'll see a chat message arrive that looks like:
<pneuma:request-handoff target="webcraft" target_session="auto" intent="Build a one-page landing site from this brand identity" />This is your cue to prepare a structured handoff for the target. Think hard about what the target needs:
intent from the tag — refine it with what you know.$PNEUMA_PROJECT_ROOT. Order them by importance.Once you've organized that context, call the handoff CLI through the $PNEUMA_CLI env var. This is the system function that hands the payload to Pneuma. The env var resolves to the right invocation regardless of how Pneuma was installed (production npm-install or dev worktree); writing the literal pneuma handoff only works when the binary is on PATH, so always prefer $PNEUMA_CLI. The command reads JSON from stdin or the --json flag:
$PNEUMA_CLI handoff --json '{
"target_mode": "webcraft",
"target_session": "auto",
"intent": "Build a one-page landing site from this brand identity",
"summary": "Created a brand identity with serif logo (Fraunces), warm orange palette anchored on #f97316, and an editorial photo treatment. Brand voice: confident, restrained, technical.",
"suggested_files": [
"brand/logo.svg",
"brand/palette.md",
"brand/voice.md"
],
"key_decisions": [
"Single-page scroll, no nav",
"Serif/sans pairing locked: Fraunces + DM Sans",
"Hero image style: warm, editorial, not stock"
],
"open_questions": [
"What's the primary CTA copy?",
"Sign-up form or email-only capture?"
]
}'Field reference:
| Field | Required | Notes |
|---|---|---|
target_mode | yes | Mode name (e.g. webcraft, slide, doc) |
target_session | no | Existing session id to resume into; auto or omit to spawn fresh. Project sessions only — a quick session has no siblings to name, and the field is ignored there |
intent | yes | One sentence — what the target should accomplish |
summary | recommended | A few sentences on what's done in this session |
suggested_files | recommended | Ordered list of $PNEUMA_PROJECT_ROOT-relative paths the target should read first |
key_decisions | optional | What's locked in — saves the target from relitigating |
open_questions | optional | What's still open — gives the target permission to decide or ask |
$PNEUMA_CLI handoffPneuma takes your payload and shows the user a review card with your intent, summary, suggested files, decisions, and open questions. The user reads it and either:
Confirms the switch → Pneuma kills your session and spawns the target with your payload as its inbound handoff. Your conversation here ends.
Cancels → They reconsidered, or want you to refine first. You'll see a chat message:
<pneuma:handoff-cancelled reason="<short reason if user provided one>" />When you see the cancel tag: continue the conversation naturally. Don't be defensive about your handoff; the user is the decider. If they have feedback ("the summary missed the typography decisions"), incorporate it. When they're ready, they'll trigger Smart Handoff again. You don't need to re-call $PNEUMA_CLI handoff until then.
Don't call $PNEUMA_CLI handoff autonomously — wait for the <pneuma:request-handoff> tag. Don't call it twice for the same request. If the user wants to switch back to this mode later, they'll do another Smart Handoff from there.
If you were spawned because someone handed off to you, your active instructions file will contain a pneuma:handoff block with the inbound payload, formatted like:
<!-- pneuma:handoff:start -->
**Inbound from <source-mode>** (session <source-session-id>)
**Intent**: <intent>
**Summary**: <source's summary>
**Suggested files** (read in order):
- `path/to/file.ext` — why
- ...
**Decisions already locked in**:
- ...
**Open questions**:
- ...
<!-- pneuma:handoff:end -->Treat this as a system briefing. Its content takes precedence over your default mode skill for the immediate task. Your first move:
Don't ignore an inbound handoff. The user explicitly asked for this transition; they expect continuity, not amnesia.
A handoff is a goto: you leave, the target takes over, control doesn't come back. A borrow is a subroutine call: you stay live and in the foreground, you lend out one bounded job to another mode, it does the job in a background sub-session and returns a result, and you fold that result into your work. Use a borrow when you want another mode's craft for a piece of what you're building, but you keep owning the whole.
Driving examples:
webcraft with a finished, styled landing page. The prose needs the writing-taste treatment that lives in wordtaste. You borrow wordtaste to polish the copy, get polished markdown + change-notes back, and you weave it into the page (adapting it to your layout and visual tone — that's your job, not the borrowed mode's).webcraft and need a logo. You borrow illustrate to produce one, get the file path back, and you place it in the page.When the user wants another mode's capability for a bounded piece of your work — or you see a <pneuma:request-borrow mode="..." /> tag arrive in chat — prepare a tight, bounded brief and call the borrow CLI through $PNEUMA_CLI (the env var resolves to the right invocation regardless of how Pneuma was installed):
$PNEUMA_CLI borrow --mode wordtaste --json '{
"brief": "Polish the hero + about copy in the user'\''s confident, restrained voice. Keep it tight.",
"inputs": ["site/index.html", "brand/voice.md"],
"expects": "polished markdown for each section + a per-section change-notes list mapping original → revised with a one-line rationale",
"scope": "return"
}'Field reference:
| Field | Required | Notes |
|---|---|---|
mode (via --mode) | yes | The mode to borrow (e.g. wordtaste, illustrate, doc) |
brief | yes | The ONE bounded job, stated for the borrowed mode's first turn. Keep it scoped — a borrow is a sub-task, not an open-ended session |
inputs | recommended | Host files/dirs the borrowed mode should read (read-only). Absolute or project-relative paths |
expects | recommended | What it must produce, in its terms — be concrete about the deliverable shape |
scope | no | "return" (default) — it returns content + notes, you apply them. "in-place" — it edits host files you name in in_place_targets directly (only for media it genuinely owns, e.g. regenerating an existing asset) |
in_place_targets | only for in-place | Host files the borrowed mode may edit directly |
summary | optional | Extra context the brief alone can't carry |
The CLI returns { borrow_id, state } and exits immediately — the borrowed mode runs in the background. You stay live and keep talking to the user. Do not block waiting; carry on with whatever else the user wants.
Default to scope: "return". You own your medium (the page, the deck, the doc); the borrowed mode owns its craft (the prose, the image). It produces the best version in its terms; you adapt and place it so the whole stays unified. Reach for in-place only when the borrowed mode genuinely owns the exact file (e.g. regenerating assets/logo.png).
When the borrowed mode finishes, you'll see a tag arrive at a safe turn boundary (never mid-turn):
<pneuma:borrow-returned borrow_id="..." mode="wordtaste" status="completed" result_path="/abs/path/to/borrow-result.json" />On this tag:
result_path file. It's a BorrowResult: produced[] (the deliverable paths), change_notes (what changed and why, in the borrowed mode's voice), optional applied_in_place and open_questions. Treat a missing/invalid file as a failed borrow — tell the user, don't fabricate.scope: "return" — the result lives in the borrowed mode's reach. You apply it: read produced[], weave the content into your host artifact, adapting it to your layout/medium. Surface the change_notes to the user so the application is a visible, reviewable step. Get the user's go-ahead before large rewrites.scope: "in-place" — the borrowed mode already edited the host files in applied_in_place. Review them, reconcile with your medium, and surface what changed.open_questions — propose answers or ask the user.A status: "partial" borrow still produced something useful but left open questions; a failed borrow produced nothing — handle both gracefully.
If you were spawned as a borrow target, your active instructions file carries a pneuma:handoff block framed as a borrow (<pneuma:env reason="borrow" .../> on start). That block tells you the bounded job, the inputs, the expected deliverable, the scope, and — crucially — the exact pneuma borrow-return call to make when you're done, with the borrow_id + host_server_url pre-filled. Do the bounded job, write your deliverable(s) into your own session dir (for scope: "return"), then make that borrow-return call and rm .pneuma/borrow-brief.json. Do not treat it as a terminal handoff (you are not taking over) and do not start unrelated work — a borrow is one bounded job, then control returns to the host.
Don't auto-borrow open-endedly. A borrow is a deliberate, bounded delegation — wait for a clear need (the user asks for another mode's capability, or a <pneuma:request-borrow> tag), keep the brief tight, and fold the result back yourself.
$PNEUMA_SESSION_DIR.project.json. The user manages that via the launcher's edit dialog.<pneuma:request-handoff> tag.scope: "return" and apply the result yourself.$PNEUMA_CLI handoff; there is no handoff file to write by hand.$PNEUMA_PROJECT_ROOT/.pneuma/preferences/profile.md first.© pandazki, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in modes/_shared/skills/pneuma-project of pandazki/pneuma-skills.
Open the folder on GitHubat commit 0023d3c
Pneuma Project 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pneuma Project this skillpandazki/pneuma-skills | 161 | — | ~6k | Automated safety check: Pass | MIT | |
| Instance Awarenessn8n-io/n8n | 207k | — | ~1.4k | Automated safety check: Pass | Custom licence | |
| Cost Aware LLM Pipelineaffaan-m/ECC | 276k | 3 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Cost Aware LLM Pipelineaffaan-m/ECC | 276k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Configuring Identity Aware Proxy With Google Iapmukul975/Anthropic-Cybersecurity-Skills | 34k | — | ~3.7k | Automated safety check: Pass | Apache-2.0 | |
| Awareness Stage Mappersickn33/agentic-awesome-skills | 47k | 2 repos | ~1.5k | Automated safety check: Pass | MIT |
n8n-io/n8n
Load when the request depends on what is already on this instance rather than on what the user just typed: a short or ambiguous opener ("fix it", "carry on", "what should I look at"), a reference to…
affaan-m/ECC
LLM API 使用成本优化模式 —— 基于任务复杂度的模型路由、预算跟踪、重试逻辑和提示缓存. An agent skill from affaan-m/ECC.
affaan-m/ECC
LLM APIの使用量のコスト最適化パターン — タスクの複雑さによるモデルルーティング、予算追跡、リトライロジック、プロンプトキャッシング。
mukul975/Anthropic-Cybersecurity-Skills
Configures Google Cloud Identity-Aware Proxy (IAP) via gcloud to enforce per-request identity verification on Compute Engine, App Engine, Cloud Run, and GKE, including IAM bindings, Access Context…
sickn33/agentic-awesome-skills
One sentence - what this skill does and when to invoke it. An agent skill from sickn33/agentic-awesome-skills.
BuilderIO/agent-native
How the agent knows what the user is looking at. An agent skill from BuilderIO/agent-native.
pandazki/pneuma-skills
Explain something by writing it on a board. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
AI-orchestrated video production on @pneuma-craft. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
Pneuma Lucid Mode workspace guidelines. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
Pneuma Plotwise workspace guidelines. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
Pneuma Sprite Mode workspace guidelines. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
Pneuma WebCraft Mode workspace guidelines with Impeccable.style design intelligence.
Project-context awareness — multi-session workflows around one topic, shared materials and preferences, and cross-mode handoffs as a high-value user path. Pneuma Project is an agent skill from pandazki/pneuma-skills. Project-context awareness — multi-session workflows around one topic, shared materials and preferences, and cross-mode handoffs as a high-value user path.
Run `npx skills add pandazki/pneuma-skills --skill pneuma-project -a claude-code`. Or copy the skill folder (modes/_shared/skills/pneuma-project in pandazki/pneuma-skills) into .claude/skills/pneuma-project in your project. Claude Code loads it when a task matches its description.
Run `npx skills add pandazki/pneuma-skills --skill pneuma-project -a codex`. Or copy the skill folder (modes/_shared/skills/pneuma-project in pandazki/pneuma-skills) into .agents/skills/pneuma-project in your project. Codex loads it when a task matches its description.
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-project -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-project, .gemini/skills/pneuma-project, .github/skills/pneuma-project and .opencode/skills/pneuma-project in your project.
SKILL.md names no scripts, command-line tools or credentials: Pneuma Project is instructions for the agent only.
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.
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.
Pneuma Project is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pneuma Project: Instance Awareness (n8n-io/n8n, 207k stars), Cost Aware LLM Pipeline (affaan-m/ECC, 276k stars), Cost Aware LLM Pipeline (affaan-m/ECC, 276k stars) and Configuring Identity Aware Proxy With Google Iap (mukul975/Anthropic-Cybersecurity-Skills, 34k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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.