DeepTutor CLI
HKUDS/DeepTutor
Teaches the agent to set up and run DeepTutor from the command line: chat and capabilities, knowledge bases, partners, memory, sessions, notebooks and the server or Web app.
Use after canvas-scan wrote a current plan and the student selected items.
$ npx skills add X-isdoingreat/canvas-pilot --skill canvas-execute -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install X-isdoingreat/canvas-pilot canvas-execute --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/X-isdoingreat/canvas-pilot.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/canvas-execute .claude/skills/canvas-execute && rm -rf skills-srcUse ~/.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/
Install the "canvas-execute" agent skill from https://github.com/X-isdoingreat/canvas-pilot/tree/main/.agents/skills/canvas-execute into .claude/skills/canvas-execute/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-execute", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/X-isdoingreat/canvas-pilot/tree/main/.agents/skills/canvas-executeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add X-isdoingreat/canvas-pilot --skill canvas-execute -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install X-isdoingreat/canvas-pilot canvas-execute --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/X-isdoingreat/canvas-pilot.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/canvas-execute .agents/skills/canvas-execute && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "canvas-execute" agent skill from https://github.com/X-isdoingreat/canvas-pilot/tree/main/.agents/skills/canvas-execute into .agents/skills/canvas-execute/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-execute", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add X-isdoingreat/canvas-pilot --skill canvas-execute -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install X-isdoingreat/canvas-pilot canvas-execute --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/X-isdoingreat/canvas-pilot.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/canvas-execute .cursor/skills/canvas-execute && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "canvas-execute" agent skill from https://github.com/X-isdoingreat/canvas-pilot/tree/main/.agents/skills/canvas-execute into .cursor/skills/canvas-execute/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-execute", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/X-isdoingreat/canvas-pilot.git --path .agents/skills/canvas-execute--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add X-isdoingreat/canvas-pilot --skill canvas-execute -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install X-isdoingreat/canvas-pilot canvas-execute --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/X-isdoingreat/canvas-pilot.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/canvas-execute .gemini/skills/canvas-execute && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "canvas-execute" agent skill from https://github.com/X-isdoingreat/canvas-pilot/tree/main/.agents/skills/canvas-execute into .gemini/skills/canvas-execute/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-execute", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install X-isdoingreat/canvas-pilot canvas-executeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add X-isdoingreat/canvas-pilot --skill canvas-execute -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/X-isdoingreat/canvas-pilot.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/canvas-execute .github/skills/canvas-execute && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "canvas-execute" agent skill from https://github.com/X-isdoingreat/canvas-pilot/tree/main/.agents/skills/canvas-execute into .github/skills/canvas-execute/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-execute", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add X-isdoingreat/canvas-pilot --skill canvas-execute -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install X-isdoingreat/canvas-pilot canvas-execute --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/X-isdoingreat/canvas-pilot.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/canvas-execute .opencode/skills/canvas-execute && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "canvas-execute" agent skill from https://github.com/X-isdoingreat/canvas-pilot/tree/main/.agents/skills/canvas-execute into .opencode/skills/canvas-execute/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-execute", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
canvas-executeUse after canvas-scan wrote a current plan and the student selected items.
Canvas Execute is an agent skill from X-isdoingreat/canvas-pilot. Use after canvas-scan wrote a current plan and the student selected items. Records approval, hands approved work sequentially to native Codex course skills, validates results, updates ledger/report/delivery, and finalizes the marker. Canvas submission and quiz mutations require separate scoped authorization.
Its SKILL.md is about 4.7k 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 Education. 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.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 6b79d5b. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pythonFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Canvas Execute loads about 4.7k tokens when it runs. Until then it costs about 81 tokens; SKILL.md has 2,534 words of instructions outside code blocks.
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.
The automated check found no risky patterns in SKILL.md.
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.
The full file from X-isdoingreat/canvas-pilot at commit 6b79d5b, republished under its AGPL-3.0 licence (© X-isdoingreat). 2,534 words, ~4,691 tokens.
.claude/skills/canvas-execute/SKILL.md (or your agent's skills folder).Execute is the action half of the scan/execute boundary. It reads an existing student-reviewed plan; it never scans, invents, expands, or silently repairs a missing plan.
Plan approval authorizes local assignment work for the selected items only. It does not authorize a Canvas upload/submission or a quiz start/answer/complete action. Those mutations require a separate scoped authorization receipt validated and consumed by the shared runtime.
canvas-scan inline or regenerate plan.json from Canvas.user_decision is not approve or a
valid swap:canvas-*.draft_ready.result.json
before finalization..claude/ read-only. Do not use the frozen Claude Skill tool or Claude
session variables as active runtime mechanisms.Before parsing approval, require:
runs/<today>/plan.json exists and parses as an object.runs/<today>/assignments.json exists and parses as a list.generated_at and expires_at are valid timezone-aware timestamps and the
plan has not expired.proposed_skill is the canonical canvas-* value produced by the
shared route resolver.If anything is missing, stale, malformed, or inconsistent, stop and tell the
student to run canvas-scan again. Do not “fix” the plan by fetching Canvas and
do not dispatch anything.
Call src.run_state.validate_plan_assignments(plan, assignments, run_dir=run_dir, require_current=True) for these checks. Do not maintain a
second timestamp, identity, skill-name, or status validator in this skill.
After applying the complete decision set, compute
src.run_state.plan_digest(updated_plan). Store that digest in the marker so a
resumed run cannot silently switch identities, skills, timestamps, or approval
decisions.
Normalize Unicode whitespace, Chinese punctuation, and case, but do not remove unknown words and do not mine arbitrary numbers from prose. Match the whole approval expression against one of these forms:
Call src.approval.parse_approval(user_text, plan) for the actual parse and
src.approval.apply_approval_to_plan for the complete decision set. The table
below is the user-facing contract and regression oracle; it is not permission
to rebuild an ad-hoc natural-language parser inside the agent.
| Exact form | Decision |
|---|---|
all, approve all, 全部, 全部做 | approve every item |
bare 1,3 or 1 3, and approve 1,3 / 做 1,3 | approve exactly the listed indices; defer the rest |
1-4, approve 1-4, 1 到 4 | approve the inclusive range; defer the rest |
urgent only, 只做 urgent, 只做紧急 | approve only items whose bucket is urgent; defer the rest |
skip, cancel, 取消, 全部取消 | defer every item; dispatch nothing |
skip 2 or defer 2 / 跳过 2 | defer that item; other items require an explicit approve selector in the same expression or remain deferred |
swap 2 to canvas-x / 第 2 项用 canvas-x | approve item 2 with swap:canvas-x; all unspecified items remain deferred |
Lists and ranges may be combined only with unambiguous separators, for example
1,3-5. Expand them deterministically, reject reversed ranges, and reject any
index not present in the current plan. Deduplicate repeated indices.
An optional compound expression may contain one approve selector followed by
targeted defer N or swap N to canvas-x clauses separated by semicolons.
A targeted defer may narrow an explicit broad selector, so
approve all; defer 2 means approve all except item 2. Reject a direct contradiction such as
approve 1; defer 1 rather than guessing which instruction was later intent.
The following are ambiguous and must trigger one concise clarification without writing anything:
do the important ones / 做重要的;do the first few;defer (no target);swap 1/2 (no target skill and unclear indices);cancel 2 (use defer 2 for a targeted decision);approve 1; defer 1, or another direct conflict not covered by the documented
broad-selector/targeted-defer precedence;canvas-* skill after
shared resolver validation.Silence never means approval. A list such as bare 1,3 approves only 1 and 3;
all other indices become defer.
After a successful parse, set every item to exactly one of:
approvedeferswap:canvas-<canonical-name>Write the complete decision set to a temporary plan, validate it, then commit
with os.replace. No decision may remain null once execute begins.
Prefer src.run_state.write_plan/atomic helpers so the same validator used by
the hooks protects the write.
Use runs/<today>/.scan_in_progress as an execute-owned marker. The marker is a
JSON object, not an empty touch file:
{
"session_id": "<current Codex thread/session identifier>",
"owner_kind": "codex",
"created_at": "<ISO time>",
"plan_digest": "<validated digest>"
}Resolve the identifier with
src.authorization.current_authorization_session(). In current Codex this is
normally CODEX_THREAD_ID; the helper supports CODEX_SESSION_ID only as a
runtime compatibility fallback. Do not read Claude variables, invent a UUID,
or stamp a marker the Stop guard cannot associate with this session. If the
shared helper returns no reliable identifier, fail closed before creating the
marker or dispatching.
Before creating today's marker, inspect existing markers:
Create today's marker atomically only after approval was parsed, plan decisions
were committed, and the final plan digest was computed. Use
src.run_state.validate_execute_marker on resume and before finalization. While
the marker exists, the Stop guard requires a canonical result for every
snapshot item and recomputes the digest against plan.json.
Immediately after creating or resuming the owned marker, and before reading, reconciling, or dispatching any assignment result, run the shared preparation gate:
python -m src.run_state prepare-results --run-dir runs/<today>prepare-results validates the marker owner and final plan, recoverably moves
each approved item's pre-existing result.json into its deterministic
result-history/ path, and stamps results_prepared_at,
results_archive_count, and the exact prepared_approved_result_keys list into
the marker. It is
idempotent after that stamp: a resume must call it again, but it must never
manually move or reuse a result around this gate. If the command fails, do not
dispatch or reconcile anything; retain the marker and report the exact error.
The shared run validator and Stop guard require that prepared key list to match
the current plan exactly. Because each approved slot was empty when the marker
was stamped, any approved result.json accepted afterward must have been
written by the current execute; an error or draft from a previous run is never
current-run evidence. Deferred results are not archived by this gate.
For each approved item in plan order:
approve uses the canonical proposed_skill already written by scan.swap:canvas-x is validated through
src.routes.resolve_skill(route, assignment) and must resolve to a
discoverable canonical Codex skill.canvas-* result;
do not recreate its heuristics in prose.If the target skill is missing or still contains UNFILLED_SKELETON, write a
canonical error result for the item, defer all not-yet-run items, and proceed
to safe closeout. Never perform the homework inline as a fallback.
Before every handoff, construct execution context with local drafting enabled and Canvas mutation disabled by default.
The approval recorded in plan.json is never an authorization receipt. The
following actions require a separate receipt validated and consumed by the
shared runtime immediately before the exact action:
The receipt must be scoped to the exact local user, course, assignment, action
set, and validity window, and must be single-use or consumption-tracked. A
standing environment flag, route value, plan approval, skill prose, or prior
conversation statement is not a substitute. Execute must pass only a receipt
that the shared runtime has already validated for this item and action.
Use src.authorization.require_mutation_authorization at the mutation boundary;
do not validate signatures or scope in skill prose.
Without a valid receipt:
skipped or error and a clear authorization next step;Even when a receipt exists, the course skill must pass its verification gate
before the shared runtime consumes it. Never infer mutation authority from the
words all, 1,3, urgent only, or a swap.
Process approved items one at a time, earliest plan item first. Do not run course skills in parallel because Canvas writes, shared artifacts, and result ledgers can race.
For each item:
course-<course_id>__assignment-<assignment_id>; consume a validated
snapshot work_dir when present and never derive it from mutable names;.agents/skills/<canonical-name>/SKILL.md and follow that skill's contract;result.json.The course skill owns spec discovery, drafting, substantive verification, and its result write. Execute owns dispatch order, canonical validation, ledger, report, delivery sync, and marker lifecycle.
Accept only these exact statuses:
draft_readysubmittedskippederrorReject legacy or invented statuses such as graded and already_submitted.
Validation rules:
draft_ready requires an existing, non-empty, substantive draft_path and an
all-PASS verification.log;submitted requires draft_path or a verified submitted_at, plus the
consumed authorization receipt reference and verification evidence;skipped requires explanatory notes and should identify whether it is
retryable/manual;error requires concrete notes and must not claim a draft;A submitted quiz additionally requires numeric kept score, possible points,
attempts used and allowed attempts, a documented scoring policy, and the
required arbitration diagnostic (agent_passes_count at the product minimum or
the student's sufficiently specific degraded-method consent). Those diagnostics
do not replace the mutation receipt.
If a handoff returns without a result, emits malformed JSON, uses an invalid
status, or claims a missing draft, preserve its raw evidence privately and
write a canonical error result atomically. Do not round it up to
draft_ready.
Use src.run_state.validate_result and write_result for canonical validation
and atomic writes.
Every non-approved item and every approved item left after a controlled pause gets an atomic placeholder result:
{
"status": "skipped",
"notes": "not approved this run",
"deferred_to_next_run": true
}Use a more specific note for explicit defer, cancel, crash recovery, or capacity pause. These are result placeholders only in the sense of closeout; they never claim a draft and must re-enter the next scan.
If the context is becoming too tight for the next heavy approved item:
Never stop with an assignment missing a result while the marker is owned.
After every validated result, update runs/_processed.json immediately:
deferred_to_next_run;os.replace.Never truncate unrelated historical entries. A ledger write failure stops new
dispatch; write safe results for remaining items and retain the marker until
closeout is repaired.
Use src.run_state.merge_ledger_entry (or its current shared equivalent), not a
read-modify-write snippet duplicated in the model.
Write runs/<today>/REPORT.md atomically after every snapshot item has a valid
result and the ledger is current.
The first block is always one of:
🔥 URGENT for every overdue or due-within-24-hours item whose live state is
not confirmed submitted/graded;✅ No urgent items in next 24h when none qualify.This urgent banner is always the first block of the report.
Immediately below the banner, include one debug-help block for all error
results. For each error name the assignment/course alias, canonical skill and
public Codex skill path when known, verbatim result notes, and checks for:
UNFILLED_SKELETON skeleton sentinel;Then group all items by canonical status (draft_ready, submitted, skipped,
error). Separate verified facts (files, checks, live state, receipt
consumption) from judgment calls (recommendation, uncertainty, user choice).
Never say “submitted” merely because a draft exists.
End with exactly one ## Next step recommendation. Priority is urgent mutation
or manual action, then first error, then skipped/manual work, then review/upload
of drafts. Keep the recommendation within the authority actually granted.
For each draft_ready or submitted result with a validated draft path:
final_drafts/ delivery tree using a
stable collision-safe name;submitted;An absent draft means no delivery copy. Do not create an empty stand-in.
Remove the owned .scan_in_progress marker only after all of these are true:
_processed.json is atomically current;REPORT.md exists and begins with the urgent block;If closeout validation fails, retain the marker, report the exact missing piece, and repair it. Never delete another session's marker. Marker removal is the final filesystem action of a successful execute run; only then is the marker removed.
© 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
Just SKILL.md in .agents/skills/canvas-execute of X-isdoingreat/canvas-pilot.
Open the folder on GitHubat commit 6b79d5b
Canvas Execute 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Canvas Execute this skillX-isdoingreat/canvas-pilot | 125 | — | ~4.7k | Automated safety check: Pass | AGPL-3.0 | |
| DeepTutor CLIHKUDS/DeepTutor | 41k | — | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| Zhang Xuefeng Perspectivealchaincyf/zhangxuefeng-skill | 10k | 1 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Deep Reading Analystginobefun/deep-reading-analyst-skill | 353 | 5 repos | ~3.6k | Automated safety check: Pass | MIT | |
| AI Engineering Placement Quizrohitg00/ai-engineering-from-scratch | 66k | — | ~2k | Automated safety check: Pass | MIT | |
| OpenMAIC Setup and ExtensionTHU-MAIC/OpenMAIC | 40k | — | ~1.7k | Automated safety check: Notes | MIT |
HKUDS/DeepTutor
Teaches the agent to set up and run DeepTutor from the command line: chat and capabilities, knowledge bases, partners, memory, sessions, notebooks and the server or Web app.
alchaincyf/zhangxuefeng-skill
Answers education and career questions in the voice of Zhang Xuefeng, looking up current employment and admissions data before giving a direct verdict.
ginobefun/deep-reading-analyst-skill
Comprehensive framework for deep analysis of articles, papers, and long-form content using 10+ thinking models (SCQA, 5W2H, critical thinking, inversion, mental models, first principles, systems…
rohitg00/ai-engineering-from-scratch
Runs a 10-question quiz across five areas to place a learner in the AI Engineering from Scratch curriculum, so they skip what they already know.
THU-MAIC/OpenMAIC
Guides setup, classroom generation and secondary development for OpenMAIC, the multi-agent interactive classroom, one confirmed phase at a time.
zarazhangrui/codebase-to-course
Turns a codebase into an interactive single-page HTML course for non-technical learners, with scroll modules, animated diagrams, quizzes and plain-English code translations.
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.
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.
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.
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.
X-isdoingreat/canvas-pilot
A skill your agent uses for an approved Canvas assignment that no specialized course skill can handle.
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.
Categories
Use after canvas-scan wrote a current plan and the student selected items. Canvas Execute is an agent skill from X-isdoingreat/canvas-pilot. Use after canvas-scan wrote a current plan and the student selected items.
Canvas Execute fits situations like: education work in your project.
Run `npx skills add X-isdoingreat/canvas-pilot --skill canvas-execute -a claude-code`. Or copy the skill folder (.agents/skills/canvas-execute in X-isdoingreat/canvas-pilot) into .claude/skills/canvas-execute in your project. Claude Code loads it when a task matches its description.
Run `npx skills add X-isdoingreat/canvas-pilot --skill canvas-execute -a codex`. Or copy the skill folder (.agents/skills/canvas-execute in X-isdoingreat/canvas-pilot) into .agents/skills/canvas-execute in your project. Codex loads it when a task matches its description.
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-execute -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-execute, .gemini/skills/canvas-execute, .github/skills/canvas-execute and .opencode/skills/canvas-execute in your project.
Going by SKILL.md and its folder, Canvas Execute needs the command-line tools its instructions call (python). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Canvas Execute 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.
About 4.7k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Canvas Execute: DeepTutor CLI (HKUDS/DeepTutor, 41k stars), Zhang Xuefeng Perspective (alchaincyf/zhangxuefeng-skill, 10k stars), Deep Reading Analyst (ginobefun/deep-reading-analyst-skill, 353 stars) and AI Engineering Placement Quiz (rohitg00/ai-engineering-from-scratch, 66k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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.