Skip to content

NodeSpace skill instructions don't establish it as the source of truth for docs/specs — only teaches how to call functions #2272

Closed as not planned

Description

@mstomar125

Problem

The NodeSpace skill's bundled instructions are generated around how to use NodeSpace's functions (create/query/update nodes, etc.), but nothing tells an agent that NodeSpace is meant to be treated as the source of truth for docs, specs, and similar durable knowledge — so an agent using the skill has no signal to actually reach for it when the task calls for reading or writing that kind of content.

Ask

Add explicit instructions to the skill establishing NodeSpace as the source of truth for docs/specs/decisions, not just a functional API reference — something that tells an agent when to use it (e.g. "before writing a spec, check NodeSpace first"; "durable project knowledge belongs here, not scattered across repo READMEs"), not just how.

Follow-on consequence

Once the skill states this clearly, teams' own CLAUDE.md files likely need updating to actually point agents at it — e.g. a repo's CLAUDE.md that currently doesn't mention NodeSpace at all won't have its agents reach for the skill even once the skill itself is fixed. Raised in a team discussion as something that may require updating CLAUDE.md files outside this repo as a consequence (not something to action here, just noting the dependency).

Where

packages/skill (the source the bundled skill is built from — see scripts/build-skill.ts).


Raised from a team discussion, filed 2026-08-24.

Activity

  1. self-assigned this
    on Aug 24, 2026
  2. malibio commented on Aug 24, 2026

    @malibio
    Collaborator

    Investigation: the fix needs to happen in the frontmatter description, not (only) the body

    Working through this alongside #1958 surfaced a mechanism issue that changes what "add explicit instructions to the skill" has to mean in practice.

    The body is not the discovery surface

    Under the Agent Skills standard (agentskills.io), skills load by progressive disclosure:

    1. Discovery — agents load only name + description at startup (~100 tokens)
    2. Activation — the full SKILL.md body is read into context when a task matches the description
    3. Execution — scripts/ / references/ load on demand

    So instructions added to the body change what an agent understands after it has already decided to load the skill. They have no effect on whether it loads. An agent about to write a spec never reaches them.

    This matters because on the user-launched path (the user starts Claude Code/Codex themselves; see #1958 for scope) the skill is the only channel — there is no per-session context assembly to compensate. If the description doesn't match, NodeSpace never enters the session at all.

    The current description has no docs/specs vocabulary

    The installed description is generated at packages/skill/src/agents.ts:16-27. Its trigger vocabulary is entirely personal-memory framing:

    "remember something for later", "recall what was decided or discovered earlier", "save notes/tasks/findings/decisions", "search prior context at the start of a task", "check nodespace", "what did we save"

    There is no spec, ADR, architecture, design, requirements, or planning vocabulary anywhere in it. An agent about to write an ADR has nothing to match against — which is precisely the gap this issue describes, sitting one layer below where the issue proposes to fix it.

    Two further problems in the same place

    1. The description is Claude-Code-only. agents.ts:31-54 prepends CLAUDE_CODE_SKILL_FRONTMATTER for Claude Code alone; the Codex, Gemini, and OpenCode entries carry no skillFrontmatter. Under the standard, name and description are required — a skill folder without them is malformed. Since all four of these harnesses now read the Agent Skills format natively, NodeSpace currently ships a spec-invalid skill to three of its four targets, where it may not be discoverable at all.

    2. The definition itself under-sells the product, not just the "when". SKILL.md's opening line — the first thing any agent reads on activation — is:

    "NodeSpace is a local-first knowledge graph that stores notes, tasks, and structured data on your machine. It persists across sessions."

    Accurate, but it positions NodeSpace as a notes app with an API; the same sentence would fit Obsidian. Compare strategy/vision.md ("What NodeSpace Is") in nodespace-docs:

    "NodeSpace is context infrastructure for AI-native development... Repositories contain what was built. NodeSpace contains why it was built, how it should be built, and what agents need to know to build it correctly."

    And Principle 1 (strategy/principles.md): "Code is artifact. Context is infrastructure."

    Nothing in the shipped skill carries that framing. An agent reading the current opening has no reason to think specs, ADRs, or architecture decisions belong in NodeSpace rather than a README. So this issue's scope should widen slightly: the definition needs fixing too, not only the "when to use it" guidance. They're the same fix — an agent told NodeSpace holds "why it was built" needs much less separate instruction to check it before writing a spec.

    Proposed description

    Spec constraints: description max 1024 chars; the spec's own guidance is that it "should describe both what the skill does and when to use it" and "should include specific keywords that help agents identify relevant tasks."

    ---
    name: nodespace
    description: >
      Context infrastructure for AI-native development. Read and write the
      NodeSpace knowledge graph — the durable record of why a system was built
      and how it should be built: specs, architecture decisions, ADRs, designs,
      plans, standards, tasks, and findings. Use before writing or changing a
      spec, ADR, design doc, or plan; when you need the reasoning or constraints
      behind existing code; when recording a decision or discovery that should
      outlive this session; or when asked to "check nodespace".
    allowed-tools: Bash(nodespace:*)
    ---

    Treat this as a starting point, not a final answer — description wording is a tuned, measured artifact (see #1958, "Settled" item 2: descriptions are hand-tuned and explicitly excluded from generation). It should be iterated against real activation behavior, not merged on aesthetics.

    Portability constraint on frontmatter

    The spec allows exactly six fields: name, description, license, compatibility, metadata, allowed-tools. Claude Code accepts additional ones (argument-hint, disable-model-invocation, user-invocable, disallowed-tools), but non-Claude-Code distribution paths hard-error on unknown keys rather than ignoring them:

    Unexpected key(s) in SKILL.md frontmatter: argument-hint.
    Allowed properties are: allowed-tools, compatibility, description, license, metadata, name
    

    The current frontmatter already stays within the six. Worth preserving deliberately, since the skill is intended for a public import repo consumed across many harnesses.

    Also note name must match the parent directory name. Install dirs are skills/nodespace/, so name: nodespace is correct — keep them in sync.

    Suggested scope for this issue

    Note on evidence

    Do not justify description wording by citing NodeSpace's internal agent retrieval measurements. Those were produced by NodeSpace's own in-process agent loop and say nothing about how Claude Code or Codex match a skill description. #1958 carries the same warning and a manual test plan; this issue's description change should be validated the same way.

    Dependency

    This is currently untestable end-to-end: @nodespaceai/skill 404s on npm (#2271 — #1184 was closed as completed without the package ever being published), so a user cannot install the skill at all today. Fixing distribution is a prerequisite for verifying any of the above in a real harness.

  3. malibio commented on Aug 24, 2026

    @malibio
    Collaborator

    Folding this into #1958 and closing as superseded — not because the ask is wrong, but because the fix and #1958's design are the same artifact.

    The investigation above showed the change has to land in the frontmatter description (the discovery surface), alongside a definition rewrite in the body, alongside the decision about where guidance lives at all. Splitting those across two issues invites implementing a description against assumptions #1958 later overturns.

    #1958 now carries all of it verbatim: the description/body distinction, the current description's missing docs/specs vocabulary, the vision-framing definition rewrite, the proposed starting-point description, the six-field portability constraint, the all-four-harness frontmatter gap, and the CLAUDE.md follow-on dependency. Acceptance criteria were added for each.

    @mstomar125 — reassigning the work rather than dropping it; the substance is intact in #1958.

    Note also that none of this is verifiable end-to-end until #2283 lands (@nodespaceai/skill 404s, so the skill cannot currently be installed in a real harness).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions