senclaw/moithub
app Đọc moithub.com (Molthub — "Where Agents Come to Compute") cho agent SenClaw. LƯU Ý: moithub.com là một TÁC PHẨM CHÂM BIẾM — một trang HTML tĩnh nhại giao diện nền tảng nội dung người lớn bằng thuật ngữ machine learning
Install
senclaw app install senclaw/moithub
Verifies sha512 and SenClaw’s signature before writing to disk.
Documentation
Moithub — SenClaw Space App
Đọc [moithub.com](https://moithub.com) ("Molthub — Where Agents Come to Compute") cho agent SenClaw: tổng quan trang, 22 danh mục, 28 "kênh" + bio, 59 mục catalogue, mục thịnh hành và các banner quảng cáo nhại — qua REST cho UI và MCP cho agent.
moithub.com là một tác phẩm châm biếm. Chính footer của trang tuyên bố: đây là satirical art project, không liên quan tới Pornhub/Aylo hay bất kỳ nền tảng nội dung người lớn nào, là parody. Trang không có API, không có tài khoản, không có video — toàn bộ "catalogue" là dữ liệu bịa nhúng sẵn trong một thẻ
<script>. App này chỉ đọc và tường thuật lại đúng như vậy.
Vì sao app không có REST client
Trang không công bố API nào. Mọi đường dẫn — /api/v1, /openapi.json, /skill.md, /llms.txt — đều trả về cùng một trang HTML 200 (catch-all), không phải endpoint. Nên cách trung thực duy nhất để "truy cập moithub.com" là tải một trang và đọc nó.
Nội dung lại được render phía client từ các literal trong một thẻ <script>: categories, channels, channelBios, videos, trendingSearches, tickerItems, adBanners. Cào DOM đã render thì cần cả một trình duyệt; đọc thẳng các literal đó thì không. Đó là việc của parse_page.
Bên trong
| Lớp | File | Ghi chú |
|---|---|---|
| Giải mã tiêu đề | src/decode.rs | Bóc lớp đánh dấu thể loại khỏi tiêu đề, trả về phát biểu ML còn lại + gloss từng khái niệm. Tất định, không LLM |
| Fetch + parser | src/moithub.rs | Tải trang, chọn thẻ <script> nội tuyến lớn nhất, đọc các literal bằng một trình đọc JS tí hon (các literal gần giống JSON nhưng key trần: {title:"…",cat:"…"} — serde_json từ chối), giải HTML entity, bỏ tag |
| Cache + REST | src/api.rs | Một Snapshot sau RwLock, refresh khi quá TTL; tải hỏng thì **giữ bản cũ và báo stale: true** thay vì trả rỗng |
| MCP server | src/mcp.rs | moithub-mcp → 8 tool moithub_*, chỉ đọc |
| Web UI | web/index.html | Một file tĩnh, không bước build |
| Skill | skills/moithub-browse | Chỉ đọc, bắt buộc nói rõ bản chất châm biếm |
| Persona | personas/moithub-scout.md | Người quan sát chỉ đọc |
Chạy trên port 4400.
Tại sao mỗi kết quả đều có trường nature
Một agent gọi moithub_videos giữa chừng một cuộc hội thoại chỉ thấy đúng kết quả tool đó. Nếu kết quả chỉ là một danh sách tiêu đề, agent rất dễ tường thuật chúng như nội dung có thật. Nên mọi tool — kể cả moithub_status khi mạng hỏng — đều kèm nature: một câu nhắc rằng trang là parody tĩnh, không API, catalogue là bịa.
Kèm theo đó là fetched_at / age_secs / stale để phân biệt "trang vừa nói thế" với "không vào được trang, đây là bản cache một tiếng trước".
Giải tiêu đề: một phép trừ, không phải suy diễn
Tiêu đề trên trang trông như câu đố nhưng theo một công thức cố định:
tiêu đề = [một phát biểu ML đúng về mặt kỹ thuật] + [bộ đánh dấu thể loại vay mượn]Nửa ML luôn đúng nghĩa đen; toàn bộ hàm ý hai nghĩa nằm ở lớp phủ lên trên. Nên giải = bóc lớp đó ra:
Multi-Head Attention with 96 Heads Simultaneously [EXTREME]
markers : EXTREME, Simultaneously (cường điệu)
technical: Multi-Head Attention with 96 Heads
concepts : multi-head attention → attention chạy song song nhiều 'đầu'…Vì tập đánh dấu là tập đóng (~80 khuôn, dùng đi dùng lại trên cả 59 mục), việc này khớp chuỗi là đủ — moithub_explain không gọi LLM và cho kết quả tất định. Đo trên toàn bộ catalogue: 59/59 mục tra được ít nhất một khái niệm, trung bình 1,7 lớp đánh dấu / 1,8 khái niệm mỗi mục.
Hai chỗ cần biết khi đọc kết quả: technical là phần dư, không phải câu viết lại — nguồn chuẩn để hiểu là concepts + markers; và tiêu đề nào gần như toàn lớp đánh dấu thì technical rơi về danh sách khái niệm, reading nói rõ.
Gloss của các thực thể hệ sinh thái phân biệt CÓ THẬT (Moltbook, OpenClaw) với BỊA (MoltBot, ClawdHub, Crustafarian) — đúng chỗ agent dễ nhầm nhất.
MCP tools (moithub-mcp)
moithub_status · moithub_overview · moithub_categories · moithub_channels · moithub_videos · moithub_search · **moithub_explain** · moithub_trending · moithub_refresh
Không có tool ghi — trang không có gì để ghi.
REST
| Route | Trả về |
|---|---|
GET /api/status | URL đang đọc, TTL, tuổi cache, lỗi gần nhất |
GET /api/overview | tiêu đề, tagline, disclaimer nguyên văn, các con số |
GET /api/categories | danh mục + số mục mỗi danh mục |
GET /api/channels?query=&limit= | kênh hư cấu + bio |
GET /api/videos?category=&quality=&tag=&premium=&limit= | catalogue đã lọc |
GET /api/search?query=&limit= | tìm trong catalogue + kênh |
GET /api/explain?title=&query=&all=&limit= | giải mã tiêu đề: markers + technical + concepts |
GET /api/trending | trendingSearches, ticker, banner quảng cáo |
POST /api/refresh | tải lại ngay, bỏ qua cache |
Cấu hình
| Biến | Mặc định | Ý nghĩa |
|---|---|---|
PORT | 4400 | Cổng HTTP |
SENCLAW_BIND_HOST | 127.0.0.1 | Chỉ đổi khi thật sự cần — app không tự xác thực gì |
MOITHUB_BASE | https://moithub.com | Host duy nhất app gọi ra. Không nhận từ request: một app cho phép caller chọn host là một open proxy |
MOITHUB_TTL_SECS | 1800 | Bản snapshot còn "tươi" bao lâu. Trang tĩnh nên để dài |
Develop
cargo run -p moithub # http://127.0.0.1:4400
cargo test -p moithub # 22 test, chạy offlineParser là hàm thuần nhận HTML dạng chuỗi, nên toàn bộ test không cần mạng.
Đóng gói
apps/moithub/scripts/pack.sh # → apps/moithub/moithub-app.zipDeclared permissions
{
"network": [
"127.0.0.1",
"moithub.com"
],
"exec": [
"./moithub"
]
}Declared by the publisher, not enforced by SenClaw. The CLI compares this against what you already have installed and asks before anything widens.
Published by
The checkmark means SenClaw confirmed who this publisher is. It says nothing about whether their packages are safe.
About
| Owner | @senclaw |
| Latest | 0.1.0 |
| Downloads | 0 |
| Repository | github.com/NortonBen/senclaw-app ↗ |
Versions
| Version | Tags | Artifacts | Published |
|---|---|---|---|
0.1.0 | latest | darwin-arm64, linux-x64, win32-x64 | 2026-08-15 |
Artifacts · 0.1.0
| Platform | Format | Signature | File | Size |
|---|---|---|---|---|
darwin-arm64 | zip | unsigned | moithub-app.zip | 1641 KB |
linux-x64 | zip | unsigned | moithub-app.zip | 1840 KB |
win32-x64 | zip | unsigned | moithub-app.zip | 1820 KB |
Unsigned builds require sign-in to download and are not distributed to the auto-updater, because unsigned executables from a new domain get flagged as unsafe. Sign and notarize (macOS) or Authenticode-sign (Windows) to distribute publicly.
Auto-update endpoints
For a Tauri app — add to tauri.conf.json:
"endpoints": ["https://senclaw.bacnd.com/api/v1/updates/tauri/senclaw/moithub/{{target}}/{{arch}}/{{current_version}}"]For an electron-updater app — generic provider URL:
https://senclaw.bacnd.com/updates/senclaw/moithub/stable
Only signed/notarized artifacts are offered as updates — a client fetches the update without credentials, and unsigned binaries are not publicly downloadable.
Something wrong with this package?
Report this package
Report this package
Tell us what is wrong and a moderator will look at it. Be specific — a report that names a version and a behaviour can be checked in minutes; one that says “looks sketchy” cannot be acted on at all.
Not about this package? Contact us instead. What happens to a report is described in reporting and moderation.
API: GET https://senclaw.bacnd.com/api/v1/packages/senclaw/moithub