Agent skill

Canvas Skill Opportunity

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

Use after first-run Canvas setup or when the user asks which recurring Canvas work should become the first durable course skill.

AGPL-3.0Auto-check passed

Install Canvas Skill Opportunity

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

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

GitHub CLI
$ gh skill install X-isdoingreat/canvas-pilot canvas-skill-opportunity --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/.agents/skills/canvas-skill-opportunity .claude/skills/canvas-skill-opportunity && 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-skill-opportunity
GitHub stars
125
Token cost
~3.6k tokens
SKILL.md length
1,561 words
Files
2
Skills in repo
32
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Use after first-run Canvas setup or when the user asks which recurring Canvas work should become the first durable course skill.

  • Works in 8 steps: Establish The Read-Only Boundary → Discover Recurrence As Fact → Inspect Representative Real Specifications → …
  • Asks which recurring Canvas work should become the first durable course skill
  • SKILL.md covers Contract, 1. Establish The Read-Only…, 2. Discover Recurrence As Fact and 3. Inspect Representative Real…, plus 7 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Canvas Skill Opportunity is an agent skill from X-isdoingreat/canvas-pilot. Use after first-run Canvas setup or when the user asks which recurring Canvas work should become the first durable course skill. Inspect representative real specifications and Canvas feedback policy, make a qualitative Agent judgment, write a private opportunity report, and stop for the user's choice.

Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).

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

  • Asks which recurring Canvas work should become the first durable course skill

Example prompts

  • “/canvas-skill-opportunity”

Requirements

  • Python 3

Workflow steps

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

  1. Establish The Read-Only Boundary
  2. Discover Recurrence As Fact
  3. Inspect Representative Real Specifications
  4. Apply Broad Task-Fit Priors
  5. Evaluate Review In Two Separate Layers
  6. Make A Qualitative Judgment
  7. Write The Private Report
  8. Stop At User Choice

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 nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are python and json).

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

  • Network

    No URLs in SKILL.md.

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

  • Credentials

    Names no API keys, tokens, secrets or passwords.

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

Context cost

Canvas Skill Opportunity loads about 3.6k tokens when it runs. Until then it costs about 82 tokens; SKILL.md has 1,561 words of instructions outside code blocks.

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

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 passed

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.

SKILL.md

The full file from X-isdoingreat/canvas-pilot at commit 6b79d5b, republished under its AGPL-3.0 licence (© X-isdoingreat). 1,561 words, ~3,614 tokens.

Download SKILL.mdSave it as .claude/skills/canvas-skill-opportunity/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
canvas-skill-opportunity
description
Use after first-run Canvas setup or when the user asks which recurring Canvas work should become the first durable course skill. Inspect representative real specifications and Canvas feedback policy, make a qualitative Agent judgment, write a private opportunity report, and stop for the user's choice.

Canvas Skill Opportunity

Choose the best first durable workflow, not merely the easiest-looking assignment. This is an Agent judgment protocol. Deterministic code may discover recurrence and project private data, but it must not decide the recommendation.

Contract

  • Enter after canvas-setup verifies authentication and finds no ready routes, or when the user explicitly asks for skill opportunities.
  • Write only:
    • runs/<today>/skill-opportunities.json
    • runs/<today>/skill-opportunities.md
  • Keep .claude/ read-only.
  • Never start or consume a quiz attempt merely to classify it.
  • Never solve, draft, answer, upload, submit, create a route, or create a skill.
  • Never call canvas-scan, canvas-execute, or a course-solving skill.
  • Stop for one numbered user choice. Selection authorizes only the later canvas-bootstrap design check; it does not authorize assignment submission.

1. Establish The Read-Only Boundary

Read AGENTS.md, courses.yaml, and setup state. Verify Canvas authentication if it has not been verified in this session. Before inspecting course data, say:

text
I will read recurring assignment instructions and Canvas feedback settings to
recommend one reusable workflow. I will not do work, start an attempt, upload,
submit, or create a skill.

Before writing, verify runs/ is gitignored. Stop if it is not.

2. Discover Recurrence As Fact

Use the existing factual helpers:

python
from src import canvas_client as cv
from src.opportunity_evidence import derive_quiz_feedback_capabilities
from src.recurring_patterns import bucket_recurring, is_course_active

For each active course, call cv.list_assignments_for_opportunity(course_id) once, apply the existing 7-day term grace period, and call bucket_recurring(items, min_freq=3). The dedicated list helper excludes student submission state. Retain the assignment IDs belonging to each returned bucket, future occurrence count, known future points, and current route coverage. These are evidence and later tie-breakers, not a verdict.

Do not infer task family, response length, or suitability from course name, assignment title, or submission_types alone. A Canvas upload may be code, a Word accounting worksheet, or a long essay; discovery cannot tell which.

3. Inspect Representative Real Specifications

For each plausible recurring bucket, use cv.get_assignment_spec_for_opportunity(course_id, assignment_id) to read enough representative assignments to establish whether the response pattern repeats. This helper returns an allowlisted real-spec projection and does not request a submission include:

  1. Read the full assignment description and rubric.
  2. Inspect attachment metadata and read required attached Word, Excel, PDF, starter-code, data, or template files when accessible.
  3. Follow relevant module pages, Canvas pages, and instructor/source pointers to the real specification. Do not treat a thin Canvas description as the specification.
  4. Compare at least two instances when two exist. Read additional instances when their required deliverables disagree. If stability still cannot be established, use insufficient_evidence.

Do not replace this helper with generic get_assignment, which requests an embedded submission object. If another source unexpectedly embeds student state, project it away before the Agent inspects or stores the specification.

Record derived facts, IDs, and source locations in the private report; do not copy full bodies, rubric text, or attachment contents into it. Never read or retain a student's prior answer content for task classification.

Extract these facts:

  • actual task family and primary deliverable
  • stable response pattern and whether the required inputs are reachable
  • Canvas-native or file-upload delivery path
  • number and independence of response units
  • estimated length and role of the main continuous prose unit
  • required live, physical, group, proctored, or unsupported external work
  • plausible pre-submit checks
  • post-submit feedback and retry policy, with evidence confidence

4. Apply Broad Task-Fit Priors

Treat the following as strong first-skill candidates when their response pattern repeats and their inputs and Canvas delivery path are reachable:

  • Canvas-submittable code of any length, even without supplied tests
  • mostly objective Canvas quizzes: choice, true/false, matching, numeric, and other objectively checkable items
  • quantitative math, accounting, economics, statistics, finance, and business work; a formal regression verifier is not required
  • structured Word, Excel, or PDF accounting/business work, worksheets, tables, calculations, and template-driven documents
  • independent short answers and short reading/writing annotations

Use response shape, not aggregate word count. Twenty independent annotations of 10-20 words remain a strong candidate even though their combined total may exceed 200 words. Conversely, a main or central continuous prose unit around 200 words or more is a strong default demoter for the first skill because voice, coherence, and review cost compound. This is not a mechanical universal hard gate: ancillary prose in a code, accounting, or quantitative deliverable must not make the central task look like an essay.

Long essays, research prose, personal reflection, and creative writing usually belong in assist_only. Required external-site interaction, live performance, physical work, proctoring, or group participation is unsupported unless an already-verified Canvas Pilot path can complete the whole required deliverable.

5. Evaluate Review In Two Separate Layers

Pre-submit review

Identify reasonable checks without demanding an external validator:

  • code: run, compile, inspect interfaces, examples, and constraints
  • accounting/finance: recompute, reconcile, balance, and cross-foot
  • math/statistics/economics: independent derivation, units, assumptions, direction, and magnitude checks
  • structured documents: required-field, source, calculation, rubric, and format coverage
  • objective questions: independent solving and source cross-checking

Formal tests improve confidence but are not an eligibility gate. Long code without supplied tests stays strong when its specification, inputs, and Canvas submission path are complete.

Post-submit feedback and retry

For quizzes and other retryable work, separately establish:

  • allowed_attempts
  • whether results appear before the next attempt
  • total-score visibility
  • item-correctness visibility
  • correct-answer visibility
  • own-answer visibility
  • feedback timing/window
  • scoring policy (keep_highest, latest, average, or unknown)
  • question reuse versus randomization between attempts
  • evidence confidence and source

Use derive_quiz_feedback_capabilities(quiz) on static Canvas settings first; it is a pure interpreter and never calls Canvas or starts an attempt. If an already-completed sibling assignment can provide observed evidence, call only cv.get_submission_feedback_observation_for_opportunity(course_id, assignment_id). That dedicated wrapper may inspect the existing submission internally, but it returns only a minimal Boolean/enum projection. It must not expose or retain raw prior answers, answer IDs, exact grades or scores, feedback text, or submission payloads. A projected own_response.record_present means only that a response record existed; it does not prove the student can view its contents. Keep own-answer visibility unknown unless separate safe evidence establishes it. If no safe projector exists, do not inspect the raw record: leave the capability unknown.

Label feedback evidence observed, declared, inferred, or unknown. Do not turn declared visibility into observed visibility. Two or more attempts plus useful feedback before retry plus keep_highest strongly promotes an otherwise suitable, mostly objective quiz. Merely allowing another attempt without timely useful feedback does not receive the same promotion. Never launch an attempt to discover any of these facts.

Show full SKILL.md (559 more words)Show less

6. Make A Qualitative Judgment

Assign exactly one tier:

  • best_first_skill: strongest complete, repeatable, high-fit opportunity
  • good_candidate: suitable and reusable, but not the best first investment
  • later_candidate: plausible, with material uncertainty or extra review cost
  • assist_only: Agent assistance is useful, but the central deliverable should not be the first end-to-end skill
  • unsupported: required delivery includes an unhandled external, live, physical, group, or proctored component
  • insufficient_evidence: real specs, materials, stability, or feedback facts are too incomplete to judge honestly

Judge in this order:

  1. unsupported or missing required inputs
  2. actual task-family fit and central response shape
  3. complete digital production and Canvas delivery path
  4. repeatable response pattern across representative specs
  5. pre-submit review and post-submit feedback/retry opportunity
  6. existing route coverage

Within otherwise suitable tiers, use recurrence, scheduled future count, known future points, and likely time saved to break ties. Missing points stay unknown. Do not invent a 0-100 skillability score, grade-leverage score, grade prediction, or precise probability. State evidence, uncertainties, and the reason for the relative ordering.

7. Write The Private Report

Write JSON with this concrete shape:

json
{
  "generated_at": "<ISO local time>",
  "scope": "read-only real-spec opportunity judgment",
  "decision_method": "agent_judgment",
  "grade_prediction": false,
  "candidates": [
    {
      "index": 1,
      "course_id": "<local only>",
      "course_name": "<local only>",
      "pattern": "Weekly task <N>",
      "tier": "best_first_skill",
      "recurrence_count": 8,
      "scheduled_future_count": 4,
      "scheduled_points_total": 40,
      "existing_route": null,
      "spec_evidence": {
        "sampled_assignment_ids": ["<local only>"],
        "source_locations": ["<local only>"],
        "stable_response_pattern": true,
        "task_family": "objective_quiz",
        "primary_deliverable": "Canvas quiz answers",
        "central_continuous_prose_words": 0,
        "independent_response_units": true,
        "inputs_reachable": true,
        "canvas_delivery_complete": true
      },
      "pre_submit_review": ["independent solve", "source cross-check"],
      "post_submit_policy": {
        "allowed_attempts": 2,
        "results_before_retry": true,
        "total_score_visible": true,
        "item_correctness_visible": true,
        "correct_answers_visible": null,
        "own_answers_visible": true,
        "feedback_timing": "immediate",
        "scoring_policy": "keep_highest",
        "question_reuse": "unknown",
        "evidence_confidence": "observed"
      },
      "reasons": ["..."],
      "demoters": [],
      "unknowns": ["question reuse"]
    }
  ]
}

Example values illustrate the schema only. Use locally observed facts. Use null/unknown rather than guessing.

Write Markdown with a compact whitespace table, not a pipe table:

text
#  local alias  tier  task family  recurring  future  feedback loop  strongest evidence  demoter/unknown

Then include:

  • Best first skill: one candidate plus 2-4 evidence bullets, or No eligible first skill when none qualifies
  • Evidence inspected: representative spec and source pointers
  • Why not the others: one evidence-based reason per demoted candidate
  • Unknowns: facts that remain unknown rather than inferred
  • Bootstrap must still verify: materials, workflow, review steps, and handoff

The private files may contain real local names and IDs. In chat, use only numbered aliases such as Course 1 / Pattern 1, link to the local Markdown report, and never paste the private table, course names, IDs, private links, or assignment examples.

8. Stop At User Choice

End with exactly one decision prompt in the user's language:

text
Which number should Canvas Pilot turn into the first durable course skill?

Do not invoke canvas-bootstrap in the same turn. After the user selects a number, pass that candidate and report path to Bootstrap. Bootstrap must still verify the real materials, repeating workflow, review checks, and delivery handoff before marking a route ready. If validation fails, offer the next saved candidate. The choice never authorizes solving or submission.

Failure Modes

FailureRequired behavior
Canvas authentication failsStop with the exact setup repair step.
runs/ is not ignoredStop before writing private course data.
No bucket reaches min_freq=3Report insufficient recurring evidence; do not invent a recommendation.
Representative real spec is inaccessibleUse insufficient_evidence; name the missing source.
Representative specs disagreeRead more samples; use later_candidate or insufficient_evidence if instability remains.
Feedback facts are incompleteKeep each field unknown; do not award retry promotion.
Safe historical projection is unavailableDo not read a raw submission payload. Use settings-only evidence.
Central deliverable is 200+ words of continuous proseDefault to assist_only or later_candidate, with evidence; do not apply a mechanical gate.
Required external/live/physical/group/proctored step existsUse unsupported.
Every candidate is covered, unsupported, or insufficientWrite No eligible first skill and stop.

Non-Negotiable Boundaries

  • Do not write assignments.json, plan.json, result.json, REPORT.md, or .scan_in_progress.
  • Do not retain raw prior answers, answer IDs, exact grades or scores, feedback text, submission payloads, or complete assignment/rubric/file contents.
  • Do not create routes or per-course skills before the user's numbered choice.
  • Do not promise correctness, a grade, or score improvement.
  • Do not write .claude.

© 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

SKILL.md and 1 other file in .agents/skills/canvas-skill-opportunity of X-isdoingreat/canvas-pilot.

  • SKILL.md
  • agents/openai.yaml

Open the folder on GitHubat commit 6b79d5b

Compare with similar skills

Canvas Skill Opportunity 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 Skill Opportunity compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Canvas Skill Opportunity this skillX-isdoingreat/canvas-pilot125—~3.6kAutomated safety check: PassAGPL-3.0
Canvasopenclaw/openclaw392k—~263Automated safety check: PassMIT
Canva Designerasgeirtj/system_prompts_leaks69k—~2.1kAutomated safety check: PassCC0-1.0
Plan Canvasaffaan-m/ECC277k1 repos~2.2kAutomated safety check: PassMIT
Canvas Designanthropics/skills180k52 repos~3kAutomated safety check: PassApache-2.0
Canvas AutomationComposioHQ/awesome-claude-skills77k3 repos~727Automated safety check: PassNone

Similar skills

  • Canvas

    openclaw/openclaw

    Present hosted widget documents on a connected macOS panel and control panel visibility or navigation.

    392k GitHub stars~263 tokensUpdated today
    Auto-check passed
  • Canva Designer

    asgeirtj/system_prompts_leaks

    Creates and edits Canva designs, generates images and works with brand kits through the canva CLI and Canva's official MCP server, from decks to social posts.

    69k GitHub stars~2.1k tokensUpdated yesterday
    Media & CreativeAuto-check passed
  • Plan Canvas

    affaan-m/ECC

    Open plans and HTML artifacts in a local browser canvas where the human annotates elements, chats, and approves or requests changes without leaving the page.

    277k GitHub starsUsed in 1 repo~2.2k tokens
    Frontend & DesignAuto-check passed
  • Canvas Design

    anthropics/skills

    Official

    Creates original posters and static art as PNG or PDF by first writing a short design philosophy, then expressing it visually on a canvas.

    180k GitHub starsUsed in 52 repos~3k tokens
    Media & CreativeAuto-check passed
  • Canvas Automation

    ComposioHQ/awesome-claude-skills

    Automate Canvas tasks via Rube MCP (Composio). An agent skill from ComposioHQ/awesome-claude-skills.

    77k GitHub starsUsed in 3 repos~727 tokens
    Productivity & AutomationAuto-check passed
  • Canvas Display

    spinabot/brigade

    Shows HTML content such as games, dashboards, visualizations and demos on a connected Brigade node's canvas, using a local canvas host server and a node bridge.

    11k GitHub stars~1.4k tokensUpdated 2 days ago
    Frontend & DesignAuto-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

Questions about Canvas Skill Opportunity

What does Canvas Skill Opportunity do?

Use after first-run Canvas setup or when the user asks which recurring Canvas work should become the first durable course skill. Canvas Skill Opportunity is an agent skill from X-isdoingreat/canvas-pilot. Use after first-run Canvas setup or when the user asks which recurring Canvas work should become the first durable course skill.

When should I use Canvas Skill Opportunity?

Canvas Skill Opportunity fits situations like: asks which recurring Canvas work should become the first durable course skill.

How do I install Canvas Skill Opportunity in Claude Code?

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

How do I install Canvas Skill Opportunity in Codex?

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

Can I use Canvas Skill Opportunity 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-skill-opportunity -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-skill-opportunity, .gemini/skills/canvas-skill-opportunity, .github/skills/canvas-skill-opportunity and .opencode/skills/canvas-skill-opportunity in your project.

What does Canvas Skill Opportunity need to run?

SKILL.md names no scripts, command-line tools or credentials: Canvas Skill Opportunity is instructions for the agent only. Our summary lists: Python 3.

Does Canvas Skill Opportunity access the network?

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.

Is Canvas Skill Opportunity safe to install?

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.

What licence does Canvas Skill Opportunity use?

Canvas Skill Opportunity 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 Skill Opportunity use?

About 3.6k tokens (SKILL.md is roughly 14k 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 Skill Opportunity?

Skills that share tags, products or a category with Canvas Skill Opportunity: Canvas (openclaw/openclaw, 392k stars), Canva Designer (asgeirtj/system_prompts_leaks, 69k stars), Plan Canvas (affaan-m/ECC, 277k stars) and Canvas Design (anthropics/skills, 180k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Canvas Skill Opportunity?

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.