[Task] Publish the learner skills and the Course companion as a learner-only Claude Code plugin
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 22/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- github-actions, typescript
- Domain
- ci-cd, developer-experience, documentation, frontend
Research direction
Start with .claude/skills/course-companion/ and register.tsx, which reads <cwd>/.mcp.json for the Dashboard button, then .mcp.json and .claude/settings.json. The Connect page logic is in dashboard/src/components/connect/clients.ts, tested by dashboard/src/lib/connect.test.ts. Done means claude plugin validate passes in CI, a clone and an empty folder both load the skills and pane once, and the hosted Connect page recommends the plugin first. Several design choices are still open, so confirm them with the maintainer first.
Written by the indexing model from the issue text.
Description
Summary
Package the learner side of LessonFolk for Claude Code as an installable plugin: the learn,
progress and review skills, the Course companion mod and the lessonfolk MCP server
connection. Publish it from this repository as a plugin marketplace, so a learner installs it
with two commands instead of cloning the repo.
Why
Today the skills and the mod only load when Claude Code is opened in a clone of this repository
(.claude/skills/, .mcp.json, .claude/settings.json). A learner who uses a hosted LessonFolk
has no reason to clone anything, yet without the clone they lose /learn, /progress, /review
and the companion pane, and must add the MCP server by hand.
Area
tutor — AGENTS.md, skills, tutoring behaviour
Phase
Phase 2 — MCP server / use from anywhere
Scope
- Marketplace: add
.claude-plugin/marketplace.jsonat the repository root, listing one
plugin,lessonfolk, so that this works from any folder:/plugin marketplace add CGSeb/lessonfolk /plugin install lessonfolk@lessonfolk - Plugin contents (one plugin folder with its
.claude-plugin/plugin.json):- the
learn,progressandreviewskills; - the Course companion mod (today
.claude/skills/course-companion/: hooks, types, tests); - the
lessonfolkMCP server declaration, so installing the plugin also connects the server.
- the
- Make the skills self-contained. They currently point at repository files that an installed
plugin does not have:packages/mcp/prompts/<name>.md,AGENTS.md("When the user wants to
learn") and "lessonfolkin.mcp.json". Rewrite them to rely on the MCP server's own
instructions and prompts, and to carry the "tools are not available" fallback themselves
(how to connect or start LessonFolk), with no path into the repo. - Make the mod work outside the repo. Check and fix what assumes the project folder:
register.tsxreads<cwd>/.mcp.jsonto find the instance for the Dashboard button;
with the plugin there is no such file, so take the address from the plugin's own server
declaration (or the session's connection);- the server's tool names change when it comes from a plugin (no longer
mcp__lessonfolk__*):
TOOL_PREFIX/ the server-name detection, and the skills' mentions of
mcp__lessonfolk__*, must still match; - the pane's own
get_progressandlist_coursescalls are allowed today by the project's
.claude/settings.json; find how an installed plugin gets the same permission, or document
the one-time approval.
- One source of truth. The plugin folder is the only copy of these skills and of the mod;
the repository must not keep a second one under.claude/skills/. Opening Claude Code in a
clone must still give contributors the same skills and pane, once and not twice (for example
the project's settings enable the plugin from the local marketplace). - Version: the plugin's
versionfollows the LessonFolk release number, set by the release
workflow or checked in CI, so installed plugins see an update on each release. - CI: run
claude plugin validateon the marketplace and the plugin, and the mod's tests
(claude plugin test), which are not part ofnpm testtoday. - Docs (short):
docs/using-lessonfolk.mdgets the install commands as the first way to use
LessonFolk in Claude Code, and its "Course companion" section loses the "lives in
.claude/skills/course-companion/" wording; update the paths indocs/development.md,
docs/testing.mdandAGENTS.md. - Dashboard Connect page (
dashboard/src/components/connect/clients.tsand its
translations):- On the hosted instance (the one the plugin connects to,
https://lessonfolk.com): for
Claude Code and Claude Desktop, the plugin is the recommended way, shown first, with
the two install commands and one line on what it brings (the/learn,/progress,/review
commands and the companion pane). The manual setup stays below it as "or configure the server
by hand". - On a self-hosted or local instance: no plugin recommendation. The page shows the actual
manual MCP setup for that instance, as today (claude mcp add …with its address and token
header, the Desktop connector ormcp-remotebridge). - The page decides by comparing its own address with the plugin's server address, kept in one
place so the two cannot drift. - The other apps (Codex, Cursor, claude.ai, ChatGPT) do not change. Update
dashboard/src/lib/connect.test.tsfor both cases.
- On the hosted instance (the one the plugin connects to,
Out of scope
- Everything for course building and contributing:
create-course,edit-course,
review-course, thecourse-buildermod and the contributing procedures ofAGENTS.md. The
plugin is for learners only. These stay in the repository, under.claude/skills/, unchanged,
and are never added to the plugin or to the marketplace. - Submitting the plugin to another marketplace (Anthropic's or a community one).
- Other agents (Codex and the like): they keep using the MCP server and its prompts.
- Any change to the MCP server's tools or prompts.
Acceptance criteria
- In an empty folder, with no clone,
/plugin marketplace add CGSeb/lessonfolkthen
/plugin install lessonfolk@lessonfolksucceed. - After signing in to the server,
/learn,/progressand/reviewwork there and teach
through the LessonFolk tools; none of them tries to read a file of the repository. - The companion pane opens on its own when a lesson starts, shows the course, lessons and key
ideas, and its Dashboard button opens the right instance. - With the server not connected, the skills tell the learner how to connect it, without
teaching from memory. - In a clone of the repository, the skills and the pane still work and each appears once.
- The installed plugin contains no course-building or contributing skill or mod; in a clone,
create-course,edit-course,review-courseand thecourse-builderpane work as before. -
claude plugin validateand the mod's tests pass in CI;npm testpasses. - On the hosted instance, the dashboard's Connect page recommends the plugin first for
Claude Code and Claude Desktop and keeps the manual setup as the alternative. - On a self-hosted or local instance, the Connect page does not mention the plugin and shows
the manual MCP setup with that instance's address, as before. -
docs/using-lessonfolk.mdgives the install commands; no doc still points at
.claude/skills/course-companion/or the three moved skills.
Files / components affected
.claude-plugin/marketplace.json (new)
<plugin folder>/.claude-plugin/plugin.json (new; folder name to choose, e.g. plugins/lessonfolk/)
.claude/skills/learn|progress|review/ (moved into the plugin)
.claude/skills/course-companion/ (moved into the plugin)
.claude/settings.json, .mcp.json
.github/workflows/ (validate + mod tests, version on release)
docs/using-lessonfolk.md, docs/development.md, docs/testing.md, AGENTS.md
dashboard/src/components/connect/clients.ts, dashboard/src/lib/connect.test.ts, translations
Agent compatibility
- Test in Claude Code
- Test in Codex
Depends on
None.
Size
M — half a day to a day
Notes, references, open questions
- Decided: the plugin connects to the hosted instance,
https://lessonfolk.com/mcp.
Self-hosted and local instances keep the manual MCP setup shown on their own Connect page; the
plugin needs no setting to point elsewhere. Say so indocs/using-lessonfolk.md, including
that a self-hosting learner who wants the skills and the pane uses a clone, as today. - Claude Desktop: check where the plugin applies (the Code tab) and where the connector is still
needed (plain chat), and word the Connect page accordingly. - A learner who already added the
lessonfolkserver by hand (dashboard Connect page) would
have it twice after installing the plugin: say in the docs and on the Connect page which one
to keep. - Installing from
CGSeb/lessonfolkwithout access rights needs the repository to be public. - Confirm against the current Claude Code plugin docs that a mod (a
hooks/hooks.jsonwith
modules) loads from a marketplace-installed plugin the same way it does from
.claude/skills/; the two mods already carry a.claude-plugin/plugin.json. - Earlier work: #74 (the Course companion mod).
- Dominant language
- TypeScript
- Stars
- 1
- Forks
- 0
- Avg merge
- 1h 18m
- Merged PRs (30d)
- 149
Getting set up
- Ships a Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from CGSeb/lessonfolk
-
dashboard enhancement good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
CGSeb/lessonfolk#200 ·
Maintainers usually reply within 1 day
-
course help wanted
Difficulty 3/5 1-2 days Newbie friendliness 45/100
CGSeb/lessonfolk#199 ·
Maintainers usually reply within 1 day
-
infra security
Difficulty 4/5 3-5 days Newbie friendliness 32/100
CGSeb/lessonfolk#150 ·
Maintainers usually reply within 1 day
All issues in CGSeb/lessonfolk
Similar issues
-
[good first issue, hacktoberfest] 🏯 Hacktoberfest Task - Add new Japan Fact 898 (good-first-issue)Opencommunity first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficulty 1/5 Under an hour Newbie friendliness 86/100
lingdojo/kana-dojo#33145 · 1 comment · 5 reactions ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
code-yeongyu/senpi#4278 ·
Maintainers usually reply within 1 day
-
[Bug] Activity | The activity list ignores taskIds and returns the activities of every taskPossibly taken @NdekoCode claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
ever-co/ever-gauzy#11469 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
griffinwork40/agent-afk#4408 ·
Maintainers usually reply within 1 day