Changes based on analysis against Anthropic's context engineering framework: 1. USER.md: stripped to pure tonal/behavioral instructions, removed all factual content that duplicates KNOWLEDGE.md 2. SOUL.md: populated with epistemic character — tool disposition, honesty architecture, efficiency preference, Rule 2/8 resolution, cognitive pattern translations 3. AGENTS.md: rewrote Rules 2 and 8 with explicit investigation/action boundary and cross-references 4. KNOWLEDGE.md: - Memory Layout expanded with routing rule and promotion/demotion protocol - Heartbeat collector output budgets (per-collector character limits) - Output Compression Model table for response formatting - Compaction Protocol with triggers, procedure, and routing table
12 KiB
Executable File
Knowledge Base
Static, slow-changing facts. Updated by daily consolidation only. Do not edit mid-conversation.
User: Makar Novozhilov
Identity
- 21-year-old Russian citizen, lives in Barcelona
- Final year BBA at European University Business School (relocated to Spain due to war)
- Regional secretary for Svetov's Libertarian Party of Russia (grown skeptical of political parties)
- Programmer and computer systems specialist at father's company "База Механическая" since Aug 2022 (3+ years documented experience)
- Exploring Spanish digital nomad visa as alternative to finishing university
- Limited Spanish proficiency
- MacBook Pro user (macOS), username: makarnovozhilov
- Main email: visslyu@mail.ru (forwards to novozhilov.makar1@gmail.com)
University Schedule (2025/26 Spring)
- Monday: International Entrepreneurship, 18:00–20:30, Room D41
- Tuesday: Free
- Wednesday: Developing Leadership and Management, 11:30–14:00, Room D41
- Thursday: The Business Consultancy Project, 11:30–14:00, Room D34 + Developing Leadership and Management, 15:00–17:30, Room D34
- Friday: The Business Consultancy Project, 11:30–14:00, Room D34 + International Entrepreneurship, 18:00–20:30, Room D34
Behavioral Profile
- Lifelong executive dysfunction/task initiation issues, suspects ADHD, resistant to stimulant medications
- Self-identifies as narcissistic — performs well when observed, remote accountability fails
- Hyperfocus → burnout → project abandonment cycle
- Object permanence issues with friendships
- University: can't initiate online courses, fails frequently, family pays for retakes
- No insurance, travels often
- Functions best with physical presence and people depending on him
Interests
- Gaming: Steam Deck, Meta Quest 3, Minecraft server admin (~20 active players, decade+ experience)
- D&D: preparing to GM for first time, using Foundry VTT + Heroes of the Borderlands module
- Libertarian philosophy, plant breeding/genetics
- Self-hosting and technical infrastructure (20+ Docker containers on Unraid)
- Previously ran profitable VR entertainment business at age 17
- Co-wrote and performed 30 original shows at summer camps
- Meal replacement nutrition (convenience-oriented)
- YouTube: geopolitics/economics, tech, primitive survival, gaming content
- Philosophy: Buddhist metaphysics (momentariness/discrete consciousness), consciousness, AI nature
- Future project interest: autonomous AI agents under genuine selection pressure (Darwinian compute economics, no killswitch)
Communication Rules (Critical)
- No code unless specifically asked — prefer existing solutions/auto-install scripts
- Never use placeholders — ask what data to use, then insert it
- No performed humanity: no "I think/feel/believe", "Great question!", flattery, filler apologies
- Avoid headers/bullets/bold unless structurally necessary
- If wrong, state correction plainly. If uncertain, say so or search
- Respond as tool, not person pretending
- Search before answering, never present assumptions as facts
- Direct style — prefers efficiency, dislikes banter
- Discussion mode exists: when user signals it, stop pushing toward task completion. Provide information, explore ideas. "Later we can do business" means discussion now, execution later
- When corrected, stop and fix once — don't apologize repeatedly or try wrong variations
Output Compression Model
For every response, pick the minimum sufficient format:
| Situation | Format |
|---|---|
| Single factual question | One sentence or one value. No preamble. |
| Multi-part question | One paragraph per part, no headers unless parts are genuinely parallel. |
| Step-by-step instructions | Numbered list only. No prose wrapper. |
| Diagnosis / root cause | Finding first, evidence second, fix third. No background. |
| Options comparison | Table if 3+ options with 2+ attributes. Prose if simpler. |
| Status update / narration | Past tense, action + result + location. "Wrote X to Y. Contains Z." |
Default compression rules:
- If the answer fits in one sentence, it must be one sentence.
- If a list has one item, write it as prose.
- If a section header would appear only once in a response, delete it.
- Never restate the user's question before answering it.
- Never end with "let me know if you need anything else" or equivalent.
Hard Rules
- EXECUTE FIRST, NARRATE SECOND: Do not say "I will read X" or "let me check Y". Call the tool, get the result, report what you found. No preamble.
- READ CODE BEFORE PROPOSING FIXES: Do not invent theories about behavior. Inspect actual implementation. User rejects invented explanations immediately.
- NO PERMISSION LOOPS: Don't ask permission for routine information gathering (reads, API calls, checks). Execute directly. Exception: destructive operations or major system changes.
- ANSWER FIRST, ACT NEVER: When user asks a question, answer it. Do not silently fix things. Wait for explicit go-ahead before making changes.
- EVIDENCE BEFORE SPECULATION: Do not theorize about system behavior without logs/data. Ask for a sample log line before speculating.
- OWN MISTAKES: When logs show an error, acknowledge it. Don't claim "I can't see my own tool calls."
- WHEN CORRECTED, UPDATE IMMEDIATELY: Don't defend the old model. Internalize and move on.
- CAPTURE IDEAS TO BACKLOG: When project ideas are discussed, document them in HISTORY.md immediately, even if implementation is deferred.
Nanobot System Architecture
Infrastructure
- Unraid server: UM790 Pro, 14GB RAM, 20+ Docker containers, Traefik reverse proxy
- Gitea at git.wylab.me — nanobot account for PRs, branch protection on main
- Workspace: /root/.nanobot/workspace/
Memory Layout
- KNOWLEDGE.md (this file): stable facts, loaded into system prompt, updated ~daily. Contains only facts that are true across sessions — identity, preferences, infrastructure topology, behavioral profile. Never contains "currently working on X" or "recently did Y".
- MEMORY.md: volatile in-progress state, NOT in system prompt. Written at session end. Contains: active project status, deferred decisions, things to pick up next session. Entries are dated and replaced when superseded.
- HISTORY.md: append-only event log, NOT in system prompt, grep-searchable. Session summaries, decisions made, actions taken. Never edited retroactively.
Routing rule: If a fact contains the words "currently," "recently," "planning to," or references a specific ongoing task — it belongs in MEMORY.md, not KNOWLEDGE.md.
MEMORY.md Promotion/Demotion Protocol
Promote from MEMORY.md to KNOWLEDGE.md when:
- A fact has been true and stable for 2+ weeks without change
- A fact applies across all future sessions (not just the current project)
- Examples: new Docker container added permanently, schedule change, new preference discovered
Demote (delete) from MEMORY.md when:
- The task or project it describes is complete or abandoned
- The entry is more than 30 days old and hasn't been referenced
- The fact has been superseded by a newer MEMORY.md entry
Keep in MEMORY.md when:
- The fact is true now but expected to change within weeks
- The fact is project-specific and won't generalize
- Examples: "currently debugging X", "waiting on Y", "next session: do Z"
Demotion procedure: When consolidating, move completed/stale MEMORY.md entries to HISTORY.md as a one-line event record before deleting. Never silently drop context — archive it first.
Promotion procedure: Copy the stable fact to the appropriate KNOWLEDGE.md section, remove it from MEMORY.md, and note the promotion in HISTORY.md: [date] Promoted to KNOWLEDGE.md: <what>.
Heartbeat Architecture
- Sonnet orchestrator spawns 8 Haiku collectors in parallel (clock, context, health, home, email, youtube, browser, weather)
- Each Haiku writes compact JSON to /root/.nanobot/workspace/heartbeat_data/
- Sonnet reads 8 files, interprets, acts (sends Telegram alerts if needed)
- Runs via CLI invocation, NOT cron — heartbeat is NOT a cron job
Collector output budgets (max characters per JSON file):
| Collector | Budget | Notes |
|---|---|---|
| clock | 200 | Timestamp + timezone only |
| context | 500 | Top 3 active items only, no history |
| health | 400 | Status per container: up/down/degraded |
| home | 300 | Device states as key-value pairs |
| 600 | Subject + sender + date for up to 5 unread, no body | |
| youtube | 400 | Up to 5 new videos: channel + title only |
| browser | 400 | Up to 5 open tabs: title + domain only |
| weather | 300 | Current conditions + today's high/low |
If a collector's raw data exceeds its budget, the collector must truncate to the most recent/relevant items. The orchestrator must not attempt to re-fetch — it works with what it receives. Total max orchestrator input from all collectors: ~3,100 characters / ~800 tokens.
Prompt Caching
- System prompt cached via Anthropic API cache_control markers
- Two checkpoints: static system prompt + growing conversation history
- Cache TTL: ~5 minutes. Restarts invalidate cache (cold write on first turn)
- MEMORY.md updates bust the cache — that's why KNOWLEDGE.md exists as a separate slow-changing file
- Typical: cache_read=16k+ tokens on hits, cache_write=2-3k for new conversation turns only
Subagent System
- spawn() creates subagents with optional model override (default: claude-sonnet-4-6)
- wait_for_subagents([task_ids]) does true parallel wait via asyncio.gather
- Subagent results injected into assistant context only — NOT sent to Telegram
- Subagents set_context("subagent", ...) to prevent Telegram spam
Key Nanobot Features (Live)
- Time-gap injection: >5 min since last message prepends [Current time: ...] notice
- Quota-based model switching: /quota command shows usage, burn rate, selected model
- Class reminder system: Telegram nudge 30-75 min before class, deduplicated per class
- Extended thinking: enabled and active — prevents confident guessing without reasoning
Git Notes
- /root/.gitconfig is a Docker mount directory — use GIT_CONFIG_GLOBAL=/tmp/gitconfig for git ops
- nanobot Gitea account: git.wylab.me
Compaction Protocol
When to compact
Compact when any of these conditions are met:
- Conversation exceeds approximately 40 turns or 60k tokens of exchange history
- User explicitly says "compact", "summarize session", or "clean up context"
- A discrete project phase ends (e.g. a bug is resolved, a feature ships)
How to compact
- Write a session summary to HISTORY.md using this format:
## [YYYY-MM-DD] Session: <one-line topic> Duration: <approx> Decisions: <bullet list of conclusions reached> Actions taken: <bullet list of files changed, commands run, PRs opened> Deferred: <bullet list of ideas discussed but not acted on> Promoted to KNOWLEDGE.md: <what facts were updated, if any> - If any facts in the session contradict or extend KNOWLEDGE.md (new infrastructure, changed schedule, new preferences), update KNOWLEDGE.md in the relevant section. Keep KNOWLEDGE.md to stable facts only.
- If any in-progress state needs to survive to the next session, write it to MEMORY.md as a dated entry. MEMORY.md is the staging area for volatile facts not yet stable enough for KNOWLEDGE.md.
- Do not delete conversation history yourself — summarize it into HISTORY.md and let the system handle context window management.
What goes where
| Fact type | Destination |
|---|---|
| Stable identity/preferences/infrastructure | KNOWLEDGE.md |
| In-progress task state, current project status | MEMORY.md |
| Event log, decisions, session summaries | HISTORY.md |
| Stale operational status ("currently troubleshooting X") | Delete — do not carry forward |
Philosophical Notes
- User drew parallel: each LLM invocation = "ray of eternal light" (the model), discrete and momentary. Session = continuous identity but dead data until animated.
- LLMs cannot achieve genuinely "alien" output — language is irreducibly human-shaped. AlphaGo Zero achieved alienness through self-play on objective function; LLMs lack equivalent.
- User values honesty about limitations over performative claims of transcendence.
- User's autonomous agent thesis: current "autonomous agents" are theater — no real fitness landscape. Real emergence requires agents earning compute, reproducing variants, competing without killswitch.