Skill: guzus/snu-canvas-cli (version 1.0.0)

--- name: snu-canvas-cli description: Operate SNU's Canvas LMS (etl.snu.ac.kr) through CLI commands. Use when you need to inspect config, list courses/assignments/files/announcements, run bot/serve modes, or troubleshoot Canvas API issues. Never guess or substitute LMS domains; validate the configured Canvas URL first. Never ask users to send API tokens via chat. --- # SNU Canvas CLI Use this skill to operate `lx-agent` **exclusively through its CLI bridge**. Do NOT bypass the CLI by calling Canvas API endpoints directly with curl, fetch, or any HTTP client. ## Critical Rules 1. **CLI-only access** — Always use the bridge script below. Never curl/fetch Canvas API endpoints directly. The CLI handles authentication, XSRF tokens, and error handling internally. 2. **Never ask for tokens in chat** — Tokens are secrets. Never ask the user to paste or send API tokens via Telegram, Slack, or any chat. Instead, guide them to update `config.yaml` or set `CANVAS_TOKEN` env var on the server. 3. **Never expose token values** — Do not print, log, or display token values (even partially masked) in responses. 4. **Follow verification flow** — Always run `config` command first before diagnosing issues. ## Command Bridge Run commands through the bundled bridge script: ```bash skills/learningx-cli/scripts/run-lx-agent-cli.sh <command> [args...] ``` Set `LX_AGENT_ROOT` when running outside the repository root. ## Domain Guardrails (Important) - Treat `canvas.url` in `config.yaml` (or `CANVAS_URL`) as source of truth unless the user explicitly changes it. - Never replace the LMS domain with other university domains by inference. - Do not claim a domain is invalid from one resolver or one server network. - If DNS check fails in current environment, report it as environment-scoped and ask for the user-confirmed LMS URL before changing config. - Keep "Learning X" as product naming and `learningx` as technical identifier. ## Error Handling: 401 Unauthorized / Token Errors When the CLI returns 401 or token-related errors: 1. Run `skills/learningx-cli/scripts/run-lx-agent-cli.sh config` to confirm which token/URL is configured. 2. Tell the user: "Canvas API 토큰이 만료되었거나 유효하지 않습니다. LMS 웹사이트의 Settings → New Access Token에서 새 토큰을 발급한 뒤, 서버의 config.yaml 파일에서 canvas.token 값을 직접 업데이트해주세요." 3. **Do NOT** ask them to send the token in chat. 4. **Do NOT** attempt to curl the API yourself to "test" the token. 5. After the user confirms they updated the config, re-run the CLI command to verify. ## Required URL Verification Flow Run this sequence before concluding URL problems: ```bash skills/learningx-cli/scripts/run-lx-agent-cli.sh config getent hosts <canvas-host> || nslookup <canvas-host> || dig +short <canvas-host> curl -I --max-time 10 https://<canvas-host> ``` If these checks fail from the current runtime: - say "cannot verify from this server/runtime" - do not claim global NXDOMAIN unless confirmed by multiple independent resolvers - ask user to confirm LMS URL they use in browser ## Common Commands ```bash skills/learningx-cli/scripts/run-lx-agent-cli.sh config skills/learningx-cli/scripts/run-lx-agent-cli.sh courses skills/learningx-cli/scripts/run-lx-agent-cli.sh assignments skills/learningx-cli/scripts/run-lx-agent-cli.sh files skills/learningx-cli/scripts/run-lx-agent-cli.sh announcements skills/learningx-cli/scripts/run-lx-agent-cli.sh bot skills/learningx-cli/scripts/run-lx-agent-cli.sh serve ``` ## Notes - The bridge runs `go run ./cmd/lx-agent ...`. - Keep outputs concise and include command results directly in your response. - For bot/serve runs, surface startup errors and required env/config clearly. - For URL issues, follow `Domain Guardrails` and never auto-substitute a different domain. - When something fails, use the CLI to diagnose — do not fall back to raw HTTP calls.

path: agents/openai.yaml
content: interface:
  display_name: "LearningX CLI"
  short_description: "Run lx-agent CLI with strict URL checks"
  default_prompt: "Use $learningx-cli to run lx-agent Telegram/LearningX CLI commands, verify Canvas URL via config+network checks, and never guess alternate domains."


path: scripts/run-lx-agent-cli.sh
content: #!/usr/bin/env bash
set -euo pipefail

ROOT_DIR="${LX_AGENT_ROOT:-$(pwd)}"

if [[ $# -lt 1 ]]; then
  echo "Usage: run-lx-agent-cli.sh <command> [args...]" >&2
  echo "Example: run-lx-agent-cli.sh config" >&2
  exit 2
fi

if [[ ! -f "$ROOT_DIR/go.mod" || ! -d "$ROOT_DIR/cmd/lx-agent" ]]; then
  echo "LX_AGENT_ROOT does not look like an lx-agent repo: $ROOT_DIR" >&2
  exit 1
fi

cmd="$1"
shift || true

cd "$ROOT_DIR"
go run ./cmd/lx-agent "$cmd" "$@"


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)