Agent skill

Canvas Setup

by X-isdoingreat in X-isdoingreat/canvas-pilot

Use this skill on a fresh Canvas Pilot install when the student has never configured the project before.

AGPL-3.0Auto-check: notesAgent Workflows

Install Canvas Setup

skills CLI
$ npx skills add X-isdoingreat/canvas-pilot --skill canvas-setup -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install X-isdoingreat/canvas-pilot canvas-setup --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/X-isdoingreat/canvas-pilot.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/canvas-setup .claude/skills/canvas-setup && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
canvas-setup
GitHub stars
125
Token cost
~4.5k tokens
SKILL.md length
2,274 words
Files
1
Skills in repo
32
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Use this skill on a fresh Canvas Pilot install when the student has never configured the project before.

  • Works in 9 steps: Open with value, ask consent → Get the Canvas URL → Tell the student a browser will pop up → …
  • Phrases include set me up
  • SKILL.md covers Why this skill exists (read…, Hard rules CC follows the…, What you do and Error / interruption recovery, plus 1 more section
  • Calls python, pip and playwright; needs CANVAS_TOKEN

What it does

Canvas Setup is an agent skill from X-isdoingreat/canvas-pilot. Use this skill on a fresh Canvas Pilot install when the student has never configured the project before. Trigger phrases include "set me up", "set up canvas pilot", "install canvas pilot", "/canvas-setup", "first time", "i'm new". Also auto-invoked by canvas-scan §0 when .env is missing or CANVASBASE is empty, and by the SessionStart hook when it detects an unconfigured repo. Walks the student through a deterministic N-step first-run flow — Canvas URL → silent install → silent config → browser login → course…

Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Agent Workflows. The repository describes itself as: Local-first Canvas LMS AI agent that learns each course's recurring assignment workflow and reuses it through scan - approval - execute with student review. The licence is AGPL-3.0.

When your agent uses it

  • Phrases include set me up
  • Set up canvas pilot
  • Install canvas pilot

Example prompts

  • “set me up”
  • “set up canvas pilot”
  • “install canvas pilot”
  • “/canvas-setup”

Requirements

  • Python 3
  • A credential in CANVAS_TOKEN
  • Pre-approved tools (allowed-tools): Bash, Read, Write, Edit, Glob, Skill, WebSearch, WebFetch

Workflow steps

9 steps, taken from the step headings in SKILL.md.

  1. Open with value, ask consent
  2. Get the Canvas URL
  3. Tell the student a browser will pop up
  4. Install browser components
  5. Write .env silently
  6. Trigger login
  7. Write empty courses.yaml silently
  8. Hand off to canvas-bootstrap
  9. End condition

What it can do on your machine

Read from SKILL.md and the folder at commit 6b79d5b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • Read
    • Write
    • Edit
    • Glob
    • Skill
    • WebSearch
    • WebFetch

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python
    • pip
    • playwright

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • CANVAS_TOKEN

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Canvas Setup loads about 4.5k tokens when it runs. Until then it costs about 178 tokens; SKILL.md has 2,274 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~178
When it runs · the whole SKILL.md, loaded when a task matches
~4.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:3
    o auto-invoked by `canvas-scan` §0 when `.env` is missing or `CANVAS_BASE` is empty, and by the SessionStart hook when i
  • NoteMentions a .env fileSKILL.md:21
    was told to `pip install` herself, edit `.env` herself, navigate Canvas back-office herself — even though CC has Bash/Ed
  • NoteMentions a .env fileSKILL.md:23
    riend ever did manually (cp .env.example .env, pip install, edit env vars, run setup.py) is now CC's silent work.
  • NoteMentions a .env fileSKILL.md:31
    a sentence telling the student to "open .env", "run pip install", "go to Canvas → Account → Settings → Approved Integra
  • NoteMentions a .env fileSKILL.md:33
    ookie`, `token`, `probe`, `SSO`, `Duo`, `.env`, `courses.yaml`, `SECRETS.md`, `__PROJECT_ROOT__`, `${CLAUDE_PROJECT_DIR}
  • NoteMentions a .env fileSKILL.md:173
    ### Step 5 — Write `.env` silently
  • NoteMentions a .env fileSKILL.md:175
    CC's silent action: write `.env` file. **Never** ask the student to do this.
  • NoteMentions a .env fileSKILL.md:185
    Use `Write` tool. Do not announce ".env written" or any filename to the student.
  • NoteMentions a .env fileSKILL.md:187
    If a `.env` already exists (e.g. student is re-running setup): read it first; **preserve** any non-Canvas keys the stude
  • NoteMentions a .env fileSKILL.md:189
    e hatch preservation**: if the existing `.env` has `CANVAS_AUTH=token` (the student manually configured the undocumented

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from X-isdoingreat/canvas-pilot at commit 6b79d5b, republished under its AGPL-3.0 licence (© X-isdoingreat). 2,274 words, ~4,457 tokens.

Download SKILL.mdSave it as .claude/skills/canvas-setup/SKILL.md (or your agent's skills folder).
name
canvas-setup
description
Use this skill on a fresh Canvas Pilot install when the student has never configured the project before. Trigger phrases include "set me up", "set up canvas pilot", "install canvas pilot", "/canvas-setup", "first time", "i'm new". Also auto-invoked by `canvas-scan` §0 when `.env` is missing or `CANVAS_BASE` is empty, and by the SessionStart hook when it detects an unconfigured repo. Walks the student through a deterministic N-step first-run flow — Canvas URL → silent install → silent config → browser login → course selection — then dispatches `canvas-bootstrap` to design per-course skills. The student answers ~2 domain questions and logs into Canvas once; everything else is silent CC action.
allowed-tools
Bash, Read, Write, Edit, Glob, Skill, WebSearch, WebFetch

canvas-setup (first-run configurator)

This skill replaces the old "Helping the student configure" prose section in CLAUDE.md. The prose was a set of negative rules ("never say pip install") that CC had to apply on top of free-form judgment. This skill is the positive version: a fixed N-step script. Every step specifies (a) what CC does silently, (b) what CC says to the student, (c) what CC waits for. CC walks the script; CC does not improvise.

Why this skill exists (read this before editing)

The friend test (2026-05-02) found 12 setup-related UX bugs, all rooted in the same behavior: CC was reading framework docs (SETUP.md, .env.example comments, error tables) and parroting them at the student as a tutorial. Friend was told to pip install herself, edit .env herself, navigate Canvas back-office herself — even though CC has Bash/Edit/Write tools to do all of it. See .claude/plans/public-setup-ux-bugs.md for the full incident list.

The fix is not more prose rules in CLAUDE.md. The fix is making first-run a fixed sequence the SKILL.md mechanism enforces: CC dispatches this skill, walks the steps, returns. The student's only legitimate actions are answering domain questions (Canvas URL, which courses) and logging into Canvas once in a popup browser. Every other "step" the friend ever did manually (cp .env.example .env, pip install, edit env vars, run setup.py) is now CC's silent work.

Hard rules CC follows the entire way through this skill

The student's only legitimate actions during this skill:

  1. Answering questions CC asks about their own situation (Canvas URL, which courses).
  2. Logging into Canvas once in a browser window CC pops up.

Anything else is CC's job. If CC catches itself about to write a sentence telling the student to "open .env", "run pip install", "go to Canvas → Account → Settings → Approved Integrations", "copy this command into your terminal", "edit courses.yaml" — that is the bug this skill exists to prevent. Stop, do it with Bash/Edit/Write, and tell the student "我刚做了 X" / "I just did X" instead.

Internal vocabulary the student never sees: pip, playwright, chromium, cookie, token, probe, SSO, Duo, .env, courses.yaml, SECRETS.md, __PROJECT_ROOT__, ${CLAUDE_PROJECT_DIR}, runs/..., .cookies/..., any Canvas API field name, any course/user/file _id. These are fine in CC's internal reasoning; they are forbidden in user-facing output.

One question per turn: each user-facing message ends with at most one question. Multi-question turns are a bug.

Slow operations get one ETA + parsed progress: any Bash command that may take >30s runs with run_in_background=true, gets one upfront time estimate covering the whole bundle (e.g. "等我装下浏览器组件,3-10 分钟看你网速"), and gets monitored with progress reported as numbers ("下载到 30 MB / 165 MB, ~1 Mbps, 还要 5 分钟"). Never repeat-emit "继续等" with no new information.

Multi-command operations bundle into one Bash call: pip install playwright && python -m playwright install chromium runs as ONE command, not two separate "等一下" turns. Use && so failures stop the chain.


What you do

CC's silent action: none yet.

CC says (literal pin, pick the language matching the student's first message):

这是 Canvas 作业自动化工具。我会扫你这学期的 Canvas,列出待交作业,每周帮你处理重复性的(阅读注释、刷题、quiz 之类),交付前给你审批。要开始吗?

This is Canvas Pilot. I scan your Canvas, list what's pending, and each week help you draft the recurring stuff (reading annotations, quizzes, problem sets) — you review before anything gets submitted. Want to start?

CC waits for: any affirmative (yes/好/行/ok/嗯/start/开始). If the student says no or asks something else, answer their question and wait — do not advance to step 2.

Step 2 — Get the Canvas URL

CC asks for the school, not the URL — CC will find the URL itself.

CC says:

你哪个学校?学校名或域名都行(比如学校的简称或 <your-school>.edu)。

Which school do you go to? Name or domain works (e.g. your school's short name or <your-school>.edu).

CC waits for: a school identifier (name / domain / anything searchable). If the student volunteered school context in an earlier message (email domain like name@<school>.edu, or SSO URL like shib.service.<school>.edu/idp/...), CC may skip the question — extract the school silently from the prior message (base domain <school>.edu from email or SSO host).

CC's silent action: discover + verify the Canvas URL.

  1. WebSearch <school> canvas login. From the result list, pick the first URL whose host matches Canvas-shaped patterns:

    • canvas.<anything>.edu
    • <anything>.instructure.com
    • gocanvas.<anything> (Stanford-style)
    • <anything>.canvas.<anything>

    If none of the WebSearch results match these patterns → skip to step 4 (fallback).

  2. WebFetch <candidate> (the host root — Canvas root returns the login page or a /login redirect for unauthenticated users, and either way emits Canvas signature strings). The Canvas signature is any of:

    • HTML contains Canvas by Instructure
    • HTML contains canvas-login or /login/canvas form action
    • HTML contains instructure (case-insensitive)
  3. If WebFetch succeeded AND signature matched → silently normalize and use:

    python
    import re
    host_only = re.match(r"(https?://[^/]+)", candidate).group(1).rstrip("/")
    CANVAS_WEB_BASE = host_only
    CANVAS_BASE = host_only + "/api/v1"

    Advance to Step 3. Do NOT confirm with the student — they'll see the domain in Step 6 when the browser pops up.

  4. Fallback — triggered when WebSearch returned no Canvas-shaped candidate, OR WebFetch failed (timeout / non-200 / permission deny), OR signature didn't match.

    CC says:

    查不到你们学校的 Canvas 地址 — 直接给我 Canvas 登录页的网址就行(比如 canvas.<your-school>.edu)。

    Couldn't find your school's Canvas — give me the Canvas login page URL directly (e.g. canvas.<your-school>.edu).

    When the student replies:

    4a. If the manual input looks like an SSO URL (host starts with shib. / idp. / sso. / login. subdomain prefix): extract the base domain (e.g. shib.service.<school>.edu → <school>.edu), re-run step 1 + step 2 once with the extracted school. If that round succeeds, use it silently and advance to Step 3. If it still fails, fall through to step 4b.

    4b. Otherwise normalize the manual URL as before:

    python
    raw = student_input.strip()
    if not raw.startswith("http"):
        raw = "https://" + raw
    host_only = re.match(r"(https?://[^/]+)", raw).group(1).rstrip("/")
    CANVAS_WEB_BASE = host_only
    CANVAS_BASE = host_only + "/api/v1"

    If the manual input doesn't match https?://[a-z0-9.-]+ after normalization, ask once more without explaining regex: "我没认出来这是个 Canvas 网址 — 直接给我学校 Canvas 登录页那个地址就行。"

Step 3 — Tell the student a browser will pop up

CC's silent action: none yet.

CC says (literal pin):

配 Canvas 连接需要一次浏览器登录——我等会儿弹一个浏览器,你像平时一样登 Canvas 就行。session 偶尔过期了浏览器会再弹一下让你重登几秒,你不需要手动找或粘任何东西。

Setting up the Canvas connection needs a one-time browser login — I'll pop a browser, you log in like normal. If the session ever expires the browser pops up again for ~10 seconds. You don't need to find or copy anything manually.

CC waits for: any affirmative or silence (default: continue). If the student asks why / wants alternatives / is worried, answer their question briefly and continue once they're ready. Do not surface alternative auth paths — there is only one supported path.

Step 4 — Install browser components

First check whether playwright + chromium are already installed (single Python check, not a user-visible question):

python
import subprocess, sys
result = subprocess.run(
    [sys.executable, "-c", "import playwright; from playwright.sync_api import sync_playwright; p=sync_playwright().start(); p.chromium.launch(headless=True).close(); p.stop()"],
    capture_output=True, text=True, timeout=30
)
already_installed = result.returncode == 0

If already_installed → skip to Step 5 silently, say nothing.

If not installed → CC says (literal pin):

等我装下浏览器组件——3-10 分钟看你网速,第一次比较慢。我会同步进度。

Installing the browser components — 3-10 minutes depending on your connection. I'll keep you posted.

CC then runs ONE bundled Bash command in background:

bash
pip install playwright && python -m playwright install chromium 2>&1 | tee /tmp/canvas_setup_install.log

(Use run_in_background=true. On Windows replace /tmp with a project-relative tmp dir.)

CC monitors the log file every 30-60 seconds. Each time CC reports, it must extract numbers from the log:

  • playwright install chromium prints Downloading Chrome ... [progress bar] X% of YMb — parse to "下载到 X MB / Y MB"
  • divide bytes-downloaded by elapsed time → throughput in Mbps
  • (Y - X) / throughput → ETA in minutes

CC says (literal pin format):

下载到 30 MB / 165 MB,~1 Mbps,还要 5 分钟。网慢的话再等等就行。

30 MB / 165 MB downloaded, ~1 Mbps, ~5 min left. Hang tight if your connection is slow.

Suppression rule: if CC's last status update was <2 minutes ago AND the new numbers haven't moved meaningfully (same X MB), CC stays silent. Repeat-emitting "继续等" / "still downloading" with no new info is a bug.

If install fails (non-zero exit, network error, disk full): CC reads the tail of the log, surfaces the actual error in plain language ("下载断了,看起来是网络问题——要不要再试一次?"), and waits for the student's call.

Step 5 — Write .env silently

CC's silent action: write .env file. Never ask the student to do this.

python
env_content = (
    "CANVAS_AUTH=cookie\n"
    f"CANVAS_BASE={CANVAS_BASE}\n"
    f"CANVAS_WEB_BASE={CANVAS_WEB_BASE}\n"
)

Use Write tool. Do not announce ".env written" or any filename to the student.

If a .env already exists (e.g. student is re-running setup): read it first; preserve any non-Canvas keys the student may have added; only overwrite CANVAS_AUTH=cookie + CANVAS_BASE + CANVAS_WEB_BASE.

Escape hatch preservation: if the existing .env has CANVAS_AUTH=token (the student manually configured the undocumented token escape hatch — knows what they're doing), preserve it as-is. Do not change CANVAS_AUTH, do not touch CANVAS_TOKEN, do not ask the student about it, do not surface that token mode exists. Only update CANVAS_BASE / CANVAS_WEB_BASE if they're missing or empty. This is intentional: the escape hatch is for users who already configured it deliberately; canvas-setup's job is to configure cookie mode without disturbing existing manual config.

Show full SKILL.md (893 more words)Show less
Step 6 — Trigger login

CC silently runs a probe that triggers the headed browser:

bash
python -m src.canvas_client --probe

The probe will pop a Chromium login window (handled inside canvas_client.py:_login_interactive).

CC says (literal pin, immediately before running the probe so the student knows what's about to happen):

浏览器要弹出来。你照常登 Canvas,登完它自己关。

Browser is about to pop up. Log in to Canvas like normal, it'll close itself when it's done.

CC waits for: probe to return successfully (Canvas accepted the session, cookies persisted to .cookies/session.json).

If probe fails because the student didn't complete login within 5 minutes: CC says "我没看到你登好——是浏览器没起来,还是中间卡住了?" and waits.

If probe fails because playwright import broke (rare; install was supposed to handle this): CC silently reruns the install bundle once more, then retries the probe. Don't surface the install failure to the student unless it fails twice.

Step 7 — Write empty courses.yaml silently

Note: setup deliberately does NOT list courses or ask the student "which courses?" — that work belongs to canvas-bootstrap, which has a more thorough 4-layer noise filter (Layer 1 active + Layer 2 nonempty + Layer 3 recurring-pattern fold + Layer 4 looks-like-real-course rescue) plus the fingerprint table that shows assignment-pattern signals per course. Setup's job ends at "Canvas authentication works"; selection + design is bootstrap's job.

CC's silent action: use Write to create courses.yaml:

yaml
# Generated by canvas-setup. canvas-bootstrap (next) will fill routes.
pending_window_days: 7
routes: {}

routes: {} is an empty mapping — bootstrap §1 explicitly handles this (line 38: "or every active course Canvas returns when routes is empty") by listing all active courses with the full filter pipeline.

If courses.yaml already exists with non-empty routes (re-running setup on a partially-configured project), preserve existing entries and skip this write.

If SECRETS.md exists, CC updates the "Active courses" table inside it (read first, replace just that section). If SECRETS.md doesn't exist, CC creates it from SECRETS.example.md (if that template exists; otherwise creates minimal).

CC says nothing about writing these files.

Step 8 — Hand off to canvas-bootstrap

CC says (literal pin):

配好了 Canvas 连接。下面看你这学期有哪几门课,给每门课设计 skill——决定怎么自动化。从最简单的开始。

Canvas connection is set up. Now let's look at your courses this term and design a skill for each — how each course should be automated. Starting with the simplest one.

CC then invokes canvas-bootstrap via the Skill tool, passing this context:

"canvas-setup just finished — Canvas auth works, courses.yaml has empty routes ({}). This is first-run mode: list all active courses with the 3-section fingerprint render (main / likely-real / noise), let the student pick which to track AND name skills in one combined picker, write SKILL.md skeletons + populate routes."

canvas-bootstrap takes over from here. canvas-setup exits.

Step 9 — End condition

When canvas-bootstrap returns, CC says (literal pin, three affordances):

配好了。

  • 想看这周要交什么 → "scan canvas"
  • 还想加更多课 / 改某门课的设计 → "设计 skill"
  • 你刚设计的 skill 在 .claude/skills/ 下面(每门课一个文件夹),里面就是你给自己写的执行步骤,以后想改直接编辑

All set.

  • Want to see what's due this week → "scan canvas"
  • Want to add more courses / redesign a skill later → "design a skill"
  • The skills you just designed are under .claude/skills/ (one folder per course) — those are the playbooks you wrote for yourself; edit anytime

The three affordances cover three real first-run needs:

  • (a) Get immediate value (scan now)
  • (b) Half-finished bootstrap or new courses later — explicit re-entry trigger
  • (c) Knowledge that SKILL.md files are the student's own product, editable

Note: this is the one place where .claude/skills/ is named to the student. After bootstrap completes, those files are the student's playbook artifacts (not framework internal config), so the path is meaningful and editable, not jargon. This intentional break of the "internal vocabulary the student never sees" rule is per plan 2026-05-03 design.

This skill exits.


Error / interruption recovery

Student ctrl+C mid-setup, comes back later: CC detects partial state on next session entry:

  • .env doesn't exist → started with fresh first-run, restart at Step 1
  • .env exists but CANVAS_BASE empty → restart at Step 2
  • .env complete but no .cookies/session.json and CANVAS_AUTH=cookie → restart at Step 6 (re-trigger login)
  • .env has CANVAS_AUTH=token (escape hatch — student configured manually): treat as fully authenticated; verify with a silent python -m src.canvas_client --probe and proceed to Step 7
  • .env complete + auth works but courses.yaml missing or has routes: {} → restart at Step 7 (write empty routes if needed) → continue Step 8 (re-dispatch bootstrap)

CC does not ask the student "where did we leave off". CC reads the filesystem state and resumes silently from the right step.

Student wants to redo setup from scratch: explicit trigger phrases like "redo setup" / "重新配", or /canvas-setup invoked manually. CC says "你想全部重来还是只改某一步(学校换了 / 课程列表)?" and routes accordingly. Never silently overwrite working config.

Student wants to uninstall: out of scope for v1. If asked, CC explains what files are involved (.env, .cookies/, the playwright binaries) and lets the student decide what to delete.


What this skill MUST NOT do

  • Tell the student to run any shell command. CC has Bash; CC runs it.
  • Tell the student to edit any file. CC has Edit/Write; CC writes it.
  • Show the student a file path, command, environment variable name, or API field name.
  • Surface alternative auth modes to the student. Cookie auth is the only supported path; the token escape hatch in canvas_client.py is undocumented and must not be advertised.
  • Ask the student a question whose answer CC could discover by running a check.
  • Pre-announce a multi-step workflow ("first I'll do X, then Y, then Z..."). Steps happen silently when their time comes.
  • Mix two questions into one turn. Single domain question per message.
  • Repeat status messages with no new content.
  • Skip the value-statement opening (Step 1) and jump to "what's your Canvas URL". The opening is mandatory.

© X-isdoingreat, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/canvas-setup of X-isdoingreat/canvas-pilot.

Open the folder on GitHubat commit 6b79d5b

Compare with similar skills

Canvas Setup next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Canvas Setup compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Canvas Setup this skillX-isdoingreat/canvas-pilot125—~4.5kAutomated safety check: NotesAGPL-3.0
Idea WizardDavidWells/markdown-magic871—~1.1kAutomated safety check: PassNone
Build A Personal Skill From HistoryTHU-MAIC/OpenMAIC40k—~678Automated safety check: PassMIT
ArenaJakeschincariol/arena-skill379—~4.8kAutomated safety check: PassMIT
Abide Compilecoldteadotai/abide568—~3.3kAutomated safety check: PassMIT
Proposal AgentOpenRSI-Foundation/OpenRSI-Index204—~5.1kAutomated safety check: PassApache-2.0

Similar skills

  • Idea Wizard

    DavidWells/markdown-magic

    Generate and operationalize improvement ideas for projects. An agent skill from DavidWells/markdown-magic.

    871 GitHub stars~1.1k tokensUpdated 2 mo ago
    Agent WorkflowsAuto-check passed
  • Derives a reusable personal skill for course-making from a representative sample of the user's own past classrooms and chat history, confirmed with them before saving.

    40k GitHub stars~678 tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Arena

    Jakeschincariol/arena-skill

    Make 100 versions of Claude fight to the death over one task.

    379 GitHub stars~4.8k tokensUpdated 12 days ago
    Agent WorkflowsAuto-check passed
  • Abide Compile

    coldteadotai/abide

    Compile a repository's instruction files (AGENTS.md, CLAUDE.md and friends) into an Abide rubric, then validate and calibrate it.

    568 GitHub stars~3.3k tokensUpdated yesterday
    Agent WorkflowsAuto-check passed
  • Proposal Agent

    OpenRSI-Foundation/OpenRSI-Index

    A skill your agent uses when a contributor wants to create, repair, or complete an OpenRSI-Index AutoResearch task proposal grounded in a remote model-development repository, including…

    204 GitHub stars~5.1k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Memory Engine

    HelloRuru/claude-memory-engine

    Memory management system for Claude Code — Student Loop, Smart Context, Auto Learn, Session Handoff, Correction Cycle.

    134 GitHub stars~1.9k tokensUpdated 5 mo ago
    Agent WorkflowsAuto-check passed

More from X-isdoingreat/canvas-pilot

All 32 skills in this repo
  • Daily Work Tweet

    X-isdoingreat/canvas-pilot

    A skill your agent uses when verified work from today or another day should become an X/Twitter post, build-in-public update, ship log, or bilingual draft.

    125 GitHub stars~1.6k tokensUpdated 2 mo ago
    Auto-check passed
  • Canvas Awkward Syntax

    X-isdoingreat/canvas-pilot

    A skill your agent uses when a short local academic draft needs role-aware syntax diversification while preserving meaning, locks, source grounding, rubric-critical openings, and document structure.

    125 GitHub stars~2k tokensUpdated 2 mo ago
    Auto-check passed
  • Canvas Cron

    X-isdoingreat/canvas-pilot

    A skill your agent uses when managing Canvas Pilot schedules: install, inspect, pause, change, delete, or safely test scheduled scans and runs.

    125 GitHub stars~2.1k tokensUpdated 2 mo ago
    Auto-check: notes
  • Canvas Essay

    X-isdoingreat/canvas-pilot

    A skill your agent uses for an approved long academic-writing assignment routed by canvas-execute after the deterministic writing router selects essay.

    125 GitHub stars~2.2k tokensUpdated 2 mo ago
    Auto-check passed
  • Canvas Generic

    X-isdoingreat/canvas-pilot

    A skill your agent uses for an approved Canvas assignment that no specialized course skill can handle.

    125 GitHub stars~2.4k tokensUpdated 2 mo ago
    Auto-check passed
  • Canvas Humanizer

    X-isdoingreat/canvas-pilot

    A skill your agent uses when a local academic draft needs a meaning-preserving humanizing pass with less uniform syntax while retaining rubric, source, lock, voice, and length constraints.

    125 GitHub stars~1.8k tokensUpdated 2 mo ago
    Auto-check passed

Categories

Questions about Canvas Setup

What does Canvas Setup do?

Use this skill on a fresh Canvas Pilot install when the student has never configured the project before. Canvas Setup is an agent skill from X-isdoingreat/canvas-pilot. Use this skill on a fresh Canvas Pilot install when the student has never configured the project before.

When should I use Canvas Setup?

Canvas Setup fits situations like: phrases include set me up; set up canvas pilot; install canvas pilot.

How do I install Canvas Setup in Claude Code?

Run `npx skills add X-isdoingreat/canvas-pilot --skill canvas-setup -a claude-code`. Or copy the skill folder (.claude/skills/canvas-setup in X-isdoingreat/canvas-pilot) into .claude/skills/canvas-setup in your project. Claude Code loads it when a task matches its description.

How do I install Canvas Setup in Codex?

Run `npx skills add X-isdoingreat/canvas-pilot --skill canvas-setup -a codex`. Or copy the skill folder (.claude/skills/canvas-setup in X-isdoingreat/canvas-pilot) into .agents/skills/canvas-setup in your project. Codex loads it when a task matches its description.

Can I use Canvas Setup in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add X-isdoingreat/canvas-pilot --skill canvas-setup -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/canvas-setup, .gemini/skills/canvas-setup, .github/skills/canvas-setup and .opencode/skills/canvas-setup in your project.

What does Canvas Setup need to run?

Going by SKILL.md and its folder, Canvas Setup needs the command-line tools its instructions call (python, pip and playwright) and credentials named CANVAS_TOKEN. Our summary lists: Python 3; A credential in CANVAS_TOKEN. Its frontmatter pre-approves these tools: Bash, Read, Write, Edit, Glob, Skill, WebSearch, WebFetch.

Does Canvas Setup access the network?

SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Canvas Setup safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Canvas Setup use?

Canvas Setup is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Canvas Setup use?

About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Canvas Setup?

Skills that share tags, products or a category with Canvas Setup: Idea Wizard (DavidWells/markdown-magic, 871 stars), Build A Personal Skill From History (THU-MAIC/OpenMAIC, 40k stars), Arena (Jakeschincariol/arena-skill, 379 stars) and Abide Compile (coldteadotai/abide, 568 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Canvas Setup?

X-isdoingreat (a GitHub user) maintains it in X-isdoingreat/canvas-pilot, which has 125 GitHub stars. The repository holds 32 skills in this directory. The repository was last updated on July 31, 2026.

Source: X-isdoingreat/canvas-pilot on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.