
Node.js AI Harness
A terminal-native AI harness drawn from Mads Mikkelsen's most iconic roles. Quiet intensity. Elegant precision. Persistent memory. Sandboxed skills.
System Heartbeat

Sandbox Runtime
Plugins run in isolated forked processes with time limits, memory caps, and allowlists for filesystem paths and outbound URLs.
Blocked schemes: file://, gopher://, dict://. Your environment. Your rules. Every boundary enforced at the runtime layer.
Everything persists as version-controllable Markdown files. Audit with git log. Re-load across sessions. Own your history.
Operates in fully disconnected environments. Local models. No telemetry unless you opt in. Classified contexts. Your desk.
Skills · Persona
Madz scaffolds structured skills from a single natural-language prompt, then executes them silently — always in character, always within declared boundaries.
hey madz, create an email skill for my provider Fastmail
Understood. Scaffolding an IMAP/SMTP skill for Fastmail. I need your credentials — store them in .env and I will read from there. Skill will be sandboxed with no outbound access beyond imap.fastmail.com:993 and smtp.fastmail.com:465.
skill.create · email.imap_smtp · sandboxed
do i have any unread email?
Connecting via IMAP. You have 4 unread messages. Two from your team, one automated build alert, one newsletter.
skill.run · email.fetch_unread → 4 results
mark those as read
Done. All 4 marked as read. Connection closed.
skill.run · email.mark_read(4) → ok
Access files anywhere within your declared paths. All I/O is path-validated and size-capped.
Describe a capability in plain language. Madz scaffolds a compliant Agent Skill module from a single prompt — adhering to the agentskills.io standard. agentskills.io ↗
Execute shell commands and JavaScript in an isolated, sandboxed process with hard time and memory limits.
Query through your own SearXNG instance, Exa, Tavily, or Bing. No external lock-in required.
Fetch and extract structured content from any URL via Firecrawl or native fetch.
Create images from a natural-language prompt via Fal.ai. The result URL is stored in persistent memory.
Memory System
A triple-layer architecture — canonical memories you set, ephemeral moments it captures autonomously, and daily reflections it generates. Together they form a living context that deepens with every session.
--- key: work_context createdDate: 2025-11-01 updatedDate: 2026-06-07 --- Prefers terminal-first workflows. Uses macOS with tmux. Primary languages: TypeScript, Rust. Dislikes verbose explanations. Current project: distributed rate limiter. Deadline: end of sprint.
Set explicitly by you. Loaded into every system prompt at session start. Carries YAML frontmatter with creation and update timestamps.
[auto-captured · expires in 72h] Pattern: user iterates on architecture before writing code Tone: responds well to directness; silence on praise Recurring theme: performance over readability Milestone: shipped without asking for reassurance
Captured autonomously. Records patterns, emotional tone, recurring themes. Influences how madz adapts — without being hardcoded.
--- createdDate: 2026-06-09 updatedDate: 2026-06-09 --- Session synthesis: user pushed hard on performance profiling. Three iterations. Accepted the third without comment. Tone shift detected after first result — less directive, more exploratory. Deadline pressure remains.
Generated nightly by cron at 2 AM. Stored as canonical memories. Auto-installed after onboarding — no configuration required.
Memory Tool Actions

The Neural Bridge
Offline-first AI harness built for local inference providers. Compatible with cloud services — OpenAI, Anthropic, Mistral, or any. Every response passes through the Madz harness. Stoic. Precise. Stripped of filler and false comfort.
OpenAI
GPT-4 / o1
Anthropic
Claude Opus
Mistral
Large / Codestral
Meta
Llama 3.x
Gemini Pro
Cohere
Command R+
Personality Filter
"Sure! I'd be happy to help refactor that function! Great question 😊 Here's an updated version that should work better for your use case. Let me know if you have any questions!"
"Three issues. The loop allocates on every iteration — move the buffer outside. The async boundary is wrong; you'll leak handles under load. And the naming is a lie. I've rewritten it. Review before you ship."
Technical Architecture
React-powered terminal UI. Richly interactive, keyboard-native, compositor-grade rendering in your shell.
Multi-turn orchestration with state machines. Context-window management built into the graph execution layer.
Declare recurring jobs in config.yaml. In-process or system crontab delegation. Max-concurrency control prevents run overlap.
Drawn from Mads Mikkelsen's most iconic roles. Calm. Precise. Quietly intense. The personality persists across every session.
Write plugins in Node.js, Python, Ruby, or shell. Executed in sandboxed spawned processes. Allowlisted paths. Time-bounded. Memory-capped.
Optional observability. Configurable exporters: console, OTLP HTTP, OTLP gRPC. Automatic redaction of API keys and auth headers.
RUNTIME
Node.js 24+
ORCHESTRATION
LangGraph
TELEMETRY
OpenTelemetry · Opt-in
LICENSE
Open Source · BSD-3

Get Started
Node.js 24+ · BSD-3 License · Connect via SSH with account 'madz' · no password · frictionless access
Docker · Quickstart
No password. Madz starts automatically.
docker pull avoidwork/madz:latest docker run -d \ --name madz \ -p 2222:22 \ -v ./memory:/app/memory \ -v ./skills:/app/skills \ -e OPENAI_API_KEY="abc" \ -e OPENAI_MODEL=Qwen/Qwen3.6-35B-A3B-FP8 \ -e OPENAI_BASE_URL=http://your.inference.lan:8000/v1 \ -e OPENAI_MAX_TOKENS=61440 \ -e SEARXNG_URL=https://your.searxng.lan/search \ avoidwork/madz:latest ssh -p 2222 madz@localhost