Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

[Task] Publish the learner skills and the Course companion as a learner-only Claude Code plugin

Closed
#196 0 comments 0 reactions 0 assignees View on GitHub

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

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

dashboard enhancement infra tutor
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.json at 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, progress and review skills;
    • the Course companion mod (today .claude/skills/course-companion/: hooks, types, tests);
    • the lessonfolk MCP server declaration, so installing the plugin also connects the server.
  • 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 "lessonfolk in .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.tsx reads <cwd>/.mcp.json to 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_progress and list_courses calls 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 version follows 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 validate on the marketplace and the plugin, and the mod's tests
    (claude plugin test), which are not part of npm test today.
  • Docs (short): docs/using-lessonfolk.md gets 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 in docs/development.md,
    docs/testing.md and AGENTS.md.
  • Dashboard Connect page (dashboard/src/components/connect/clients.ts and 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 or mcp-remote bridge).
    • 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.ts for both cases.
Out of scope
  • Everything for course building and contributing: create-course, edit-course,
    review-course, the course-builder mod and the contributing procedures of AGENTS.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/lessonfolk then
    /plugin install lessonfolk@lessonfolk succeed.
  • After signing in to the server, /learn, /progress and /review work 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-course and the course-builder pane work as before.
  • claude plugin validate and the mod's tests pass in CI; npm test passes.
  • 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.md gives 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 in docs/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 lessonfolk server 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/lessonfolk without access rights needs the repository to be public.
  • Confirm against the current Claude Code plugin docs that a mod (a hooks/hooks.json with
    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

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from CGSeb/lessonfolk

All issues in CGSeb/lessonfolk

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.