Copy ans send this exact prompt to install all Notion Skill Registry skills ⬇️⬇️⬇️

# Notion Skills Bundle

This file combines the current contents of:

- `notion-init/SKILL.md`
- `notion-install/SKILL.md`
- `notion-update/SKILL.md`
- `notion-check-updates/SKILL.md`

Make sure you will create folder with {skill-name} and then inside of it create SKILL.md file with contents of skill.
---
---
name: notion-init
description: |
  Initializes a project-local Notion skill registry for OpenCode or Claude-style
  repos. Use when the current repository wants to install Notion-hosted skills
  into `.opencode/skills/{skill-name}/SKILL.md` or `.claude/skills/{skill-name}/SKILL.md`
  and track them in a local manifest.
version: 1.0.0
user-invocable: true
allowed-tools:
  - Read
  - Write
  - Edit
  - Bash
  - Grep
  - Glob
  - AskUserQuestion
metadata:
  author: niko
  category: notion-registry
---

# Notion Init

Initialize the local Notion-backed skill registry for the current project.

## Goal

Set up a project-local manifest that will later be used to install generated wrapper skills into:

- `.opencode/skills/{skill-name}/SKILL.md`
- `.claude/skills/{skill-name}/SKILL.md`

The manifest file should live in the same local config root:

- `.opencode/notion-skills.json`
- `.claude/notion-skills.json`

## Important scope rule

Do not write to global config folders like:

- `~/.config/opencode`
- `~/.config/claude`

Only work inside the current repository.

## Detection rules

1. Check whether `.opencode/` exists in the current project root.
2. Check whether `.claude/` exists in the current project root.

Choose target root like this:

- If `.opencode/` exists and `.claude/` does not, use `.opencode/`
- If `.claude/` exists and `.opencode/` does not, use `.claude/`
- If both exist, ask the user which one to initialize
- If neither exists, ask the user which one to create
- Default to `.opencode/` if the user has no preference

## What to create

Inside the chosen root, ensure these paths exist:

- `{root}/skills/`
- `{root}/notion-skills.json`

Where `{root}` is either `.opencode` or `.claude`.

## Manifest format

Create or repair the manifest using exactly this shape:

```json
{
  "registryVersion": 1,
  "provider": "notion",
  "root": ".opencode",
  "notion": {
    "mcpServer": "notion",
    "skillRegistryPageId": "REPLACE_ME"
  },
  "skills": {}
}

If the root is .claude, then "root" should be ".claude".

Registry page ID

This manifest must store the Notion page ID for the skill registry index page.

The registry is a regular Notion page, not a database. It contains grouped skill version links like:

If a manifest already exists:

If it is missing:

Ask the user:

Please provide the Notion Skill Registry page ID or full Notion URL.

Then normalize it:

If parsing fails, ask once more clearly.

If the manifest already exists

Read it first and preserve any installed skills.

Repair rules:

Do not delete or rewrite existing skill records unnecessarily.

Backup rules

If {root}/notion-skills.json already exists:

What this manifest is for

This file tracks which remote Notion skills are installed locally into:

Later commands like notion-install, notion-update, and notion-check-updates will use it.

Do not do these things

Implementation steps

  1. Detect .opencode/ and .claude/ in the current repo.
  2. Select the target root using the detection rules above.
  3. Ensure {root}/skills/ exists.
  4. Read {root}/notion-skills.json if it exists.
  5. Determine whether a valid registry page ID is already present.
  6. If not, ask the user for it and normalize it.
  7. Create or repair the manifest.
  8. Write pretty JSON with 2-space indentation.
  9. Re-read the file to verify correctness.
  10. Report what was created or repaired.

Success output

At the end, report:

Example valid result for OpenCode

{
  "registryVersion": 1,
  "provider": "notion",
  "root": ".opencode",
  "notion": {
    "mcpServer": "notion",
    "skillRegistryPageId": "31f186f0c3d98061bd19d38cba879b4b"
  },
  "skills": {}
}

Example valid result for Claude-style repo

{
  "registryVersion": 1,
  "provider": "notion",
  "root": ".claude",
  "notion": {
    "mcpServer": "notion",
    "skillRegistryPageId": "31f186f0c3d98061bd19d38cba879b4b"
  },
  "skills": {}
}

name: notion-install description: | Installs a project-local wrapper skill from the Notion skill registry into .opencode/skills/{skill-name}/SKILL.md or .claude/skills/{skill-name}/SKILL.md. Use when a repository wants to consume a Notion-hosted skill without copying the full skill text manually. version: 1.0.0 user-invocable: true allowed-tools:


Notion Install

Install one skill from the Notion skill registry into the current project. Make sure to always check if Skill page has any subpages/children and to install/copy all of them inside the skill directory.

Goal

Create a local wrapper skill at one of these paths:

and record it in the local manifest:

Scope rules

Detection rules

  1. Detect .opencode/ and .claude/ in the current repo.
  2. Read the corresponding local manifest:
  3. If both roots exist, prefer the one whose manifest exists.
  4. If neither manifest exists, stop and tell the user to run notion-init first.

Required input

Determine the skill name from the user request.

If the skill name is not explicit, ask:

Which skill slug should I install from Notion?

Optionally detect an explicit version from the request.

If no version is specified

Install latest-approved.

If a version is specified

Install that exact version.

Notion registry lookup

Use the Notion MCP server referenced by the local manifest under:

Fetch the Notion skill registry page identified by:

This registry is a regular page, not a database. It contains linked version pages grouped by skill, for example:

Use Notion MCP tools to:

  1. Fetch the registry page directly by page ID or page URL
  2. Read block children recursively until the relevant section and links are visible
  3. Resolve the target version page from the registry page links

Resolution rules

If an exact version was requested, such as content-creator@v2:

If only a slug was requested, such as content-creator:

Fallback rule

If the registry page does not expose enough detail to resolve the target skill cleanly:

Wrapper skill to generate

Create a local SKILL.md with frontmatter and instructions that load the exact Notion page.

The generated wrapper should follow this structure

---
name: content-creator
version: v2
description: |
  Wrapper for the remote Notion-hosted `content-creator` skill.
metadata:
  author: niko
  installed_from: notion
  installed_version: "v2"
  tracking: "latest-approved"
  source_page_id: "31f186f0c3d98061bd19d38cba879b4b"
allowed-tools:
  - Read
  - Write
  - Edit
  - Bash
  - Grep
  - Glob
  - AskUserQuestion
---

# Content Creator

Load and apply this exact remote skill from Notion MCP:

- Page id: `31f186f0c3d98061bd19d38cba879b4b`

## Steps

1. Retrieve the exact Notion page.
2. Retrieve page/block children recursively until the whole page is loaded.
3. Use that page content as the active skill instructions for this session.
4. Do not search unrelated Notion pages.
5. Immediately follow the remote skill instructions.

Tracking mode

When installing, record one of these tracking modes in the manifest:

Manifest update rules

After generating the wrapper, update the local manifest under skills[slug].

Store at least:

{
  "slug": "security-baseline",
  "installedVersion": "v2",
  "tracking": "latest-approved",
  "pageId": "31f186f0c3d98061bd19d38cba879b4b",
  "localSkillPath": ".opencode/skills/security-baseline/SKILL.md",
  "updatedAt": "ISO_TIMESTAMP"
}

Safety rules

Do not do these things

Implementation steps

  1. Detect local manifest.
  2. Resolve target root.
  3. Determine slug and optional version.
  4. Fetch the configured registry page.
  5. Resolve the target version page from the linked entries on that page.
  6. Generate the local wrapper skill.
  7. Update the manifest.
  8. Report what was installed.

Success output

At the end, report:


name: notion-check-updates description: | Checks whether project-local Notion-backed wrapper skills are outdated without modifying any files. Use when you want to compare installed versions against the Notion registry page. version: 1.0.0 user-invocable: true allowed-tools:


Notion Check Updates

Check for newer versions of installed Notion-backed skills without changing local files.

Goal

Inspect the local manifest and report whether each tracked skill is:

Scope rules

Detection rules

  1. Detect .opencode/notion-skills.json and .claude/notion-skills.json.
  2. Use the manifest that exists.
  3. If neither exists, stop and tell the user to run notion-init first.

Target selection

This command can run with or without a skill name.

If a skill name is provided

If no skill name is provided

Check logic

For each selected skill:

  1. Read the manifest entry.
  2. Fetch the Notion registry page using the configured skillRegistryPageId.
  3. Find the linked version entries for that slug.
  4. Determine the latest approved version from the registry page.
  5. Compare it against installedVersion.

Resolution rules

Report rules

Do not do these things

Implementation steps

  1. Detect the local manifest.
  2. Select one skill or all skills.
  3. Fetch the configured registry page.
  4. Resolve latest approved versions for the selected skills.
  5. Compare with installed versions.
  6. Print a concise update report.

Output format

Group results under:

For each skill, include:


name: notion-update description: | Updates installed project-local Notion-backed wrapper skills by checking the configured registry page and refreshing local wrappers when needed. version: 1.0.0 user-invocable: true allowed-tools:


Notion Update

Update installed project-local Notion-backed wrapper skills.

Goal

Refresh generated wrapper skills under:

based on the local manifest.

Scope rules

Detection rules

  1. Detect .opencode/notion-skills.json and .claude/notion-skills.json.
  2. Use the manifest that exists.
  3. If neither exists, stop and tell the user to run notion-init first.

Target selection

This command can run with or without a skill name.

If a skill name is provided

If no skill name is provided

Update behavior

Read each manifest entry under skills.

Expected fields include:

If tracking = latest-approved

If tracking = pinned

Notion lookup

Use the Notion MCP server and registry page from the local manifest.

For each skill:

  1. Fetch the configured skillRegistryPageId
  2. Read the linked version entries for the matching slug
  3. Resolve the target version according to tracking mode
  4. Check if skill has any subpages/children and copy them over
  5. Read metadata needed to regenerate the wrapper

Resolution rules

Wrapper regeneration

Rebuild the local SKILL.md in the same style as notion-install.

Before overwriting an existing file:

Manifest updates

For each updated skill:

Do not do these things

Implementation steps

  1. Detect manifest.
  2. Determine whether to update one skill or all.
  3. Fetch the configured registry page once.
  4. For each selected skill, inspect tracking mode.
  5. Resolve the target version from the registry page.
  6. Decide whether an update is needed.
  7. Regenerate wrapper skill files where needed.
  8. Update manifest entries.
  9. Report updated, unchanged, and skipped skills.

Success output

At the end, report three groups:

For each updated skill, include old version and new version.


Register these skills, so I can use them globally. You don't need Skill Registry Page ID for this. Register them as per normal workflow you already know.