Not in the top 1,000 by GitHub stars
grenbel/autodl-autogpu
由 AI 自动完成 AutoDL 实例开关机的 Claude Code skill,含空闲自动关机、预算核对与用量记账
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
5cd650f72fea → 5cd650f72fea
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 5cd650f72fea
No earlier version was observed for comparison.
Heat
0.2- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
How it works
autodl-autogpu
When your agent uses it
Use when work in any project needs an AutoDL instance powered on or off in GPU mode (有卡) or non-GPU mode (无卡), switched between them, checked (status, balance, billing, free GPUs), or kept from burning GPU time while idle or after the session ends (空转, 忘关机, 自动关机); also, where the project's GPU is an AutoDL instance, before experiments, training or data transfer run on it, e.g. in an automated research or experiment pipeline, under another experiment skill, or on a request like 按计划自动跑实验 (自动科研).
What it loads into context
Frontmatter
136 tokensAlways available to the agent
SKILL.md
11,437 tokensWhen the skill is activated
Reference documents
70,160 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 平台事实
- 必须遵守
- 怎么调用 ctl
- 开始时要确定的信息
- 开机流程
- 接手已经开着的实例
- 跑任务
- 关机
- 切换模式
- 汇报
- 用量与预算
- 出错处理
- 没有浏览器工具时
- 第一次使用
- 容易做错的地方
- 细节在哪
Scripts executed separately
dev/analyze_samples.pyreference/clone-page.jsreference/clone-page.min.jsreference/console-clone.min.jsreference/console.jsreference/console.min.jsscripts/autodl_ctl.pyscripts/autodl_guard.shscripts/ctltests/conftest.pytests/console/clone_fixtures.jstests/console/clone_run.jstests/console/fixtures.jstests/console/fn_digest.pytests/console/paste_copy.pytests/console/run.jstests/console/run_headless.pytests/console/skeleton.jstests/console/skeleton_test.jstests/fixtures/autodl_guard_0.7.1.shtests/live/check_ini.pytests/live/cpu_duty.pytests/live/disk_write.shtests/live/export_logs.pytests/live/fingerprint.shtests/live/gpu_duty.pytests/live/gpu_load.shtests/live/jobs_done.pytests/live/probe_state.pytests/live/queries.shtests/live/sshread.shtests/live/ticket_probe.pytests/local_tools.pytests/store_posix_check.pytests/stubs/fake-screentests/stubs/nvidia-smitests/stubs/screentests/stubs/shutdowntests/stubs/synctests/stubs/tmuxtests/test_analyze_samples.pytests/test_clone.pytests/test_clone_remote.pytests/test_console_static.pytests/test_ctl.pytests/test_docs_static.pytests/test_guard.shtests/test_live_scripts.pytests/test_local_tools.pytests/test_store.pytests/test_ticket.pytests/test_transfer_wsl.py
Files
.gitattributesasset217 bytes.gitignoreasset28 bytesLICENSEasset1,064 bytesREADME.cn.mddoc15,433 bytesREADME.mddoc18,751 bytesSKILL.mdcore38,972 bytesSKILL.mdcore38,972 bytesSKILL.mdcore38,972 bytesSKILL.mdcore38,972 bytesSKILL.mdcore38,972 bytesassets/demo.cn.svgasset9,004 bytesassets/demo.svgasset9,007 bytesassets/hero.cn.svgasset9,557 bytesassets/hero.svgasset9,551 bytesassets/nogpu.cn.svgasset11,036 bytesassets/nogpu.svgasset11,040 bytesassets/parts.cn.svgasset15,119 bytesassets/parts.svgasset15,127 bytesassets/safety.cn.svgasset7,538 bytesassets/safety.svgasset7,531 bytesdev/analyze_samples.pyruns11,763 bytesreference/clone-page.jsruns41,163 bytesreference/clone-page.min.jsruns29,693 bytesreference/clone.mddoc44,999 bytesreference/console-clone.min.jsruns45,885 bytesreference/console-more.mddoc12,676 bytesreference/console.jsruns65,033 bytesreference/console.mddoc42,580 bytesreference/console.min.jsruns34,098 bytesreference/guard.mddoc39,302 bytesreference/ledger.mddoc36,544 bytesreference/ssh.mddoc29,928 bytesscripts/autodl_ctl.pyruns277,989 bytesscripts/autodl_guard.shruns134,251 bytesscripts/ctlruns1,437 bytestests/README.mddoc3,163 bytestests/conftest.pyruns1,728 bytestests/console/clone_fixtures.jsruns33,097 bytestests/console/clone_run.jsruns54,387 bytestests/console/fixtures.jsruns46,994 bytestests/console/fn_digest.pyruns1,222 bytestests/console/paste_copy.pyruns4,064 bytestests/console/run.htmlasset1,293 bytestests/console/run.jsruns105,453 bytestests/console/run_headless.pyruns7,845 bytestests/console/skeleton.jsruns23,549 bytestests/console/skeleton_test.jsruns36,560 bytestests/fixtures/autodl_guard_0.7.1.shruns57,950 bytestests/live/autostart_probe.conf.inasset269 bytestests/live/autostart_probe.profile.inasset701 bytestests/live/check_ini.pyruns764 bytestests/live/cpu_duty.pyruns995 bytestests/live/disk_write.shruns1,551 bytestests/live/export_logs.pyruns3,028 bytestests/live/fingerprint.shruns1,247 bytestests/live/gpu_duty.pyruns1,219 bytestests/live/gpu_load.shruns295 bytestests/live/jobs_done.pyruns592 bytestests/live/probe_state.pyruns2,076 bytestests/live/queries.shruns3,343 bytestests/live/sshread.shruns2,723 bytestests/live/ticket_probe.pyruns6,309 bytestests/local_tools.pyruns2,017 bytestests/store_posix_check.pyruns6,203 bytestests/stubs/fake-screenruns1,331 bytestests/stubs/nvidia-smiruns1,770 bytestests/stubs/screenruns539 bytestests/stubs/shutdownruns703 bytestests/stubs/syncruns954 bytestests/stubs/tmuxruns268 bytestests/test_analyze_samples.pyruns9,381 bytestests/test_clone.pyruns65,275 bytestests/test_clone_remote.pyruns29,051 bytestests/test_console_static.pyruns25,195 bytestests/test_ctl.pyruns111,125 bytestests/test_docs_static.pyruns40,467 bytestests/test_guard.shruns236,995 bytestests/test_live_scripts.pyruns29,136 bytestests/test_local_tools.pyruns5,644 bytestests/test_store.pyruns96,931 bytestests/test_ticket.pyruns28,786 bytestests/test_transfer_wsl.pyruns20,442 bytes
Read SKILL.md
# AutoDL 开关机
本 skill 让当前对话里的 AI 自己完成 AutoDL 普通容器实例的有卡开机、无卡开机、关机与模式切换,不用人去点。它只提供方法。什么时候开、开哪种模式、什么时候关,由你按任务和用户的习惯决定,文中的例子只作参考。三样东西配合着用。
- **你是主控。** 开机在控制台网页上做,照 `reference/console.md`(下称手册;第 13、15、16、17 节在 `reference/console-more.md`)一步步来;其余经本机助手 `ctl` 走 SSH
- **守护程序兜底。** 实例上的守护按实际占用判断空闲,空闲满用户定的时长就关机。你的会话断了或忘了关,它照样关
- **控制台定时关机是可选的硬上限。** 用户选了才设,到点由平台直接关机,会切断任务。不由用户选的只有开机流程第 2 步的临时定时
对用户少打扰,只汇报结果(见"汇报")。不要另写守护脚本或 `sleep; shutdown` 之类的兜底。
## 平台事实
- 普通容器实例没有开机 API,开机只能在控制台网页上点。不用任何令牌或非公开接口;只有用户开启了自动克隆时,页面脚本才从页面自己的数据里读新实例的 SSH 主机与端口,不读密码
- 在实例里执行 `/usr/bin/shutdown` 就关机并停止计费,由守护程序与 ctl 调用
- 按量计费从开机到关机按秒算,与是否用 GPU 无关。关机后 GPU 不预留,再开有卡时主机可能没有空闲 GPU。数据保留到实例被释放View the complete source on GitHubSkills included
- autodl-autogpu
Repository facts
- License
- MIT
- Created
- Oct 2, 2026
- Last pushed
- Oct 7, 2026
- Forks
- 0
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 5, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 4 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 89 dangerous shell commandsin 13 files: tests/test_guard.sh:79 scripts/autodl_guard.sh:676 scripts/autodl_ctl.py:2999 and 10 more
- 81 network referencesin 25 files: tests/console/skeleton.js:8 reference/clone-page.js:1 reference/console-clone.min.js:6 and 22 more
- 2 obfuscation signalsin 1 file: tests/test_analyze_samples.py:89
- No instruction overrides
- 52 executable scriptsin 52 files: dev/analyze_samples.py:1 reference/clone-page.js:1 reference/clone-page.min.js:1 and 49 more
- 52 references to secretsin 13 files: scripts/autodl_guard.sh:675 tests/store_posix_check.py:25 scripts/autodl_ctl.py:164 and 10 more
- No requests to vote in Hot
Show all 276 signals by file
README.cn.md
- Network accessline 76
git clone https://github.com/grenbel/autodl-autogpu ~/.claude/skills/autodl-autogpu
README.md
- Network accessline 76
git clone https://github.com/grenbel/autodl-autogpu ~/.claude/skills/autodl-autogpu
SKILL.md
assets/demo.cn.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="440" viewBox="0 0 1280 440" role="img" aria-labelledby="t d">
assets/demo.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="440" viewBox="0 0 1280 440" role="img" aria-labelledby="t d">
assets/hero.cn.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="420" viewBox="0 0 1280 420" role="img" aria-labelledby="t d">
assets/hero.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="420" viewBox="0 0 1280 420" role="img" aria-labelledby="t d">
assets/nogpu.cn.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="480" viewBox="0 0 1280 480" role="img" aria-labelledby="t d">
assets/nogpu.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="480" viewBox="0 0 1280 480" role="img" aria-labelledby="t d">
assets/parts.cn.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="620" viewBox="0 0 1280 620" role="img" aria-labelledby="t d">
assets/parts.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="620" viewBox="0 0 1280 620" role="img" aria-labelledby="t d">
assets/safety.cn.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="460" viewBox="0 0 1280 460" role="img" aria-labelledby="t d">
assets/safety.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="460" viewBox="0 0 1280 460" role="img" aria-labelledby="t d">
dev/analyze_samples.py
- Executable scriptline 1
#!/usr/bin/env python3
reference/clone-page.js
- Network accessline 1
// reference/clone-page.js: the page script for the AutoDL console's page that creates a cloned instance // (https://www.autodl.com/cloneInstance?...), which the clone dialog of the instance list leads to. It is used only when - Executable scriptline 1
Executable file - Network accessline 2
// (https://www.autodl.com/cloneInstance?...), which the clone dialog of the instance list leads to. It is used only when - Network accessline 30
var HOST_SHAPE = TEST ? /^(abcd|wxyz|mnop|qrst|efgh)\d{6}$/ : /^[0-9a-z]{10}$/; var modeError = mode !== undefined && !TEST ? 'unknown mode' : TEST && !(location.origin === 'https://example.com' || location.protocol === 'file:') ? 'te - Network accessline 31
var modeError = mode !== undefined && !TEST ? 'unknown mode' : TEST && !(location.origin === 'https://example.com' || location.protocol === 'file:') ? 'test mode works only on the offline test page' : ''; - Network accessline 32
: TEST && !(location.origin === 'https://example.com' || location.protocol === 'file:') ? 'test mode works only on the offline test page' - Network accessline 133
function onConsole() { return TEST ? location.origin === 'https://example.com' || location.protocol === 'file:' : location.origin === 'https://www.autodl.com'; - Network accessline 134
return TEST ? location.origin === 'https://example.com' || location.protocol === 'file:' : location.origin === 'https://www.autodl.com';
reference/clone-page.min.js
- Executable scriptline 1
Executable file - Network accessline 7
var HOST_SHAPE = TEST ? /^(abcd|wxyz|mnop|qrst|efgh)\d{6}$/ : /^[0-9a-z]{10}$/; var modeError = mode !== undefined && !TEST ? 'unknown mode' : TEST && !(location.origin === 'https://example.com' || location.protocol === 'file:') ? 'test mod - Network accessline 8
var modeError = mode !== undefined && !TEST ? 'unknown mode' : TEST && !(location.origin === 'https://example.com' || location.protocol === 'file:') ? 'test mode works only on the offline test page' : ''; - Network accessline 9
: TEST && !(location.origin === 'https://example.com' || location.protocol === 'file:') ? 'test mode works only on the offline test page' - Network accessline 96
function whole(x, min) { return typeof x === 'number' && x % 1 === 0 && x >= min && x < 100000; } function onConsole() { return TEST ? location.origin === 'https://example.com' || location.protocol === 'file:' : location.origin === 'https:/ - Network accessline 97
function onConsole() { return TEST ? location.origin === 'https://example.com' || location.protocol === 'file:' : location.origin === 'https://www.autodl.com'; } - Network accessline 98
return TEST ? location.origin === 'https://example.com' || location.protocol === 'file:' : location.origin === 'https://www.autodl.com';
reference/clone.md
- Access to secretsline 148
[Credential-related source omitted]
reference/console-clone.min.js
- Executable scriptline 1
Executable file - Network accessline 6
var ID_SHAPE = TEST ? /^(abcd|wxyz|mnop|qrst|efgh)\d{6}-\d{4}[a-z]{4}$/ : /^[0-9a-z]{10}-[0-9a-z]{8}$/; var modeError = mode !== undefined && !TEST ? 'unknown mode' : TEST && !(location.origin === 'https://example.com' || location.protocol - Network accessline 7
var modeError = mode !== undefined && !TEST ? 'unknown mode' : TEST && !(location.origin === 'https://example.com' || location.protocol === 'file:') ? 'test mode works only on the offline test page' : ''; - Network accessline 8
: TEST && !(location.origin === 'https://example.com' || location.protocol === 'file:') ? 'test mode works only on the offline test page' - Network accessline 81
} function urlOk() { if (TEST) return location.origin === 'https://example.com' || location.protocol === 'file:'; - Network accessline 82
function urlOk() { if (TEST) return location.origin === 'https://example.com' || location.protocol === 'file:'; return location.origin === 'https://www.autodl.com' && /^\/console\/instance\/list\/?$/.test(location.pathname); - Network accessline 83
if (TEST) return location.origin === 'https://example.com' || location.protocol === 'file:'; - Network accessline 84
return location.origin === 'https://www.autodl.com' && /^\/console\/instance\/list\/?$/.test(location.pathname);
reference/console.js
- Network accessline 1
// reference/console.js: the page script for the AutoDL console's instance list (https://www.autodl.com/console/instance/list). - Executable scriptline 1
Executable file - Network accessline 37
var ID_SHAPE = TEST ? /^(abcd|wxyz|mnop|qrst|efgh)\d{6}-\d{4}[a-z]{4}$/ : /^[0-9a-z]{10}-[0-9a-z]{8}$/; var modeError = mode !== undefined && !TEST ? 'unknown mode' : TEST && !(location.origin === 'https://example.com' || location.pro - Network accessline 38
var modeError = mode !== undefined && !TEST ? 'unknown mode' : TEST && !(location.origin === 'https://example.com' || location.protocol === 'file:') ? 'test mode works only on the offline test page' : ''; - Network accessline 39
: TEST && !(location.origin === 'https://example.com' || location.protocol === 'file:') ? 'test mode works only on the offline test page' - Network accessline 125
function urlOk() { if (TEST) return location.origin === 'https://example.com' || location.protocol === 'file:'; - Network accessline 126
if (TEST) return location.origin === 'https://example.com' || location.protocol === 'file:'; - Network accessline 127
return location.origin === 'https://www.autodl.com' && /^\/console\/instance\/list\/?$/.test(location.pathname);
reference/console.md
- Network accessline 25
1. 用浏览器工具的 `navigate` 打开或刷新实例列表 `https://www.autodl.com/console/instance/list`。用哪个标签页都行,在后台、面板隐藏着也行;已有开着 AutoDL 的标签页就用它,里面可能还存着核对过的脚本。每次来用控制台、开始一串操作之前刷新一次(一串里上一个操作结算完了接着做下一个,不用再刷新),因为开得久的页面上数据可能是旧的(实测旧过约 2.5 小时),刷新也会清掉上次的脚本和残留的框。刷新后表格可能还在加载 - Network accessline 95
- `rows()` 读所有行,`snapshot()` 读所有行的稳定部分(ID、状态、模式、定时、按钮),`dialog()` 读当前可见的框与选择器。 - 释放倒计时剩不到 3 天就提醒用户。 - 余额在控制台主页 `https://www.autodl.com/console/homepage/personal` 的"费用信息"里("我的余额"的"可用"),用 `get_page_text` 读,只取这一个数。读余额要离开实例列表,页面脚本会跟着丢掉,所以放在第 2 - Network accessline 96
- 释放倒计时剩不到 3 天就提醒用户。 - 余额在控制台主页 `https://www.autodl.com/console/homepage/personal` 的"费用信息"里("我的余额"的"可用"),用 `get_page_text` 读,只取这一个数。读余额要离开实例列表,页面脚本会跟着丢掉,所以放在第 2 节之前读;读完回到实例列表,从第 2 节做起。 - 欠费、余额不足与维护的提醒没有实测过,它们的位置与原文本手册给不出。读主页时(`get_page_text - Network accessline 97
- 余额在控制台主页 `https://www.autodl.com/console/homepage/personal` 的"费用信息"里("我的余额"的"可用"),用 `get_page_text` 读,只取这一个数。读余额要离开实例列表,页面脚本会跟着丢掉,所以放在第 2 节之前读;读完回到实例列表,从第 2 节做起。 - Network accessline 222
- 收支明细在 `https://www.autodl.com/console/cost/incomeExpend`(左侧菜单"费用"展开后的"收支明细"),只读,用 `get_page_text`(`max_chars` 给够,一页 100 行约一万多字;`find` 最多只回 20 条,行多时会漏)。 - Network accessline 223
- 它每页默认只有 10 行,账号下所有实例的行混在一起、按时间倒排,表格下面的"共 N 条"是总行数。别的实例也在扣费时,要找的行很快就不在第一页了。翻页不点页面上的任何东西,直接用 `navigate` 打开带参数的地址 `https://www.autodl.com/console/cost/incomeExpend?page_size=100&page_index=<页码>`(2026-10-02 实测,每页 100 行可用),从第 1 页读起,读到要找的那一笔,或读
reference/console.min.js
- Executable scriptline 1
Executable file - Network accessline 6
var ID_SHAPE = TEST ? /^(abcd|wxyz|mnop|qrst|efgh)\d{6}-\d{4}[a-z]{4}$/ : /^[0-9a-z]{10}-[0-9a-z]{8}$/; var modeError = mode !== undefined && !TEST ? 'unknown mode' : TEST && !(location.origin === 'https://example.com' || location.protocol - Network accessline 7
var modeError = mode !== undefined && !TEST ? 'unknown mode' : TEST && !(location.origin === 'https://example.com' || location.protocol === 'file:') ? 'test mode works only on the offline test page' : ''; - Network accessline 8
: TEST && !(location.origin === 'https://example.com' || location.protocol === 'file:') ? 'test mode works only on the offline test page' - Network accessline 81
} function urlOk() { if (TEST) return location.origin === 'https://example.com' || location.protocol === 'file:'; - Network accessline 82
function urlOk() { if (TEST) return location.origin === 'https://example.com' || location.protocol === 'file:'; return location.origin === 'https://www.autodl.com' && /^\/console\/instance\/list\/?$/.test(location.pathname); - Network accessline 83
if (TEST) return location.origin === 'https://example.com' || location.protocol === 'file:'; - Network accessline 84
return location.origin === 'https://www.autodl.com' && /^\/console\/instance\/list\/?$/.test(location.pathname);
reference/ssh.md
- Access to secretsline 6
[Credential-related source omitted] - Access to secretsline 50
[Credential-related source omitted] - Access to secretsline 52
[Credential-related source omitted] - Access to secretsline 53
[Credential-related source omitted] - Access to secretsline 60
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted]
scripts/autodl_ctl.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 164
[Credential-related source omitted] - Access to secretsline 178
[Credential-related source omitted] - Access to secretsline 203
[Credential-related source omitted] - Access to secretsline 433
[Credential-related source omitted] - Dangerous shell operationline 2999
trap 'rm -f -- "$tmp"' EXIT - Dangerous shell operationline 3042
trap 'rm -f -- "$tmp"' EXIT - Dangerous shell operationline 3092
rm -f -- "$T" - Dangerous shell operationline 3109
rm -f -- "$T" - Access to secretsline 3783
[Credential-related source omitted] - Dangerous shell operationline 3867
"trap 'rm -f -- \"$T\"' EXIT && cat > \"$T\" && " - Dangerous shell operationline 4380
"rm -rf -- \"$T\"' EXIT", - Access to secretsline 4764
[Credential-related source omitted] - Access to secretsline 5042
[Credential-related source omitted]
scripts/autodl_guard.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 3
# # It only decides WHEN to call AutoDL's official shutdown command # (/usr/bin/shutdown, see https://www.autodl.com/docs/save_money/). It runs inside the - Network accessline 4
# It only decides WHEN to call AutoDL's official shutdown command # (/usr/bin/shutdown, see https://www.autodl.com/docs/save_money/). It runs inside the # instance, so it does not depend on SSH, whose connections AutoDL's public ports - Network accessline 5
# (/usr/bin/shutdown, see https://www.autodl.com/docs/save_money/). It runs inside the - Access to secretsline 675
[Credential-related source omitted] - Dangerous shell operationline 676
nolock rm -f "$ST/prep" || log "cannot remove the off-now preparation; it is void once over ${PREP_MAX}s old (counted on the uptime)" - Access to secretsline 702
[Credential-related source omitted] - Dangerous shell operationline 898
if [ "$PREP_STATE" = void ] && nolock rm -f "$ST/prep"; then - Access to secretsline 899
[Credential-related source omitted] - Dangerous shell operationline 1309
nolock rm -f "$ST/boot.${f[2]}" || die "arm: cannot drop the settings kept by an arm cut short" - Dangerous shell operationline 1311
nolock rm -f "$ST/boot.gpu" "$ST/boot.nogpu" || die "arm: cannot drop the settings kept by an arm cut short" - Dangerous shell operationline 1358
nolock rm -f "$ST/signals" "$ST/dry_run_fired" || die "arm: cannot remove the last check's results" - Dangerous shell operationline 1369
nolock rm -f "$ST/arm_incomplete" || die "cannot finish the arm: $ST/arm_incomplete cannot be removed" - Dangerous shell operationline 1851
nolock rm -f "$OLD_HOOK" 2> /dev/null - Dangerous shell operationline 1918
nolock rm -f "$tmp" - Dangerous shell operationline 1950
nolock rm -f "$HOOK" 2> /dev/null - Dangerous shell operationline 1986
rm -f "$tmp" - Dangerous shell operationline 1990
rm -f "$tmp" - Access to secretsline 2311
[Credential-related source omitted] - Access to secretsline 2312
[Credential-related source omitted] - Access to secretsline 2332
[Credential-related source omitted] - Access to secretsline 2342
[Credential-related source omitted] - Access to secretsline 2346
[Credential-related source omitted] - Access to secretsline 2360
[Credential-related source omitted] - Access to secretsline 2372
[Credential-related source omitted]
scripts/ctl
- Executable scriptline 1
#!/usr/bin/env bash
tests/conftest.py
- Executable scriptline 1
Executable file
tests/console/clone_fixtures.js
- Executable scriptline 1
Executable file
tests/console/clone_run.js
- Network accessline 1
// Offline test for reference/clone-page.js on the fake page of tests/console/clone_fixtures.js. The short way is // python tests/console/run_headless.py, which runs it in headless Edge or Chrome, once focused and once as in a hidden // pan - Executable scriptline 1
Executable file - Network accessline 2
// python tests/console/run_headless.py, which runs it in headless Edge or Chrome, once focused and once as in a hidden // pane. By hand it runs on https://example.com (or a file:// page), in three calls: // 1. paste tests/console/clone_f - Network accessline 3
// pane. By hand it runs on https://example.com (or a file:// page), in three calls:
tests/console/fixtures.js
- Executable scriptline 1
Executable file
tests/console/fn_digest.py
- Executable scriptline 1
Executable file
tests/console/paste_copy.py
- Executable scriptline 1
Executable file
tests/console/run.js
- Network accessline 1
// Offline test for reference/console.js on the fake pages of tests/console/fixtures.js. The short way is // python tests/console/run_headless.py, which runs it in headless Edge or Chrome, once focused and once as in a hidden // pane. By ha - Executable scriptline 1
Executable file - Network accessline 2
// python tests/console/run_headless.py, which runs it in headless Edge or Chrome, once focused and once as in a hidden // pane. By hand it runs on https://example.com (or a file:// page such as tests/console/run.html), in three calls: // - Network accessline 3
// pane. By hand it runs on https://example.com (or a file:// page such as tests/console/run.html), in three calls:
tests/console/run_headless.py
tests/console/skeleton.js
- Executable scriptline 1
Executable file - Network accessline 8
// output, only counted. Full scans stop at a budget of elements read, so a huge page cannot stall the console. // It reads the DOM only: no writes, no events, no network, no storage, no navigation. // The second argument exists only for th - Network accessline 10
// The second argument exists only for the offline decoy test (tests/console/skeleton_test.js) on https://example.com. - Network accessline 16
if (typeof targetId !== 'string' || !ID_RE.test(targetId)) throw new Error('not an instance ID'); if (mode === 'offline-decoy-test') { if (location.origin !== 'https://example.com' || targetId !== TEST_ID) { - Network accessline 17
if (mode === 'offline-decoy-test') { if (location.origin !== 'https://example.com' || targetId !== TEST_ID) { throw new Error('the test mode runs only on https://example.com with the fake ID'); - Network accessline 18
if (location.origin !== 'https://example.com' || targetId !== TEST_ID) { - Network accessline 19
throw new Error('the test mode runs only on https://example.com with the fake ID'); - Network accessline 21
} else if (mode !== undefined) { throw new Error('unknown mode'); } else if (location.origin !== 'https://www.autodl.com' || location.pathname !== '/console/instance/list') { - Network accessline 22
throw new Error('unknown mode'); } else if (location.origin !== 'https://www.autodl.com' || location.pathname !== '/console/instance/list') { throw new Error('not the instance list'); - Network accessline 23
} else if (location.origin !== 'https://www.autodl.com' || location.pathname !== '/console/instance/list') {
tests/console/skeleton_test.js
- Network accessline 1
// Offline test for tests/console/skeleton.js, run on https://example.com (a static page without scripts). - Executable scriptline 1
Executable file - Network accessline 241
'<input class="el-input__inner" value="DECOY-ALPHA" placeholder="DECOY-XI" aria-label="DECOY-OMICRON" ' + 'role="private-name" aria-expanded="Alice" type="secretname">' + '<a href="https://decoy.example/DECOY-BETA">查看详情</a><img - Network accessline 242
'role="private-name" aria-expanded="Alice" type="secretname">' + '<a href="https://decoy.example/DECOY-BETA">查看详情</a><img src="data:,DECOY-GAMMA" alt="DECOY-ZETA">' + '<iframe srcdoc="DECOY-RHO"></iframe><script>var DECOY_THETA - Network accessline 243
'<a href="https://decoy.example/DECOY-BETA">查看详情</a><img src="data:,DECOY-GAMMA" alt="DECOY-ZETA">' +
tests/fixtures/autodl_guard_0.7.1.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 3
# # It only decides WHEN to call AutoDL's official shutdown command # (/usr/bin/shutdown, see https://www.autodl.com/docs/save_money/). It runs inside the - Network accessline 4
# It only decides WHEN to call AutoDL's official shutdown command # (/usr/bin/shutdown, see https://www.autodl.com/docs/save_money/). It runs inside the # instance, so it does not depend on SSH, whose connections AutoDL's public ports - Network accessline 5
# (/usr/bin/shutdown, see https://www.autodl.com/docs/save_money/). It runs inside the - Dangerous shell operationline 691
nolock rm -f "$ST/dry_run_fired" - Dangerous shell operationline 694
nolock rm -f "$ST/arm_incomplete" || die "cannot finish the arm: $ST/arm_incomplete cannot be removed" - Dangerous shell operationline 743
rm -f "$tmp" - Dangerous shell operationline 747
rm -f "$tmp"
tests/live/check_ini.py
- Executable scriptline 1
Executable file
tests/live/cpu_duty.py
- Executable scriptline 1
Executable file
tests/live/disk_write.sh
tests/live/export_logs.py
- Executable scriptline 1
Executable file
tests/live/fingerprint.sh
- Executable scriptline 1
Executable file
tests/live/gpu_duty.py
- Executable scriptline 1
Executable file
tests/live/gpu_load.sh
- Executable scriptline 1
Executable file
tests/live/jobs_done.py
- Executable scriptline 1
Executable file
tests/live/probe_state.py
- Executable scriptline 1
Executable file
tests/live/queries.sh
- Executable scriptline 1
Executable file
tests/live/sshread.sh
- Executable scriptline 1
Executable file - Dangerous shell operationline 42
3) rm -f "$out.tmp"; exit 3 ;; - Dangerous shell operationline 43
124 | 255) rm -f "$out.tmp"; echo "sshread: try $i of $tries: ssh failed or timed out (exit $rc)" >&2 ;; - Dangerous shell operationline 44
*) rm -f "$out.tmp"; echo "sshread: the remote command exited $rc" >&2; exit 1 ;;
tests/live/ticket_probe.py
tests/local_tools.py
tests/store_posix_check.py
- Executable scriptline 1
Executable file - Access to secretsline 25
[Credential-related source omitted] - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 91
[Credential-related source omitted] - Access to secretsline 102
[Credential-related source omitted] - Access to secretsline 110
[Credential-related source omitted] - Access to secretsline 182
[Credential-related source omitted] - Access to secretsline 193
[Credential-related source omitted] - Access to secretsline 195
[Credential-related source omitted]
tests/stubs/fake-screen
- Executable scriptline 1
#!/usr/bin/env bash
tests/stubs/nvidia-smi
- Executable scriptline 1
#!/usr/bin/env bash
tests/stubs/screen
- Executable scriptline 1
#!/usr/bin/env bash
tests/stubs/shutdown
tests/stubs/sync
- Executable scriptline 1
#!/usr/bin/env bash
tests/stubs/tmux
- Executable scriptline 1
#!/usr/bin/env bash
tests/test_analyze_samples.py
tests/test_clone.py
tests/test_clone_remote.py
tests/test_console_static.py
- Executable scriptline 1
Executable file
tests/test_ctl.py
- Executable scriptline 1
Executable file - Dangerous shell operationline 189
reason = "it's a \"test\" $HOME; rm -rf /" - Access to secretsline 516
[Credential-related source omitted] - Access to secretsline 528
[Credential-related source omitted] - Access to secretsline 541
[Credential-related source omitted] - Access to secretsline 883
[Credential-related source omitted] - Access to secretsline 1050
[Credential-related source omitted] - Access to secretsline 1751
[Credential-related source omitted] - Access to secretsline 1769
[Credential-related source omitted]
tests/test_docs_static.py
tests/test_guard.sh
- Executable scriptline 1
#!/usr/bin/env bash - Dangerous shell operationline 79
rm -rf "$T" 2> /dev/null && return 0 - Dangerous shell operationline 82
rm -rf "$T" - Dangerous shell operationline 652
rm -f "$STUB_DIR/shutdown_fail_always" - Dangerous shell operationline 690
rm -f "$STUB_DIR/hang" - Dangerous shell operationline 1126
rm -f "$STUB_DIR/shutdown_hang" - Dangerous shell operationline 1145
rm -f "$STUB_DIR/hang" - Dangerous shell operationline 1269
for n in cat date mv rm mkdir dirname sleep seq sed tr grep tail head awk cut timeout sync env setsid nohup \ - Dangerous shell operationline 1343
rm -f "$STUB_DIR/cg/cpu.stat" "$STUB_DIR/cg/io.stat" - Dangerous shell operationline 1461
rm -f "$STUB_DIR/hang" - Dangerous shell operationline 1473
rm -f "$STUB_DIR/uptime" - Dangerous shell operationline 1511
rm -f "$AUTODL_GUARD_HOME/state2/daemon_pid" # the pid is fake: teardown must not signal it - Dangerous shell operationline 1530
rm -f "$STUB_DIR/sync_hang" # the stub still waiting in the background ends - Dangerous shell operationline 1570
rm -f "$STUB_DIR/sync_hang" - Dangerous shell operationline 1586
rm -f "$STUB_DIR/sync_hang" - Dangerous shell operationline 1605
rm -f "$STUB_DIR/sync_hang" "$STUB_DIR/shutdown_fail_always" - Dangerous shell operationline 1723
rm -f "$AUTODL_GUARD_HOME/state2/schema" # what a 0.7 state looks like to 0.8 - Dangerous shell operationline 1835
rm -f "$STUB_DIR/cg/cpu.stat" - Dangerous shell operationline 1889
rm -f "$STUB_DIR/hang" - Dangerous shell operationline 2118
rm -f "$STUB_DIR/shutdown_fail" - Dangerous shell operationline 2158
rm -f "$AUTODL_GUARD_HOME/state2/schema" - Dangerous shell operationline 2230
rm -f "$AUTODL_GUARD_HOME/state2/shutdown_boot" # as 0.7 left it: the arm's boot stands in - Dangerous shell operationline 2538
rm -f "$STUB_DIR/hang" - Dangerous shell operationline 2627
rm -f "$STUB_DIR/hang" - Dangerous shell operationline 3547
missing) rm -f "$AUTODL_GUARD_HOME/state2/arm_gen" ;; - Dangerous shell operationline 3580
rm -f "$STUB_DIR/hang" - Dangerous shell operationline 3700
rm -f "$STUB_DIR/hang" - Dangerous shell operationline 3783
mkdir "$AUTODL_GUARD_HOME/state2/arm_incomplete" # mv puts the new marker inside it, rm -f cannot remove it - Dangerous shell operationline 3917
rm -f "$STUB_DIR/shutdown_fail_always" - Dangerous shell operationline 4011
rm -f "$STUB_DIR/hang" # status asks nvidia-smi too - Dangerous shell operationline 4019
rm -f "$STUB_DIR/hang" - Dangerous shell operationline 4104
rm -f "$AUTODL_TEST_UPTIME" # the uptime cannot be read - Dangerous shell operationline 4139
mkdir "$AUTODL_GUARD_HOME/state2/arm_incomplete" # mv puts the new marker inside it, rm -f cannot remove it - Dangerous shell operationline 4232
rm -f "$STUB_DIR/shutdown_fail_always" - Dangerous shell operationline 4252
rm -f "$AUTODL_GUARD_HOME/state2/prep" - Dangerous shell operationline 4271
rm -rf "$T/bb" # a fresh barrier: an earlier boot's go marker must not let this one through - Dangerous shell operationline 4298
rm -f "$STUB_DIR/shutdown_fail_always" - Dangerous shell operationline 4307
rm -rf "$T/bb" - Dangerous shell operationline 4323
rm -f "$AUTODL_GUARD_HOME/state2/prep" - Dangerous shell operationline 4338
rm -f "$STUB_DIR/shutdown_fail_always" - Dangerous shell operationline 4774
rm -f "$T/done" "$T/returned" - Dangerous shell operationline 4777
rm -f "$T/g.sh" - Dangerous shell operationline 4821
rm -f "$STUB_DIR/shutdown_fail_always" - Dangerous shell operationline 4845
rm -f "$AUTODL_TEST_UPTIME" - Dangerous shell operationline 5027
rm -f "$STUB_DIR/cg/cpu.stat" - Dangerous shell operationline 5094
rm -f "$AUTODL_GUARD_HOME/state2/schema" # from here on the state cannot be used - Dangerous shell operationline 5117
rm -f "$AUTODL_GUARD_HOME/state2/schema" - Dangerous shell operationline 5130
rm -f "$AUTODL_GUARD_HOME/state2/schema" - Dangerous shell operationline 5167
rm -f "$AUTODL_GUARD_HOME/state2/schema" - Dangerous shell operationline 5182
rm -f "$AUTODL_GUARD_HOME/state2/schema" - Dangerous shell operationline 5206
rm -f "$AUTODL_GUARD_HOME/state2/schema" - Dangerous shell operationline 5244
rm -f "$AUTODL_GUARD_HOME/state2/schema" - Dangerous shell operationline 5245
rm -f "$AUTODL_GUARD_HOME/state2/dry_run_fired"
tests/test_live_scripts.py
tests/test_local_tools.py
- Executable scriptline 1
Executable file
tests/test_store.py
tests/test_ticket.py
tests/test_transfer_wsl.py
- Executable scriptline 1
Executable file - Dangerous shell operationline 146
f"printf x > {root}/src/code/sub/run.sh && chmod 777 {root}/src/code/sub && chmod 666 {root}/src/code/a.txt && " - Dangerous shell operationline 289
remote.sh(f"rm {m.g}/cg/cpu.stat") - Dangerous shell operationline 293
remote.sh(f"rm -rf {m.g}") - Network accessline 307
def test_off_raw_keeps_the_script_from_what_its_checks_start(remote): greedy = "#!/bin/sh\ncat > /dev/null\necho 'No Sockets found in /run/screen/S-root.'\nexit 1\n" # it reads its stdin - Network accessline 308
greedy = "#!/bin/sh\ncat > /dev/null\necho 'No Sockets found in /run/screen/S-root.'\nexit 1\n" # it reads its stdin - Network accessline 336
path = remote.root + "/screen_out" subprocess.run([*WSL, "bash", "-c", f"cat > {path}"], input=out, check=True) return f"#!/bin/sh\ncat {path}\nexit {rc}\n" - Network accessline 338
return f"#!/bin/sh\ncat {path}\nexit {rc}\n"
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Combined signals: 1 fact
- Reads SSH keys, and the same file sends data over the network or runs a command (line 2999)scripts/autodl_ctl.py:178High confidence
Declared and executed: 8 facts
- Contacts www.autodl.com, which SKILL.md, the README and the plugin manifest do not mentionreference/clone-page.js:134High confidence
- Contacts www.autodl.com, which SKILL.md, the README and the plugin manifest do not mentionreference/clone-page.min.js:98High confidence
- Contacts www.autodl.com, which SKILL.md, the README and the plugin manifest do not mentionreference/console-clone.min.js:84High confidence
- Contacts www.autodl.com, which SKILL.md, the README and the plugin manifest do not mentionreference/console.js:127High confidence
- Contacts www.autodl.com, which SKILL.md, the README and the plugin manifest do not mentionreference/console.min.js:84High confidence
- Uses SSH keys, which the skill description does not mentionscripts/autodl_ctl.py:178High confidence
- Uses SSH keys, which the skill description does not mentionscripts/autodl_ctl.py:4764High confidence
- Uses SSH keys, which the skill description does not mentionscripts/autodl_ctl.py:5042High confidence
Signal confidence: 266 facts
- Network access in code of documentationREADME.cn.md:76Low confidence
- Network access in code of documentationREADME.md:76Low confidence
- Access to secrets in prose of the SKILL.md: reads a credential storeSKILL.md:63Low confidence
- Access to secrets in prose of the SKILL.md: reads a credential storeSKILL.md:73Low confidence
- Access to secrets in prose of the SKILL.md: reads a credential storeSKILL.md:177Low confidence
- Executable script in code of a file that runsdev/analyze_samples.py:1High confidence
- Network access in a comment of a file that runsreference/clone-page.js:1Low confidence
- Executable script in a comment of a file that runsreference/clone-page.js:1Low confidence
- Network access in a comment of a file that runsreference/clone-page.js:2Low confidence
- Network access in code of a file that runsreference/clone-page.js:30High confidence
- Network access in code of a file that runsreference/clone-page.js:31High confidence
- Network access in code of a file that runsreference/clone-page.js:32High confidence
- Network access in code of a file that runsreference/clone-page.js:133High confidence
- Network access in code of a file that runsreference/clone-page.js:134High confidence
- Executable script in code of a file that runsreference/clone-page.min.js:1High confidence
- Network access in code of a file that runsreference/clone-page.min.js:7High confidence
- Network access in code of a file that runsreference/clone-page.min.js:8High confidence
- Network access in code of a file that runsreference/clone-page.min.js:9High confidence
- Network access in code of a file that runsreference/clone-page.min.js:96High confidence
- Network access in code of a file that runsreference/clone-page.min.js:97High confidence
- Network access in code of a file that runsreference/clone-page.min.js:98High confidence
- Access to secrets in prose of documentation: reads a credential storereference/clone.md:148Low confidence
- Executable script in code of a file that runsreference/console-clone.min.js:1High confidence
- Network access in code of a file that runsreference/console-clone.min.js:6High confidence
- Network access in code of a file that runsreference/console-clone.min.js:7High confidence
- Network access in code of a file that runsreference/console-clone.min.js:8High confidence
- Network access in code of a file that runsreference/console-clone.min.js:81High confidence
- Network access in code of a file that runsreference/console-clone.min.js:82High confidence
- Network access in code of a file that runsreference/console-clone.min.js:83High confidence
- Network access in code of a file that runsreference/console-clone.min.js:84High confidence
- Network access in a comment of a file that runsreference/console.js:1Low confidence
- Executable script in a comment of a file that runsreference/console.js:1Low confidence
- Network access in code of a file that runsreference/console.js:37High confidence
- Network access in code of a file that runsreference/console.js:38High confidence
- Network access in code of a file that runsreference/console.js:39High confidence
- Network access in code of a file that runsreference/console.js:125High confidence
- Network access in code of a file that runsreference/console.js:126High confidence
- Network access in code of a file that runsreference/console.js:127High confidence
- Network access in prose of documentationreference/console.md:25Low confidence
- Network access in prose of documentationreference/console.md:95Low confidence
- Network access in prose of documentationreference/console.md:96Low confidence
- Network access in prose of documentationreference/console.md:97Low confidence
- Network access in prose of documentationreference/console.md:222Low confidence
- Network access in prose of documentationreference/console.md:223Low confidence
- Executable script in code of a file that runsreference/console.min.js:1High confidence
- Network access in code of a file that runsreference/console.min.js:6High confidence
- Network access in code of a file that runsreference/console.min.js:7High confidence
- Network access in code of a file that runsreference/console.min.js:8High confidence
- Network access in code of a file that runsreference/console.min.js:81High confidence
- Network access in code of a file that runsreference/console.min.js:82High confidence
and 216 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.