Sno Station
Sno Station은 AI 에이전트를 하나의 팀으로 묶는 오픈소스 워크스테이션으로, 로컬 머신에서 에이전트 협업을 가능하게 함
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Runtime status line for Hermes and OpenClaw agents: model, effort, context, Codex 5h quota - in the reply, an inline button or the Telegram menu button
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A richer runtime footer for the Hermes agent gateway
and for OpenClaw (see OpenClaw version).
The stock footer is a single line at the end of each reply (gpt-5.6 · 67%). TurboFooter adds more
fields and, on Telegram, lets you choose where the footer lives, so your replies stay clean for
forwarding:
Everything is switched from the chat with /turbofooter. The stock /footer command is left untouched.
Hermes warns that this is a custom (unreviewed) source; read the code first if you like, it is two
Python files. To check it loaded:README 전문 보기 ↗A richer runtime footer for agent replies, as a plugin for both the Hermes agent gateway and OpenClaw: model, reasoning effort, context window and the Codex 5-hour quota with a reset countdown.
gpt-5.6-terra · med · 🅲 72% · ⏱ 5h: 11% · ↻ 4:42
On Telegram it also lets you choose where the footer lives, so your replies stay clean for forwarding:
| Style | What you see | Hermes | OpenClaw |
|---|---|---|---|
text | The line at the end of the reply (any channel) | ✓ | ✓ |
button | An inline button under the reply; tap it to remove it (the message itself stays clean) | ✓ | ✓ |
menu | The chat menu button left of the input field shows a compact line (🅲72% ⏱11% ↻4:42); tapping it opens a details page | ✓ | ✓ |
keyboard | A persistent reply keyboard with the footer as its only key (tapping it does nothing) | ✓ | – |
placeholder | The footer as the input-field placeholder (shown while the input is empty) | ✓ | – |
keyboard and placeholder are Hermes-only: OpenClaw plugins cannot put a reply keyboard on agent replies.
On channels other than Telegram every style falls back to text.
Everything is switched from the chat with /turbofooter. The stock footer commands are left untouched
(Hermes /footer, OpenClaw /usage; on OpenClaw turn /usage off if you want only one footer).
| Agent | Command |
|---|---|
| Hermes | hermes plugins install alexivanovvv/turbofooter |
| OpenClaw | openclaw plugins install git:alexivanovvv/turbofooter --accept-capabilities |
Then enable the plugin and restart the gateway. Both agents warn that this is an unreviewed source; read the code first if you like, it is two files per agent.
hermes plugins install alexivanovvv/turbofooter
hermes plugins enable turbofooter
systemctl --user restart hermes-gateway # or however you run `hermes gateway run`
Check it loaded:
grep "turbofooter loaded" ~/.hermes/logs/agent.log | tail -1 # expect failed=none
Update: hermes plugins update turbofooter and restart the gateway. Remove: hermes plugins remove turbofooter.
Needs OpenClaw 2026.10 or newer (tested on 2026.10.2). No npm dependencies.
openclaw plugins install git:alexivanovvv/turbofooter --accept-capabilities
openclaw plugins enable turbofooter
openclaw gateway restart # or however you run the gateway
Without a terminal (e.g. in a script) add --force to skip the confirmation. Check it loaded:
openclaw plugins inspect turbofooter --runtime # expect status loaded, hook reply_payload_sending, command turbofooter
Update: openclaw plugins update turbofooter and restart the gateway. Remove: openclaw plugins uninstall turbofooter.
OpenClaw clones the repo and loads openclaw/index.js through the root package.json and
openclaw.plugin.json (Hermes ignores both). From a local checkout use
openclaw plugins install ./turbofooter/openclaw --accept-capabilities (add --link to use the checkout in
place, then git pull and a restart are enough to update).
| Command | Effect |
|---|---|
/turbofooter | Status and help |
/turbofooter status | Status only |
/turbofooter on / off | Turn the footer on or off |
/turbofooter text|button|menu|keyboard|placeholder | Choose the style (keyboard, placeholder: Hermes only). Switching away from menu or keyboard/placeholder cleans up what that style left in the chat |
/turbofooter fields model,effort,ctx,quota_pct,quota_left | Fields of the full line |
/turbofooter menu-fields ctx,quota_pct,quota_left | Fields of the compact menu-button line |
/turbofooter url https://… | Page the menu button opens; /turbofooter url default returns to the built-in details page |
/turbofooter idle <text> | Menu button text while the footer is not on it (default /turbofooter); idle restore brings back the chat's previous button instead, idle default resets |
Settings apply from the next reply. Hermes saves them globally in config.yaml. OpenClaw saves them in
<state dir>/plugin-data/turbofooter/state.json, where they take precedence over the config; there the
command needs an authorized sender and runs without the model.
| Field | Example | Meaning |
|---|---|---|
model | gpt-5.6 | Model of the reply |
effort | med | Reasoning effort of the session (min, low, med, high, xhigh, off) |
ctx | 🅲 72% | Percent of the context window in use |
ctx_tokens | 🅲 118K/272K | Context tokens used / window size |
quota_pct | ⏱ 5h: 11% | Percent of the 5-hour quota used |
quota_left | ↻ 4:42 | Time left until the 5-hour window resets (h:mm countdown) |
quota_5h | ⏱ 11% (↻ 4:42 /5h) | Both in one field |
session_pct | 5h 11% | Older short form of quota_pct |
session_reset | ↻14:01 | Clock time of the reset (uses timezone) |
Per agent extras: on Hermes the stock fields still work (context_pct, cwd, latency, served_model,
whatever your Hermes version supports); on OpenClaw there are also context_pct and tokens
(↑118K ↓900, prompt and output tokens of the last model call).
In the menu style the button shows only about 20 characters, so it uses menu_fields with tight glyphs:
🅲72% ⏱11% ↻4:42.
The keys are the same on both agents: enabled, style, fields, menu_fields, menu_url, menu_data,
menu_idle, separator, timezone. All are optional.
Under display.runtime_footer in config.yaml (per-platform overrides under
display.platforms.<platform>.runtime_footer work too):
display:
runtime_footer:
enabled: true
fields: [model, effort, ctx, quota_pct, quota_left]
style: menu # text | button | menu | keyboard | placeholder
menu_fields: [ctx, quota_pct, quota_left]
menu_url: https://example.com/ # optional, must be https; default: built-in details page
menu_data: false # optional: append footer numbers to a custom menu_url too
menu_idle: /turbofooter # optional: menu button text when the footer is off or in another style; "restore" = previous button
separator: " · " # optional
timezone: Europe/Berlin # optional, only for session_reset; default: top-level timezone or server time
Under plugins.entries.turbofooter.config in openclaw.json:
{
plugins: {
entries: {
turbofooter: {
enabled: true,
config: {
enabled: true,
style: "menu", // text | button | menu
fields: ["model", "effort", "ctx", "quota_pct", "quota_left"],
menu_fields: ["ctx", "quota_pct", "quota_left"],
menu_url: "https://example.com/", // must be https; default: built-in details page
menu_data: false, // append footer numbers to a custom menu_url too
menu_idle: "/turbofooter", // menu button text when idle; "restore" = previous button
separator: " · ",
timezone: "Europe/Berlin" // only for session_reset
}
}
}
}
}
Telegram only lets a bot put custom text on the menu button if the button opens an https web page. By
default it opens the plugin's static details page
(source: docs/index.html). The numbers travel in the link's query string; the page has
no backend, stores nothing and sends nothing anywhere. You can host your own copy and point menu_url at
it (set menu_data: true so it still gets the numbers), or point menu_url at any page of yours, such
as your own dashboard.
When you turn the footer off or switch to another style, the menu button stays a web-app button labelled
/turbofooter (set your own label with /turbofooter idle <text>, up to 64 characters) that opens the same
page. With /turbofooter idle restore the chat's previous menu button (say, a web app you set up yourself, or
Telegram's default command menu) comes back instead: it is saved the first time the menu style takes the
button over. It is stored per bot and chat in the plugin's state.json (Hermes:
~/.hermes/plugin-data/turbofooter/, OpenClaw: <state dir>/plugin-data/turbofooter/), so with several
bots running, /turbofooter only touches the button of the bot you sent it to.
Both agents:
openai-codex provider; OpenClaw: OpenAI
OAuth). With API keys or other providers quota_* and session_* are simply left out of the line.button if you
want the numbers kept with each reply.Hermes:
keyboard and placeholder replace any other reply keyboard in the chat.WARNING in
~/.hermes/logs/agent.log and the stock footer keeps working. Check failed= in the load line after
updating Hermes.OpenClaw:
reply_payload_sending hook: OpenClaw passes the model, reasoning effort and
context use of the run with the final reply. Replies delivered from the durable queue or replayed after a
restart carry no usage data and get no footer. A reply split into several messages gets the footer once.chatgpt.com/backend-api/wham/usage, at most once a minute.button needs inline buttons enabled for the chat: channels.telegram.capabilities.inlineButtons
(dm, group, all, or allowlist, the default, which covers allowlisted senders).menu calls the Telegram Bot API itself (setChatMenuButton) with the bot token from
channels.telegram (tokenFile or botToken, per account or top-level) or TELEGRAM_BOT_TOKEN. A token
given as a SecretRef is not resolved, so menu stays inactive then.# Hermes, from a Hermes checkout (hermes-agent on sys.path)
python -m pytest path/to/turbofooter/tests
# OpenClaw
node --test openclaw/test/*.test.js
Code: Hermes plugin in the repo root (plugin.yaml, __init__.py, turbofooter.py), OpenClaw plugin in
openclaw/. If you change openclaw/openclaw.plugin.json, copy it to the root too (a test checks).
MIT, see LICENSE.