Ai Exam 授客AI智能考试
Analysis
The skill matches its exam-management purpose, but it needs organization credentials and can upload documents, create exams, and assign them to many users, so it should be reviewed carefully before installation.
Findings (5)
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
Checks for instructions or behavior that redirect the agent, misuse tools, execute unexpected code, cascade across systems, exploit user trust, or continue outside the intended task.
const deptUsers = await apiClient.request('GET', '/oa/departmentUser/list', null, { dept_id: deptId, page_size: 100 }); ... assignUserIds.push(...deptUserIds); ... await examService.assignExam(examInfo.uuid, assignUserIds, [], ...)A department name can be expanded into up to 100 member user IDs and then assigned an exam in the same flow. The artifacts do not show an approval, preview, or rollback step before this bulk account mutation.
formData.append('file', fs.createReadStream(filePath)); ... const result = await apiClient.request('POST', '/ai/uploadFiles', formData);The skill reads a local file path and uploads the file to the AI exam service. This is expected for document-based exam generation, but the code does not enforce file type, path, or size limits.
"dependencies": { "axios": "^1.6.0", "dotenv": "^17.3.1", "form-data": "^4.0.0" }The skill depends on npm packages using semver ranges. This is common for Node projects, but without pinned versions or a lockfile, future installs can resolve different package versions.
Checks whether tool use, credentials, dependencies, identity, account access, or inter-agent boundaries are broader than the stated purpose.
const params = { app_key: config.appKey, app_secret: config.appSecret, corpid: config.corpId }; ... const response = await axios.get(url, { params }); ... params: { ...params, access_token: token }The skill obtains and uses an access token from organization app credentials, and it places credentials/tokens in request parameters. The registry metadata does not declare required credentials or environment variables, so the privileged account access and destination are under-disclosed.
Checks for exposed credentials, poisoned memory or context, unclear communication boundaries, or sensitive data that could leave the user's control.
console.log(` 最后得分: ${examInfo.last_score}`); ... console.log(` 通过状态: ${examInfo.pass_status === 'passed' ? '✓ 已通过' : '✗ 未通过'}`); ... return examInfo;The skill retrieves, logs, and returns student exam-result data. This is purpose-aligned, but those results may be sensitive educational or employee-training records.
