[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DCNT5TNJFDK565SVY20HG5":3,"skill-same:01M6DCNT5TNJFDK565SVY20HG5":89},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":34,"publishedAt":48,"linkOnly":49,"markdownContent":50,"markdownBody":51,"frontMatter":52,"refName":67,"commitSha":68,"skillDirectory":69,"forksCount":70,"repositoryHtmlUrl":71,"repositoryHomepageUrl":6,"ownerHtmlUrl":72,"ownerBlogUrl":6,"ownerDescription":73,"updatedAt":74,"install":75,"resources":88},"01M6DCNT5TNJFDK565SVY20HG5","canvas",null,"Canvas LMS integration — fetch enrolled courses and assignments using API token authentication.","zapabob\u002FSkills","zapabob","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F130830376?v=4","01M6DBMYZAGRTFQDSQYW3W764P","峯岸 亮","01M6DBMZ3GKDSJ01NZ9XTZD7JD",2,"MIT","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002F18\u002F18fe9279b12b1ef404e821f580634136c56fcdadddb33bdc3635e327dce38e82\u002FSKILL.md",[18,23,26,31],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":32,"categoryName":33,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000039","教师与教育",[5,35,36,37,38,39,40,41,42,43,44,45,46,47],"macos","linux","windows","authentication","integration","api","fetch","community","canvas lms","education","base","token","courses","2026-11-10 10:12:30",false,"---\r\nname: canvas\r\ndescription: Canvas LMS integration — fetch enrolled courses and assignments using API token authentication.\r\nversion: 1.0.0\r\nauthor: community\r\nlicense: MIT\r\nplatforms: [linux, macos, windows]\r\nprerequisites:\r\n  env_vars: [CANVAS_API_TOKEN, CANVAS_BASE_URL]\r\nmetadata:\r\n  hermes:\r\n    tags: [Canvas, LMS, Education, Courses, Assignments]\r\n---\r\n\r\n# Canvas LMS — Course & Assignment Access\r\n\r\nRead-only access to Canvas LMS for listing courses and assignments.\r\n\r\n## Scripts\r\n\r\n- `scripts\u002Fcanvas_api.py` — Python CLI for Canvas API calls\r\n\r\n## Setup\r\n\r\n1. Log in to your Canvas instance in a browser\r\n2. Go to **Account → Settings** (click your profile icon, then Settings)\r\n3. Scroll to **Approved Integrations** and click **+ New Access Token**\r\n4. Name the token (e.g., \"Hermes Agent\"), set an optional expiry, and click **Generate Token**\r\n5. Copy the token and add to `${HERMES_HOME:-~\u002F.hermes}\u002F.env`:\r\n\r\n```\r\nCANVAS_API_TOKEN=your_token_here\r\nCANVAS_BASE_URL=https:\u002F\u002Fyourschool.instructure.com\r\n```\r\n\r\nThe base URL is whatever appears in your browser when you're logged into Canvas (no trailing slash).\r\n\r\n## Usage\r\n\r\n```bash\r\nCANVAS=\"python $HERMES_HOME\u002Fskills\u002Fproductivity\u002Fcanvas\u002Fscripts\u002Fcanvas_api.py\"\r\n\r\n# List all active courses\r\n$CANVAS list_courses --enrollment-state active\r\n\r\n# List all courses (any state)\r\n$CANVAS list_courses\r\n\r\n# List assignments for a specific course\r\n$CANVAS list_assignments 12345\r\n\r\n# List assignments ordered by due date\r\n$CANVAS list_assignments 12345 --order-by due_at\r\n```\r\n\r\n## Output Format\r\n\r\n**list_courses** returns:\r\n```json\r\n[{\"id\": 12345, \"name\": \"Intro to CS\", \"course_code\": \"CS101\", \"workflow_state\": \"available\", \"start_at\": \"...\", \"end_at\": \"...\"}]\r\n```\r\n\r\n**list_assignments** returns:\r\n```json\r\n[{\"id\": 67890, \"name\": \"Homework 1\", \"due_at\": \"2025-02-15T23:59:00Z\", \"points_possible\": 100, \"submission_types\": [\"online_upload\"], \"html_url\": \"...\", \"description\": \"...\", \"course_id\": 12345}]\r\n```\r\n\r\nNote: Assignment descriptions are truncated to 500 characters. The `html_url` field links to the full assignment page in Canvas.\r\n\r\n## API Reference (curl)\r\n\r\n```bash\r\n# List courses\r\ncurl -s -H \"Authorization: Bearer $CANVAS_API_TOKEN\" \\\r\n  \"$CANVAS_BASE_URL\u002Fapi\u002Fv1\u002Fcourses?enrollment_state=active&per_page=10\"\r\n\r\n# List assignments for a course\r\ncurl -s -H \"Authorization: Bearer $CANVAS_API_TOKEN\" \\\r\n  \"$CANVAS_BASE_URL\u002Fapi\u002Fv1\u002Fcourses\u002FCOURSE_ID\u002Fassignments?per_page=10&order_by=due_at\"\r\n```\r\n\r\nCanvas uses `Link` headers for pagination. The Python script handles pagination automatically.\r\n\r\n## Rules\r\n\r\n- This skill is **read-only** — it only fetches data, never modifies courses or assignments\r\n- On first use, verify auth by running `$CANVAS list_courses` — if it fails with 401, guide the user through setup\r\n- Canvas rate-limits to ~700 requests per 10 minutes; check `X-Rate-Limit-Remaining` header if hitting limits\r\n\r\n## Troubleshooting\r\n\r\n| Problem | Fix |\r\n|---------|-----|\r\n| 401 Unauthorized | Token invalid or expired — regenerate in Canvas Settings |\r\n| 403 Forbidden | Token lacks permission for this course |\r\n| Empty course list | Try `--enrollment-state active` or omit the flag to see all states |\r\n| Wrong institution | Verify `CANVAS_BASE_URL` matches the URL in your browser |\r\n| Timeout errors | Check network connectivity to your Canvas instance |\r\n","# Canvas LMS — Course & Assignment Access\r\n\r\nRead-only access to Canvas LMS for listing courses and assignments.\r\n\r\n## Scripts\r\n\r\n- `scripts\u002Fcanvas_api.py` — Python CLI for Canvas API calls\r\n\r\n## Setup\r\n\r\n1. Log in to your Canvas instance in a browser\r\n2. Go to **Account → Settings** (click your profile icon, then Settings)\r\n3. Scroll to **Approved Integrations** and click **+ New Access Token**\r\n4. Name the token (e.g., \"Hermes Agent\"), set an optional expiry, and click **Generate Token**\r\n5. Copy the token and add to `${HERMES_HOME:-~\u002F.hermes}\u002F.env`:\r\n\r\n```\r\nCANVAS_API_TOKEN=your_token_here\r\nCANVAS_BASE_URL=https:\u002F\u002Fyourschool.instructure.com\r\n```\r\n\r\nThe base URL is whatever appears in your browser when you're logged into Canvas (no trailing slash).\r\n\r\n## Usage\r\n\r\n```bash\r\nCANVAS=\"python $HERMES_HOME\u002Fskills\u002Fproductivity\u002Fcanvas\u002Fscripts\u002Fcanvas_api.py\"\r\n\r\n# List all active courses\r\n$CANVAS list_courses --enrollment-state active\r\n\r\n# List all courses (any state)\r\n$CANVAS list_courses\r\n\r\n# List assignments for a specific course\r\n$CANVAS list_assignments 12345\r\n\r\n# List assignments ordered by due date\r\n$CANVAS list_assignments 12345 --order-by due_at\r\n```\r\n\r\n## Output Format\r\n\r\n**list_courses** returns:\r\n```json\r\n[{\"id\": 12345, \"name\": \"Intro to CS\", \"course_code\": \"CS101\", \"workflow_state\": \"available\", \"start_at\": \"...\", \"end_at\": \"...\"}]\r\n```\r\n\r\n**list_assignments** returns:\r\n```json\r\n[{\"id\": 67890, \"name\": \"Homework 1\", \"due_at\": \"2025-02-15T23:59:00Z\", \"points_possible\": 100, \"submission_types\": [\"online_upload\"], \"html_url\": \"...\", \"description\": \"...\", \"course_id\": 12345}]\r\n```\r\n\r\nNote: Assignment descriptions are truncated to 500 characters. The `html_url` field links to the full assignment page in Canvas.\r\n\r\n## API Reference (curl)\r\n\r\n```bash\r\n# List courses\r\ncurl -s -H \"Authorization: Bearer $CANVAS_API_TOKEN\" \\\r\n  \"$CANVAS_BASE_URL\u002Fapi\u002Fv1\u002Fcourses?enrollment_state=active&per_page=10\"\r\n\r\n# List assignments for a course\r\ncurl -s -H \"Authorization: Bearer $CANVAS_API_TOKEN\" \\\r\n  \"$CANVAS_BASE_URL\u002Fapi\u002Fv1\u002Fcourses\u002FCOURSE_ID\u002Fassignments?per_page=10&order_by=due_at\"\r\n```\r\n\r\nCanvas uses `Link` headers for pagination. The Python script handles pagination automatically.\r\n\r\n## Rules\r\n\r\n- This skill is **read-only** — it only fetches data, never modifies courses or assignments\r\n- On first use, verify auth by running `$CANVAS list_courses` — if it fails with 401, guide the user through setup\r\n- Canvas rate-limits to ~700 requests per 10 minutes; check `X-Rate-Limit-Remaining` header if hitting limits\r\n\r\n## Troubleshooting\r\n\r\n| Problem | Fix |\r\n|---------|-----|\r\n| 401 Unauthorized | Token invalid or expired — regenerate in Canvas Settings |\r\n| 403 Forbidden | Token lacks permission for this course |\r\n| Empty course list | Try `--enrollment-state active` or omit the flag to see all states |\r\n| Wrong institution | Verify `CANVAS_BASE_URL` matches the URL in your browser |\r\n| Timeout errors | Check network connectivity to your Canvas instance |\r\n",{"name":5,"author":42,"license":15,"version":53,"metadata":54,"platforms":62,"description":7,"prerequisites":63},"1.0.0",{"hermes":55},{"tags":56},[57,58,59,60,61],"Canvas","LMS","Education","Courses","Assignments",[36,35,37],{"env_vars":64},[65,66],"CANVAS_API_TOKEN","CANVAS_BASE_URL","main","0d1434f89f4bc6b07e9d272accd8c1013768820f","archive\u002Fskill-md-reviewed\u002Fsha256\u002F18\u002F18fe9279b12b1ef404e821f580634136c56fcdadddb33bdc3635e327dce38e82",0,"https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills","https:\u002F\u002Fgithub.com\u002Fzapabob","The Open University of JAPAN　2019-now\r\n\r\nTokyo University of Science　2007-2010","2026-10-26 16:29:01",{"source":8,"skillName":5,"commands":76,"prompt":86,"zipAvailable":87},[77,80,83],{"tool":78,"command":79},"npx","npx skills add zapabob\u002FSkills --skill canvas",{"tool":81,"command":82},"bunx","bunx skills add zapabob\u002FSkills --skill canvas",{"tool":84,"command":85},"pnpm","pnpm dlx skills add zapabob\u002FSkills --skill canvas","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002F18\u002F18fe9279b12b1ef404e821f580634136c56fcdadddb33bdc3635e327dce38e82\u002FSKILL.md",true,[],[90,116,149,176,203,220],{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":101,"publishedAt":48},"01M6GJTE1GESGGF9K028Y7753E","xurl","X\u002FTwitter via xurl CLI: post, search, DM, media, v2 API.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fxurl\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[96,97,100],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":98,"categoryName":99,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},[92,102,35,103,104,36,37,105,106,107,108,40,109,110,111,112,67,113,114,115],"openclaw","cli","github","official","search","https","social-media","Media","hermes","hermes agent","twitter","social","via","post",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":131,"publishedAt":48},"01M6GJT8S1PXQ8WPXT1HSNBWH2","writing-plans","Write implementation plans: bite-sized tasks, paths, code.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwriting-plans\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[122,123,126,127,128],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":124,"categoryName":125,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":98,"categoryName":99,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},{"categoryNo":129,"categoryName":130,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000036","内容创作者",[132,133,134,135,35,136,36,137,37,138,139,140,141,142,143,144,145,146,147,148],"writing","writing plans","plans","design","review","workflow","documentation","tasks","development","code","planning","code-review","subagent","write","superpowers","paths","test-driven-development",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":158,"publishedAt":48},"01M6GJST0H5X7WHBJ3BZK0DVKH","whisper","OpenAI's general-purpose speech recognition model. Supports 99 languages, transcription, translation to English, and language identification. Six model sizes from tiny (39M params) to large (1550M params). Use for speech-to-text, podcast transcription, or multilingual audio processing. Best for robust, multilingual ASR.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwhisper\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[155],{"categoryNo":156,"categoryName":157,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[151,35,36,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175],"openai","speech","multimodal","Transformers","ASR","Audio","text","model","speech recognition","use","general","multilingual","translation","english","identification","processing","Audio Processing",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":185,"publishedAt":48},"01M6GJSMRQ8EETZTYMG72P70EA","weights-and-biases","W&B: log ML experiments, sweeps, model registry, dashboards.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fweights-and-biases\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[182],{"categoryNo":183,"categoryName":184,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000013","分析与可视化",[186,35,187,188,37,189,190,191,192,193,194,166,195,196,197,198,199,200,201,202],"weights and biases","tensorflow","experiments","pytorch","visualization","registry","real-time","tuning","dashboards","experiment","log","time","Experiment Tracking","Model Registry","Hyperparameter Tuning","WandB","Real-Time Visualization",{"skillNo":204,"name":205,"nameZh":6,"description":206,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":207,"categories":208,"keywords":210,"publishedAt":48},"01M6GJS19KDPRY112JTR326S06","watchers","Poll RSS, JSON APIs, and GitHub with watermark dedup.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwatchers\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[209],{"categoryNo":98,"categoryName":99,"taxonomyType":21,"taxonomyTypeDesc":22},[205,35,211,104,36,212,213,214,215,216,217,110,111,218,219],"terminal","automation","http","monitoring","cron","json","rss","devops","with",{"skillNo":221,"name":222,"nameZh":6,"description":223,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":224,"categories":225,"keywords":228,"publishedAt":48},"01M6GJRHJD2A6Q830SWF9W48BC","serving-llms-vllm","vLLM: high-throughput LLM serving, OpenAI API, quantization.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fvllm\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[226,227],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},[229,230,231,36,232,159,233,234,235,162,236,40,237,238,239,240,241,242,243,244],"llms","vLLM","serving llms vllm","research","openai api","tensor","Inference Serving","Production","llm serving","High Throughput","PagedAttention","Continuous Batching","Quantization","Tensor Parallelism","high-throughput","throughput"]