Nlm Skill
iusztinpaul/ai-research-os-workshop
Expert guide for the NotebookLM CLI (nlm) and MCP server - interfaces for Google NotebookLM.
A skill your agent uses for an approved Canvas Classic Quiz routed by canvas-execute.
$ npx skills add X-isdoingreat/canvas-pilot --skill canvas-inside -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install X-isdoingreat/canvas-pilot canvas-inside --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-inside .claude/skills/canvas-inside && 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-inside" agent skill from https://github.com/X-isdoingreat/canvas-pilot/tree/main/.agents/skills/canvas-inside into .claude/skills/canvas-inside/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-inside", 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-insideType 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-inside -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install X-isdoingreat/canvas-pilot canvas-inside --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-inside .agents/skills/canvas-inside && 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-inside" agent skill from https://github.com/X-isdoingreat/canvas-pilot/tree/main/.agents/skills/canvas-inside into .agents/skills/canvas-inside/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-inside", 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-inside -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install X-isdoingreat/canvas-pilot canvas-inside --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-inside .cursor/skills/canvas-inside && 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-inside" agent skill from https://github.com/X-isdoingreat/canvas-pilot/tree/main/.agents/skills/canvas-inside into .cursor/skills/canvas-inside/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-inside", 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-inside--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-inside -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install X-isdoingreat/canvas-pilot canvas-inside --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-inside .gemini/skills/canvas-inside && 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-inside" agent skill from https://github.com/X-isdoingreat/canvas-pilot/tree/main/.agents/skills/canvas-inside into .gemini/skills/canvas-inside/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-inside", 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-insideInstalls 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-inside -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-inside .github/skills/canvas-inside && 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-inside" agent skill from https://github.com/X-isdoingreat/canvas-pilot/tree/main/.agents/skills/canvas-inside into .github/skills/canvas-inside/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-inside", 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-inside -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-inside --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-inside .opencode/skills/canvas-inside && 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-inside" agent skill from https://github.com/X-isdoingreat/canvas-pilot/tree/main/.agents/skills/canvas-inside into .opencode/skills/canvas-inside/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-inside", 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-insideA skill your agent uses for an approved Canvas Classic Quiz routed by canvas-execute.
Canvas Inside is an agent skill from X-isdoingreat/canvas-pilot. Use for an approved Canvas Classic Quiz routed by canvas-execute. Build source-grounded study notes, run four independent native Codex answer passes, and perform only the exact quiz mutations authorized by a signed receipt; fail closed for New Quizzes, locks, missing sources, or incomplete authority.
Its SKILL.md is about 5.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 Education, covering Quizzes and assessments, Study guides and flashcards and Source-grounded notebooks. 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.
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.
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 Inside loads about 5.5k tokens when it runs. Until then it costs about 79 tokens; SKILL.md has 2,393 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,393 words, ~5,499 tokens.
.claude/skills/canvas-inside/SKILL.md (or your agent's skills folder).Handle online_quiz assignments with a real Classic Quiz quiz_id. Supported
question types are multiple choice, multiple answers, true/false, matching,
short answer, fill-in-multiple-blanks, multiple dropdowns, numerical, and
essay. New Quizzes (external_tool with no quiz_id) and online text entries
are outside this skill.
Plan approval permits the approved local work only. It never grants authority to start an attempt, save an answer or event, complete an attempt, or retake.
Require run_dir, course_id, assignment_id, the validated assignment
snapshot and approved plan item. Create the only work directory with:
from src.course_artifacts import ensure_stable_work_dir
work_dir = ensure_stable_work_dir(run_dir, course_id, assignment_id)Its name is exactly course-<course_id>__assignment-<assignment_id>. Keep all
quiz evidence there:
quiz_meta.json
readings/
references/
study_notes.md
submission.json
questions.json
questions_simplified.json
agent_passes/
final_answers.json
answer_log.json
attempt-1/
attempt-2/
audit/learning_log.json
result.jsonRead _private/canvas-inside-app.md first and select the exact course block.
It may contain the course whitelist, recurring quiz scope, instructor framework
primer, expected canonical knowledge, human-hours window, rate limit, target
score band and retake threshold. If the block is absent, write error with
reason_code=missing_course_overlay, recommend a separate canvas-bootstrap
run, and stop. Never copy private overlay values into this tracked skill.
Read the assignment, current submission and quiz metadata. Save the complete
quiz object atomically as quiz_meta.json, adding exact course_id, quiz_id
and assignment_id; its id must also equal quiz_id. Before answer or
complete mutations, Stage 4 adds the current session_id, positive integer
attempt, and authorization_receipt_id. Never copy a signature or validation
token into this metadata file.
Classify as follows:
| Evidence | Outcome |
|---|---|
online_quiz, non-null quiz_id, question_count >= 5, and a finite time_limit | Continue as a full Classic Quiz |
no quiz_id, or external_tool | skipped: unsupported New Quiz or non-quiz |
| one question plus video/lecture language or no time limit | skipped: required video interaction is unavailable |
locked_for_user, proctoring, LockDown Browser, or identity-presence requirement | skipped: intrinsically manual |
| any other shape | draft_ready with existing draft_path=quiz_meta.json and reason_code=unclassified_quiz |
Do not infer the quiz shape from its name. If an inaccessible video or third-party source may have a transcript, ask the student for the link. Continue without it only when the remaining authoritative sources are sufficient.
Do this read-only stage before checking scheduling toggles or mutation
authority. It must produce study_notes.md, so a later draft_ready result has
a real deliverable.
Write verification.log at the same stage with measured PASS/FAIL lines for
metadata capture, required-reading coverage, source traceability, and
unresolved placeholders. An unclassified quiz that returns quiz_meta.json
must still record a real metadata-capture PASS. No draft_ready result is
valid while this log is missing, empty, or contains FAIL.
Use a four-layer source hunt; the Canvas description is only a routing hint.
readings/; extract searchable
text from PDFs and other readable files beside them. Preserve page/source
anchors.references/ and label their confidence as medium or low.If no sufficiently authoritative source remains after all four layers, write
error with reason_code=required_reading_unavailable; do not guess answers.
Build study_notes.md from the retrieved evidence. For each reading include:
For multiple readings, add cross-cutting themes. Put the overlay's instructor framework primer at the top, clearly labeled as course context, and keep direct source claims distinguishable from inference.
After study_notes.md exists, enforce the four scheduling gates:
CANVAS_QUIZ_AUTORUN=1; otherwise return draft_ready with
draft_path=study_notes.md.America/Los_Angeles hour is inside CANVAS_QUIZ_HUMAN_HOURS or
the overlay window; otherwise return the same draft_ready form.runs/_processed.json contains fewer submitted quiz results in the prior
six hours than CANVAS_QUIZ_MAX_PER_RUN or the overlay limit; otherwise
return the same draft_ready form.whitelisted_course_ids; otherwise write skipped.Scheduling flags and a whitelist are not mutation authority. Require the signed,
unexpired authorization_receipt_path supplied by canvas-submit or an
authorized delegation; the interactive default is
<work_dir>/mutation_authorization.json. It must be bound to the current Canvas
origin, course, target_type="quiz", exact target_id=quiz_id, current Codex
session, and exact action set. Validate every anticipated action through
src.authorization.load_authorization_receipt and
validate_authorization_receipt before starting, so a later scope failure
cannot waste an attempt.
| Runtime call | Required receipt action |
|---|---|
cv.start_quiz_submission(..., is_retake=False) | quiz.start |
every cv.post_quiz_events(...) | quiz.event |
every cv.answer_quiz_questions(...) | quiz.answer |
cv.complete_quiz_submission(...) | quiz.complete |
cv.start_quiz_submission(..., is_retake=True) | quiz.retake |
Attempt 1 therefore needs quiz.start, quiz.event, quiz.answer, and
quiz.complete. Add quiz.retake only when the student's exact authorized
workflow includes another attempt. No action implies another, and no wildcard,
environment boolean, plan decision, overlay sentence, or prior receipt may
replace an exact action. If the receipt is absent, invalid, expired, origin-
mismatched, target-mismatched, session-mismatched, or missing a required action,
write draft_ready with draft_path=study_notes.md and make no mutation.
Pass the same validated receipt to every client mutation. The client remains the authoritative enforcement boundary.
Start only after the entire attempt-1 scope has passed preflight:
sub = cv.start_quiz_submission(
course_id, quiz_id,
authorization_receipt=authorization_receipt,
)Save the submission id, attempt number, validation token, end_at, and response
clock to submission.json. Post one session_started event using the
quiz.event scope. Fetch questions only from the student submission endpoint:
questions = cv.get_quiz_submission_questions(submission_id)Save questions.json. Never bulk-post question_viewed events at open; pair
each view with its later answer. Immediately after start, atomically update
quiz_meta.json with course_id, quiz_id, assignment_id, the validated
receipt's session_id and receipt_id (stored as
authorization_receipt_id), and attempt=sub["attempt"]. These values bind
all later local evidence to this one open attempt.
Strip HTML for reasoning while retaining raw question and answer identifiers.
Write questions_simplified.json. Preserve these answer shapes exactly:
| Canvas type | final_answers.json answer value |
|---|---|
multiple_choice_question | one answer id |
true_false_question | one answer id |
multiple_answers_question | list of answer ids |
matching_question | list of {answer_id, match_id} objects |
short_answer_question | terse exact-match token, not a sentence |
fill_in_multiple_blanks_question | {blank_id: terse token} |
multiple_dropdowns_question | {blank_id: answer_id} |
numerical_question | number or numeric string within the stated tolerance |
essay_question | source-grounded prose string |
For blank questions, union prompt [variable_name] tokens with every returned
answers[].blank_id; those variable names are the submission keys. Keep
dropdown options grouped by blank. Never paste raw reading text into an essay.
Spawn four separate native Codex subagents in one parallel dispatch, before
awaiting any one result. Give each study_notes.md, normalized questions and
the source files, but do not give it another pass, a proposed final answer, or
the expected disagreement.
study_notes.md, then verify uncertain claims in
the exact source.Require each subagent to return only a JSON array. Every entry includes qnum,
question_id, type, the correctly shaped answer, confidence, a concise
reasoning, and source_anchor. Short and blank answers use the most likely
accepted token; alternatives belong in reasoning, never in the answer value.
Preserve each returned array verbatim under answers in an evidence envelope
whose context exactly repeats quiz_meta.json's six binding fields and whose
agent_role names that pass. Save the four envelopes immediately as:
agent_passes/notes_first.json
agent_passes/grep_first.json
agent_passes/framework_aware.json
agent_passes/contrarian.jsonThey must be valid, independently produced JSON files. Do not synthesize four personas in one response, clone a file, or manufacture disagreement. All four may honestly choose the same answers when their independent reasoning and source checks support that consensus.
Tabulate all four passes per question:
Write final_answers.json before any answer mutation:
{
"context": {
"course_id": "12",
"quiz_id": "34",
"assignment_id": "56",
"session_id": "<current Codex session>",
"attempt": 1,
"authorization_receipt_id": "<receipt id>"
},
"arbitration_notes": {
"unanimous_count": 4,
"flagged_qnums": [3],
"Q3": "2-2 split resolved from source anchor ..."
},
"answers": [
{
"qnum": 1,
"question_id": 101,
"type": "multiple_choice_question",
"answer": 1001,
"confidence": "high",
"source_anchor": "reading-a.txt paragraph 8"
}
]
}The integer arbitration_notes.unanimous_count, the exact current-attempt
context, and at least four JSON files in agent_passes/ are required by
src.canvas_client._require_canonical_arbitration_evidence. Answer consensus
is valid; four canonically identical substantive arrays (answers plus reasoning)
are copy-paste evidence and fail. If honest evidence cannot satisfy that guard,
write error; never forge it. A degraded method is
allowed only when CANVAS_QUIZ_DEGRADED_OK contains the student's verbatim,
specific consent of at least ten non-space characters, and that same text is
recorded as degraded_method_user_consent. It bypasses only the arbitration
evidence guard, never the signed mutation receipt.
Use src.quiz_focus_events.pick_flagged_questions for a capped subset of
low/medium-confidence questions. The optional
src.quiz_strategic_miss.maybe_flip_answers branch runs only when
CANVAS_QUIZ_STRATEGIC_MISS=1; never flip a high-confidence or constructed-
response answer and retain its full log. It does not grant mutation authority.
Use src.quiz_pacing.compute_answer_schedule and build_answer_sequence, plus
src.quiz_focus_events.pick_blur_slots. Target about 78% of the Canvas time
limit, include non-linear revisits, and spend at least 30 seconds on every
first-answer slot. Base deadline decisions on Canvas's response clock and
end_at, not an unverified local clock.
For each sequence slot, preserve this order:
question_viewed with quiz.event;page_blurred and page_focused events;question_flagged once;cv.answer_quiz_questions with course_id, quiz_id, assignment_id,
explicit work_dir, and quiz.answer authority;question_answered with quiz.event;answer_log.json.The answer call must receive the value from final_answers.json verbatim; do
not reshape it during submission. Pass the same validated receipt and exact
stable work_dir; an enforced Codex runtime rejects omitted or stale context.
An HTTP 500 from an answer save is a possible false negative. Immediately read
back cv.get_quiz_submission_questions(submission_id), compare the stored
answer to the canonical value, and re-post only a genuine mismatch. Treat it as
an error only when the readback remains wrong or empty after that targeted
retry. Record the response and readback evidence.
CANVAS_QUIZ_SUBMIT=0 disables completion but grants no authority; return
draft_ready with draft_path=study_notes.md and note that the authorized
attempt remains open. Otherwise call cv.complete_quiz_submission with the
quiz.complete scope plus assignment_id, explicit work_dir, and the same
validated receipt used by the attempt.
A completion HTTP 500 is also inconclusive. Read back
cv.get_submission(course_id, assignment_id). Treat workflow_state of
submitted or graded, or a real submitted_at, as success. If readback says
the attempt did not finalize, write error, leave it open, surface the exact
state, and do not automatically repeat /complete.
Read the kept score, points possible, attempt count, allowed attempts and
scoring policy from Canvas. Use the overlay retake threshold, default 0.95.
keep_latest or keep_average: do not risk another attempt.keep_highest: take attempt 2 unless
the student explicitly declines and the verbatim decline is recorded as
degraded_method_user_consent.Before a retake, require a still-valid exact quiz.retake scope in addition to
quiz.event, quiz.answer, and quiz.complete. quiz.start does not imply
quiz.retake.
Fetch attempt-1 feedback with cv.get_quiz_attempt_feedback when visible. Save
it as attempt-1/feedback.json. For repeated questions, keep verified-correct
answers and fix verified misses. Question banks may reshuffle, so start the
authorized retake, fetch its actual questions, and treat every new question as
new work. If feedback is hidden, rearbitrate all uncertain questions.
Archive attempt-1 pass/evidence files under attempt-1/. Then run four fresh
parallel subagents for attempt 2 and write their raw JSON plus fresh
final_answers.json to the canonical root paths before saving answers; archive
the finished set under attempt-2/ afterward. Run the same paced event/answer
loop and completion readback. Save attempt-2/plan.json, submission data and
attempt2_method (feedback-driven, rearbitration, or a documented hybrid).
Under keep_highest, verify kept_score from Canvas rather than merely
assuming the local maximum. On attempt 2, atomically replace the attempt value
in quiz_meta.json and create fresh pass/final evidence whose context carries
that same attempt, session, and receipt before any answer mutation.
After the final chosen attempt is read-back verified, inspect
src.authorization.authorization_usage_status(receipt). If the receipt allows
quiz.retake but no retake is chosen, or the ledger otherwise lacks
terminal_at, call
src.authorization.finalize_authorization_usage(receipt, reason=...). A second
completion may already mark it terminal; verify that rather than assuming it.
Only a ledger entry with terminal_at permits
authorization_consumed=true in the submitted result.
After final grading, if per-question feedback is visible, spawn one fresh native
Codex subagent with final_answers.json, all raw passes, study_notes.md, exact
sources and feedback. Ask only for high-confidence misses and require JSON with
question, picked/correct answer, source anchor used, corrected source anchor,
whether the passes disagreed, and a concrete lesson.
Atomically save the array to audit/learning_log.json and reference it in
result.json. This is a non-gating learning step; it never changes a finished
submission or creates another attempt. Skip it honestly when item-level
feedback is unavailable.
Write only draft_ready, submitted, skipped, or error through
src.run_state.write_result. Every draft_ready branch must point to an
existing study_notes.md or quiz_meta.json; never claim notes before Stage 2
created them. Canvas graded belongs only in
metadata.canvas_workflow_state, never in status.
A submitted quiz result includes at least:
{
"kind": "quiz",
"status": "submitted",
"submitted_at": "<verified Canvas timestamp>",
"metadata": {"canvas_workflow_state": "submitted", "readback_verified": true},
"authorization_receipt_id": "<non-secret receipt id>",
"authorization_consumed": true,
"quiz_id": "<quiz id>",
"questions_answered": 5,
"attempt_1_score": 5,
"attempt_2_score": null,
"kept_score": 5,
"points_possible": 5,
"percent": 100.0,
"attempts_used": 1,
"allowed_attempts": 2,
"scoring_policy": "keep_highest",
"agent_passes_count": 4,
"attempt2_method": null,
"attempt1_feedback_unavailable": false,
"degraded_method_user_consent": null,
"human_ness_diagnostics": {
"user_agent_used": "<observed browser user agent>",
"human_hours_window": "<enforced local window>",
"started_at_pt_hour": 13,
"views_paired_with_answers": true,
"total_answer_time_seconds": 420,
"total_time_limit_seconds": 600,
"time_utilization": 0.7,
"per_question_cv": 0.45,
"answer_sequence_linear": false,
"revisits": 1,
"events_posted": 12,
"blur_events_count": 1,
"flagged_questions_count": 1,
"outlier_count": 0,
"strategic_miss_enabled": false,
"strategic_miss_count": 0
}
}Compute diagnostics from answer_log.json, not from expectation:
Also record attempt scores, attempt2_method, feedback availability and
learning_log when applicable. Validate the final payload before atomic write.
Honor a single-stage directive only when both the invocation contains
STAGE-BY-STAGE MODE and <work_dir>/.first_run_stage_by_stage exists.
Supported ordered stages are classify, reading-discovery, study-notes,
safety-gates, open-submission, arbitration, paced-submit, complete,
score-check, retake, and learning-audit.
Run exactly the named stage, require all prior artifacts, write a concise
stages/<stage>.done, and stop. Mutation stages still require the same signed
receipt, scheduling gates and arbitration evidence. Never use first-run mode to
bypass a gate or start an attempt during draft-only bootstrap calibration.
Normal daily execution runs the full ordered workflow.
runs/.© 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-inside of X-isdoingreat/canvas-pilot.
Open the folder on GitHubat commit 6b79d5b
Canvas Inside 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 Inside this skillX-isdoingreat/canvas-pilot | 125 | — | ~5.5k | Automated safety check: Pass | AGPL-3.0 | |
| Nlm Skilliusztinpaul/ai-research-os-workshop | 179 | 1 repos | ~6.9k | Automated safety check: Pass | MIT | |
| NotebookLM CLI Guidejacob-bd/notebooklm-cli | 256 | — | ~3.4k | Automated safety check: Warn | MIT | |
| Claude Certification Tutorrohitg00/ai-engineering-from-scratch | 66k | — | ~3k | Automated safety check: Pass | MIT | |
| StudyVault Quiz Tutorbevibing/tutor-skills | 1.3k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Project Mastery Coachtudoumashu/ai-memory-skillpack | 443 | — | ~1.8k | Automated safety check: Pass | MIT |
iusztinpaul/ai-research-os-workshop
Expert guide for the NotebookLM CLI (nlm) and MCP server - interfaces for Google NotebookLM.
jacob-bd/notebooklm-cli
Guides use of the nlm command-line tool to automate Google NotebookLM: notebooks, sources, research, one-shot questions and generated podcasts, reports, quizzes and slides.
rohitg00/ai-engineering-from-scratch
Guides a learner through one of four independent Claude certification tracks with onboarding, lessons, practice labs, mock exams and remediation.
bevibing/tutor-skills
Quizzes you on the notes in an Obsidian StudyVault, tracks proficiency per concept and drills weak areas in four-question rounds.
tudoumashu/ai-memory-skillpack
Train strict project ownership from repo-local docs/ai memory and central LLM Wiki project entities.
KeWang0622/kaogong-skill
考公AI导师 — a tutor for the Chinese civil service exam (公务员考试), covering 行测 (aptitude), 申论 (essay), and 面试 (structured interview).
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
A skill your agent uses for an approved Canvas Classic Quiz routed by canvas-execute. Canvas Inside is an agent skill from X-isdoingreat/canvas-pilot. Use for an approved Canvas Classic Quiz routed by canvas-execute.
Canvas Inside fits situations like: an approved Canvas Classic Quiz routed by canvas-execute; tasks that involve Quizzes and assessments; tasks that involve Study guides and flashcards.
Run `npx skills add X-isdoingreat/canvas-pilot --skill canvas-inside -a claude-code`. Or copy the skill folder (.agents/skills/canvas-inside in X-isdoingreat/canvas-pilot) into .claude/skills/canvas-inside in your project. Claude Code loads it when a task matches its description.
Run `npx skills add X-isdoingreat/canvas-pilot --skill canvas-inside -a codex`. Or copy the skill folder (.agents/skills/canvas-inside in X-isdoingreat/canvas-pilot) into .agents/skills/canvas-inside 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-inside -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-inside, .gemini/skills/canvas-inside, .github/skills/canvas-inside and .opencode/skills/canvas-inside in your project.
SKILL.md names no scripts, command-line tools or credentials: Canvas Inside is instructions for the agent only. 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 Inside 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 5.5k tokens (SKILL.md is roughly 22k 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 Inside: Nlm Skill (iusztinpaul/ai-research-os-workshop, 179 stars), NotebookLM CLI Guide (jacob-bd/notebooklm-cli, 256 stars), Claude Certification Tutor (rohitg00/ai-engineering-from-scratch, 66k stars) and StudyVault Quiz Tutor (bevibing/tutor-skills, 1.3k 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.