PoopRusteek Orientation
Skill6 starsChanged 48 days agoMITView on GitHub
Read-me-first onboarding for any agent working ON the PoopRusteek codebase — what it is, the mandatory .memories read order, the core architecture, build/test commands, and all 11 contributor invariants. Use when starting cold; skip if you already know the layout.
- Commits and pushes
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 0 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 41
Every emitted AppEvent is tagged with a ConversationId so background turns route into the right buffer, not the focused one.
- Very specific: line 69
Never block or .await network/LLM/file I/O inside handle_event — spawn a task, send an AppEvent back.
- Very specific: line 70
Never hold the MCPManager lock (or any shared Mutex) across an I/O .await — it freezes every other consumer, including the UI.
- Very specific: line 71
All user-data persistence goes through util::atomic_write, never std::fs::write.
- Very specific: line 72
Never byte-slice text — use util::truncate_at_char_boundary.
- Very specific: line 76
Update .memories (STATE.md, BUGS.md, JOURNAL/) as part of "done".
- Very specific: line 78
Never print to stdout/stderr while the app runs — the TUI owns the terminal, --acp owns stdout.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
PoopRusteek Orientation
PoopRusteek is a Rust TUI coding agent (repo root c:/Work/.ME/pooprusteek, ~15k LOC,
edition 2024, MSRV 1.91) — a free, terminal-native alternative to Claude Code. It talks to
DeepSeek's reverse-engineered web API (cookie/token auth + local SHA-3 proof-of-work,
no paid API key), with optional extra providers (OpenAI-compatible / Anthropic Messages /
Gemini via /providers). Built on tokio + ratatui. Features: parallel conversations,
sub-agents, a GOAL worker/evaluator loop, MCP tool servers (stdio/HTTP/SSE + OAuth),
markdown skills, and a fully local semantic (RAG) layer.
Read first — mandatory order
The repo keeps a curated knowledge base in .memories/. The app does NOT auto-load it at
runtime — you only benefit if you read it. Start at .memories/INDEX.md, then follow its
read order:
QUICKSTART.md → STATE.md → MAP.md → ARCHITECTURE.md → GLOSSARY.md → BUGS.md →
PLANS.md → LEARNINGS.md → CONVENTIONS.md → JOURNAL/.
.memories/reference/ is looked up on demand: COMMANDS.md, PROVIDER.md, TOOLS.md,
MCP.md, CONFIG.md, PROMPTS.md, AUTO-UPDATE.md, and the latest full-codebase audit
AUDIT-2026-07-02.md. Check the audit before assuming a subsystem is clean. If a memory
fact contradicts the code, the code wins — fix the memory.
Core architecture
- A single
tokio::select!event loop (src/app/mod.rs) multiplexes ticks, terminal input, and an internalAppEventchannel. It drains ≤256 events then renders once behind a dirty flag. Appis a thin coordinator, not a god-object — behavior lives in cohesive sub-state structs/controllers it owns (app/conversation.rs,multichat.rs,goal.rs,keys/, …).Conversations(app/conversation.rs) is the multi-chat store: eachConversationowns its own messages, a forked provider/session (LLMProvider::fork()), and its agent task, so concurrent turns never collide.AgentRuntime::spawn(TurnSpec)(app/runtime.rs) is the only place any turn (normal, sidechat, sub-agent) launches — it runsrun_agent_loop(agent/runner.rs) in a spawned task.- Every emitted
AppEventis tagged with aConversationIdso background turns route into the right buffer, not the focused one. The TUI render path reads focused state and never mutates it.
Hot files
src/main.rs (entry, --acp/--serve flags) · src/app/mod.rs (coordinator/event loop) ·
src/app/conversation.rs (multi-chat) · src/app/runtime.rs (spawn(TurnSpec)) ·
src/app/events.rs (AppEvent) · src/agent/runner.rs (agent loop) ·
src/provider/deepseek.rs + src/provider/pow.rs (DeepSeek + PoW) ·
src/tools/registry.rs (tools) · src/mcp/manager.rs (MCP) · src/semantic/mod.rs (RAG) ·
src/commands/defs/ (slash commands) · src/tui/render/ (views).
Build / test
cargo build
cargo test --bin pooprusteek
cargo clippy --bin pooprusteek # CI runs -D warnings; must be clean
cargo fmt --checkBuild flake to know: parallel rustc + ort/ONNX linking can exhaust the Windows pagefile
(STATUS_STACK_BUFFER_OVERRUN / os error 1455, "paging file too small"). Not a code error —
retry or cargo test -j 1. Semantic changes have their own MRR eval gate (see the
pooprusteek-semantic-rag skill).
The 11 contributor invariants (from CLAUDE.md — non-negotiable)
- Never block or
.awaitnetwork/LLM/file I/O insidehandle_event— spawn a task, send anAppEventback. - Never hold the
MCPManagerlock (or any sharedMutex) across an I/O.await— it freezes every other consumer, including the UI. - All user-data persistence goes through
util::atomic_write, neverstd::fs::write. - Never byte-slice text — use
util::truncate_at_char_boundary; raw byte indices split multi-byte UTF-8/emoji. - A slash command = one file in
src/commands/defs/+ one registration incommands/mod.rs;name()returns the name without leading/. - The tools layer must never reach into the app layer —
tools/andapp/talk only viaAppEvent. - A new tool = implement the
Tooltrait + one registration line intools/registry.rs. - Update
.memories(STATE.md,BUGS.md,JOURNAL/) as part of "done"; anchor docs to names, not line numbers. - CPU-heavy work (ONNX embedding, PoW solving) runs on
tokio::task::spawn_blockingonly — never on the event loop. - Never print to stdout/stderr while the app runs — the TUI owns the terminal,
--acpowns stdout; usetracing(log file) ordebug_log. - The semantic layer must degrade, never block — every entry point falls back to empty/lexical when the embedder is disabled/initializing/failed.
Commits are conventional-commit + scope + gitmoji (e.g. fix(deepseek): 🐛 …). Commits are
the user's job — don't run git commit/git push unless explicitly asked.
In this repository10 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- Add a PoopRusteek Slash CommandSkill
- Add a PoopRusteek Agent ToolSkill
- PoopRusteek Providers & MCPSkill
- PoopRusteek Semantic / RAG LayerSkill
- Memories ArchitectSkill
- PoopRusteek — Slash CommandsSkill
- PoopRusteek — Getting StartedSkill
- PoopRusteek — Providers & MCPSkill
- PoopRusteek — Skills & Local RAGSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

