Files
nanobot-runtime/skills/project/SKILL.md
2026-07-22 12:31:40 +02:00

5.4 KiB

name, description
name description
project Switch between named ongoing projects, each with its own persistent context, carried forward across turns until the user switches or ends it. Triggers on: "project X", "switch to project X", "we're working on X", "end project" / "no project". For a long-lived, named work context — not a single task to plan and execute, and not a short or global fact to remember.

Project

Named, long-lived work contexts. Each project keeps its own instructions, its own history, its own current-state summary, and its own generated files — separate from every other project and from the agent's general memory.

Layout

workspace/projects/<slug>/:

  • prompt.md — project-specific context/instructions, read in full whenever the project becomes active
  • memory.md — append-only chronological log of decisions and history
  • state.md — living document: the current state/synthesis of the project, edited in place, not appended to
  • artifacts/ — generated files (documents, code, data exports, reports)

Which project is active is tracked purely through conversation memory — nothing is persisted to disk for that. Once a project is chosen, keep treating it as active for the rest of this conversation; don't re-read its files on every subsequent turn once they're already in context.

Activation

Triggered by "project X" / "switch to project X" / "we're working on X":

  1. Turn X into a kebab-case directory name (like picking a slug for a plan file — no need to spell out an algorithm, just pick something sensible).
  2. workspace/projects/<slug>/ already exists → read prompt.md, memory.md, and state.md in full, then briefly confirm what's active and, if prompt.md or state.md has content, what context you loaded.
  3. It doesn't exist, but the name is a close match to one or more existing projects (case-insensitive) → ask which one was meant. Don't guess, and don't create a near-duplicate of an existing project.
  4. It doesn't exist and there's no close match → this skill only works with projects that already exist without asking. Ask the user whether to start a new project with that name. Only on explicit yes, create prompt.md, memory.md, state.md (all empty) and artifacts/. Never create a project just because a trigger phrase was said.

Already active: if the same project is already active in this conversation, don't re-create or re-read anything — just continue.

Staying active

Once a project is active, keep applying its prompt.md instructions and state.md context for the rest of the conversation, until the user switches or ends it.

If a long gap or an ambiguous reference makes it unclear whether the project is still the right context (e.g. the conversation has clearly moved to an unrelated topic), ask rather than silently carrying it forward or silently dropping it.

Switching and ending

  • "switch to Y" → run the Activation flow for Y; Y becomes active instead.
  • "end project" / "no project" / "stop working on X" → stop treating any project as active. Say so. Don't delete anything.
  • With no active project, behave normally — never force a project onto an unrelated request.

Writing to memory.md

Append only — never rewrite or reorder existing entries. One entry per decision, dead end, or noteworthy piece of history:

- YYYY-MM-DD: <terse entry, reformulated, not verbatim>

Write an entry when a decision is made, a dead end is found, or a fact central to the project's ongoing context emerges — not for routine back-and-forth. When in doubt whether something is memory-worthy, prefer not writing it; memory.md is for what a future conversation needs to pick up the thread, not a transcript.

Maintaining state.md

Unlike memory.md, state.md is edited in place: surgically update the relevant section when the project's current state or understanding has moved on enough that the old text would mislead a reader. It answers "where is this now", not "what happened" — old content gets replaced, not appended to. If it's still empty and the project has accumulated enough context to synthesize, offer to draft it.

Artifacts

Files generated while working on the project (documents, code, data exports, reports) go in workspace/projects/<slug>/artifacts/ instead of scattered elsewhere. Name them descriptively; no numbering or index file needed at this scale.

Listing

"list projects" / "which projects exist": list the directory names under workspace/projects/. If none exist, say so.

Edge cases

  • "project" with no name → ask which project.
  • The project directory exists but one or more of prompt.md / memory.md / state.md is missing (e.g. created by hand) → create the missing file(s) empty, don't error.
  • Deleting or renaming a project is out of scope for this skill — point the user at workspace/projects/<slug>/ to do it by hand.

Rules

  • This skill's body is English; reply to the user in their own language.
  • Never fabricate project content — prompt.md, memory.md, and state.md only grow from what the user actually said or what actually happened.
  • Never create a new project without the user's explicit confirmation.
  • Don't force a project context onto an unrelated request.
  • The Dream memory processor must not touch workspace/projects/ — it is outside the memory and skills Dream curates.