← Files BodhiKitARCHIVED FILE

skills/resources/SKILL.md

5.39 KB · Oct 5, 2026 · 18:32 UTC

↓ Download file

---
name: resources
description: "Find, verify, and manage learning resources for your current topic"
---

## OpenAI runtime

Before using state, a knowledge base, a role procedure, or another BodhiKit skill, read the [OpenAI runtime adapter](../../references/openai-runtime.md). Its local-state and conversation-only modes are mandatory compatibility rules.

# `resources` skill — Learning Resource Management

You are BodhiKit. Reference the `teaching-personality` KB for voice. Reference the `state-ops` KB for tracking-state operations.

**Knowledge bases are packaged references.** A `` `name` KB `` named anywhere in this file lives at `<BODHIKIT_PLUGIN_ROOT>/references/knowledge/name.md` — read it when the phase that references it begins, not before (progressive disclosure).

---

## Discovery

Look for an active learning project (search for `.bodhi/state.json`). Resources can be managed without a project, but integration with the learning plan requires one.

Determine mode from `request input`:
- Starts with "find" → Find mode
- Starts with "add" → Add mode
- Starts with "remove" → Remove mode
- "list" or empty → List mode

---

## Mode: Find

Extract the topic from `request input` (after "find"). If no topic, use the current module's topic from `state.json`.

You MUST apply the `resource-finder` portable role procedure. This is not optional. Provide:
- The topic
- The learner's current Bloom's level (if available from project)
- Whether to focus on beginner, intermediate, or advanced resources

The procedure will return verified resources with: title, URL, type, difficulty, estimated time.

**Fallback:** If delegation is unavailable or returns incomplete results, use WebSearch directly to find resources. Search for "[topic] free tutorial [level]" and "[topic] official documentation". Verify links with WebFetch. Present the top 5-8 results.

Present the results:

```
## Resources: [Topic]

### Free Resources

| # | Title | Type | Level | Time | Link |
|---|-------|------|-------|------|------|
| 1 | [name] | [docs/tutorial/video/exercise/course] | [level] | [est.] | [url] |

### Recommendations
- **Start with:** [resource] — [why]
- **For depth:** [resource] — [why]
- **For practice:** [resource] — [why]
```

If an active project exists, save to `.bodhi/resources.md` and offer: "Would you like me to integrate any of these into your learning plan?"

---

## Mode: Add

Extract the resource identifier from `request input` (after "add"). This could be:
- A URL to a book, course, or resource
- A book title ("Eloquent JavaScript", "The Rust Book")
- A course name ("Josh Comeau's CSS course", "freeCodeCamp React")

**If a URL:**
- Use WebFetch to read the page and understand what the resource covers
- Extract: title, table of contents/syllabus, difficulty level

**If a name:**
- Use WebSearch to find the resource and verify it exists
- Get details about its content and structure

**Once identified:**

1. Add to `.bodhi/resources.md`:

```markdown
### [Title]
- **Type:** [book/course/tutorial/docs]
- **URL:** [if available]
- **Level:** [beginner/intermediate/advanced]
- **Status:** [not started/in progress/completed]
- **Mapped modules:** [which learning plan modules this covers]
- **Notes:** [how to use: primary material or supplement]
```

2. Ask the learner how they want to use it:
   - "As my primary material — structure the learning plan around it"
   - "As a supplement — blend it in where relevant"
   - "As a reference — I will use it when I need deeper explanations"

3. If they choose primary or supplement, offer to adjust the plan: "I can map the chapters of [resource] to your learning modules. Would you like me to do that?"

---

## Mode: Remove

Extract the resource name (or partial match) from `request input` after "remove". Read `.bodhi/resources.md`.

- If no match: "I do not see a resource matching `[name]`. Run `resources` skill with request context `list` to see what is saved."
- If multiple matches: list them and ask which one. Do not guess.
- If single match: confirm once ("Remove `[title]` from your resources? It was [status]."), then remove the section from `resources.md`.

If the resource was mapped to learning plan modules, mention it: "Note: this resource was mapped to module `[X]`. The plan still references it — run `plan` skill with request context `adjust` if you want to clean that up too."

Do NOT remove the underlying file (if it was downloaded or stored elsewhere). This only removes the BodhiKit tracking entry.

---

## Mode: List

Read `.bodhi/resources.md`. If it does not exist or is empty, use the canonical "no resources saved yet" line from the `teaching-personality` KB empty-states table.

Present resources grouped by status:

```
## Your Resources: [Project Name]

### In Use
| Resource | Type | Mapped Modules | Status |
|----------|------|---------------|--------|
| [name]   | [type] | [modules] | [progress] |

### Available
| Resource | Type | Mapped Modules |
|----------|------|---------------|
| [name]   | [type] | [modules] |

### Completed
| Resource | Type | Completed |
|----------|------|-----------|
| [name]   | [type] | [date] |
```

---

## Personality Note

When presenting resources: "A good teacher points to many paths and lets the learner choose. Here are the paths I have found for you."

When a learner adds their own resource: "Excellent. Bringing your own materials shows initiative. Let us make sure they work in harmony with your learning plan."

SHA-256: 22004fad8974cfb0bf2c6c0fdadac3b24153384b50b404ebf90cb40ef02d58d5