---
name: forgetful-procedures
description: >-
  Store and find procedural knowledge — reusable step-by-step how-tos — in Forgetful's skill
  store. Use when a workflow worth repeating gets worked out, when the user asks how
  something is done here, or when importing or exporting SKILL.md files. Litmus: a procedure
  someone follows is a skill; a fact someone recalls is a memory.
license: MIT
tags: [skills, procedures, how-to, skill-store]
allowed-tools:
  - mcp__forgetful__discover_forgetful_tools
  - mcp__forgetful__how_to_use_forgetful_tool
  - mcp__forgetful__execute_forgetful_tool
  - Bash(forgetful:*)
---

# Storing and finding procedures

Forgetful's skill store is procedural memory: how-tos that agents retrieve by capability
and follow. All skill operations run through the standard invocation surface below, the
same as every other domain.

## Invoking operations

Operations are named by registry name (`search_skills`, `create_skill`, ...). Invoke via
whichever surface this agent has:

- **MCP**: `execute_forgetful_tool(tool_name="search_skills", arguments={...})`
- **CLI**: `forgetful call search_skills --args '{"query": "..."}' --json`

Get any operation's schema at runtime: `how_to_use_forgetful_tool` (MCP) or
`forgetful tools info <operation>` (CLI) — schemas are deliberately not repeated here.

## Step 1 — Apply the litmus

"How to review pull requests in this project" is a skill; "we use conventional commits" is
a memory (`forgetful-remember`). A procedure has steps someone follows in order; a fact is
recalled and applied.

Done when: the content is confirmed procedural.

## Step 2 — Search before create

`search_skills` for the capability first — search is semantic over skill *descriptions*, so
query by what the procedure achieves ("deploy the API", "rotate credentials"), not its
exact name. An existing skill that covers it gets updated (`update_skill`) rather than
duplicated; names are unique.

Done when: create vs update is an informed decision.

## Step 3 — Create with the description carrying the weight

The description is the only embedded field — content (up to 100KB) is stored but never
searched semantically. Write the description as the retrieval surface: what the procedure
achieves, when to reach for it, capability keywords. Then `create_skill` with kebab-case
name, the full markdown procedure as content, tags, and importance.

Done when: the skill exists and a capability-phrased `search_skills` finds it.

## Step 4 — Import / export SKILL.md

`import_skill` ingests a SKILL.md string: YAML frontmatter needs `name` and `description`;
`license`, `compatibility`, `tags`, `metadata`, and `allowed-tools` (hyphenated on disk,
mapped to `allowed_tools` internally) are honoured. The body after the frontmatter becomes
the content. `export_skill` re-emits the SKILL.md, round-trip faithful — tags included.

Done when: imported skills search well (check the description survived intact) and exports
open cleanly in the target platform.

## Step 5 — Link the supporting material

Procedures rarely stand alone: `link_skill_to_memory` for the decisions behind the
procedure, `link_skill_to_document` for long-form background, `link_skill_to_code_artifact`
for the code it operates, `link_skill_to_file` for bundled assets. `get_skill_links` shows
everything attached — it is the reverse lookup, returning linked memory, file, code
artifact, and document IDs.

Done when: following the procedure never requires hunting for its supporting material.
