πŸ¦‰ Hoot β€” The AI That Never Sleeps

Hoot is a 24/7 AI daemon that remembers your preferences and handles tasks while you sleep.

πŸ¦‰ Hoot β€” The AI That Never Sleeps

npm version CI License: MIT Node.js β‰₯18 Default backend: Copilot SDK Superpowers from awesome-copilot

<img width="503" height="257" alt="Screenshot 2026-03-23 at 10 49 23β€―AM" src="https://github.com/user-attachments/assets/a7cfa818-0e37-468a-b969-be46d298d146" />

Your personal AI daemon β€” it runs 24/7 in the background, remembers your preferences, handles tasks while you sleep, and reaches you on Telegram or your terminal. Ships with GitHub Copilot SDK as the default backend; swap in Ollama, Anthropic, or OpenAI via the AIProvider interface.

🧩 Powered by awesome-copilot β€” Hoot ships with every skill, tool, and agent from the community catalog and syncs new ones daily. Code generation, testing, DevOps, docs, AI agents, cloud automation β€” all built in from day one.

πŸ€– Built by over 100 AI agents across 10 models in 12 hours. Hoot was designed, implemented, tested, and hardened by a swarm of AI agents orchestrated through the GitHub Copilot CLI, spanning Claude Opus, Sonnet, GPT-5.x, and Gemini. 233 tests. Zero human-written source code.

πŸ“Š Learn more about Hoot here

⚑ Three Commands. Done.

Never used Node.js before? No problem. Here's how to get Hoot running:

1. Open your terminal

  • 🍎 Mac: Press ⌘ + Space, type Terminal, hit Enter
  • πŸͺŸ Windows: Press Win + X, choose Terminal or PowerShell
  • 🐧 Linux: Press Ctrl + Alt + T

2. Install Hoot:

curl -fsSL https://raw.githubusercontent.com/DUBSOpenHub/hoot/main/install.sh | bash

3. Start it:

hoot setup && hoot start

That's it β€” Hoot is watching! πŸ¦‰

Requires Node.js β‰₯18 and an active Copilot subscription.


πŸ¦‰ What Is Hoot?

Hoot is like having a developer friend who never goes home. It runs on your computer 24/7, remembers your preferences, handles tasks while you're away, and reaches you on your phone via Telegram.

The before and after:

Without HootWith Hoot πŸ¦‰
Open ChatGPT β†’ paste context β†’ wait β†’ copy answer β†’ paste β†’ repeatTell Hoot from your phone β†’ walk away β†’ get notified when done
Forget what you asked yesterdayHoot remembers across 5 memory categories
One tab, one conversationSame brain on Telegram, terminal, and HTTP β€” pick up where you left off

🧠 What Makes It Different

Most AI tools are ephemeral β€” they forget you the moment the session ends. Hoot is a background service that starts on login and runs on your machine, keeping your context warm.

CapabilityHoot πŸ¦‰
Background serviceβœ… Starts on login, runs locally
Long-term memoryβœ… Across 5 categories
Multi-channel (mobile + terminal)βœ… Telegram + TUI + HTTP
Background agentsβœ… Up to 5 concurrent
Proactive notificationsβœ… Pushes to you
Model routing (fast/standard/premium)βœ… Auto-classifies
Local-first, privateβœ… All data on your machine

What makes Hoot special:

  • 🧠 Ambient Awareness β€” Hoot remembers what you asked 3 hours ago. Preferences, facts, projects, people, routines β€” all persisted in local SQLite.
  • ⚑ Background Agency β€” Say "refactor the auth module" from Telegram and walk away. Hoot spawns an agent, does the job, and notifies you when it's done.
  • πŸ“± Channel Convergence β€” Same brain serves Telegram (mobile), TUI (terminal), and HTTP API (loopback-only). One service, many interfaces, zero context loss.

πŸš€ Quick Start

Step 1: Install

npm install -g hoot

What's npm? It's the Node.js package manager β€” it comes with Node.js. Download Node.js β‰₯18 and npm is included.

Step 2: Setup

hoot setup

This creates ~/.hoot/ β€” the Hoot config directory. It stores your config, database, skills, and plugins.

Step 3: Install the Copilot CLI

copilot login

What's the Copilot CLI? It's the default AI backend Hoot ships with. Hoot's AIProvider interface supports pluggable backends β€” Copilot SDK is the default, but you can swap in Ollama, Anthropic, or OpenAI. For the default setup, you need an active Copilot subscription.

Step 4: Start the service

hoot start

How does it run? Hoot starts as a background process on login via a macOS LaunchAgent. It binds to 127.0.0.1 (loopback only) and is never network-accessible. Restart it manually with hoot start if it stops.

Step 5: Connect via TUI

hoot tui

What's a TUI? A terminal user interface β€” a chat window inside your terminal.


πŸ’¬ Talk to Hoot

From Telegram or the TUI, just type naturally. Here's what it feels like:

You: Start working on the auth bug in ~/dev/myapp
πŸ¦‰: I'll create an agent session for that. Working directory: ~/dev/myapp.
    Spawned agent 'auth-fix' β€” I'll notify you when it's done.

You: What sessions are running?
πŸ¦‰: 1 active agent:
    β€’ auth-fix (~/dev/myapp) β€” running for 2m 30s

You: Remember that I prefer TypeScript over JavaScript
πŸ¦‰: Got it! Saved to preferences: "Prefers TypeScript over JavaScript"

You: Check on the auth-fix session
πŸ¦‰: Agent 'auth-fix' completed! Here's what I did:
    - Fixed the JWT expiration check in src/auth/validate.ts
    - Added missing error handling for expired refresh tokens
    - Updated 3 test files to match

πŸ”§ Commands

CLI Commands

CommandDescription
hoot startStart the background service
hoot tuiConnect to the service via terminal UI
hoot setupInteractive first-run configuration
hoot updateCheck for and install updates
hoot helpShow available commands
hoot start --self-editAllow Hoot to modify its own source

TUI Commands

CommandDescription
/model [name]Show or switch the current model
/memoryShow stored memories
/skillsList installed skills
/agentsList active agent sessions
/copyCopy last response to clipboard
/statusService health check
/restartRestart the service
/cancelCancel in-flight message
/clearClear the screen
/quitExit the TUI

πŸ—οΈ Architecture

Here's what happens when you send Hoot a message: your input arrives through one of three channels (Telegram, TUI, or HTTP API), gets routed through the Message Bus to the Orchestrator (Hoot's persistent brain), which classifies the message complexity, selects the right AI model, and either responds directly or spawns a background agent for heavy tasks. Everything is backed by SQLite for memory, a Circuit Breaker for resilience, and structured logging for observability.

╔═══════════════════════════════════════════════════════════════╗
β•‘                        CHANNELS                               β•‘
β•‘   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                β•‘
β•‘   β”‚ Telegram β”‚   β”‚   TUI    β”‚   β”‚ HTTP API β”‚                β•‘
β•‘   β”‚ (mobile) β”‚   β”‚(terminal)β”‚   β”‚ (:7777)  β”‚                β•‘
β•‘   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜                β•‘
╠════════β•ͺ══════════════β•ͺ══════════════β•ͺ════════════════════════╣
β•‘        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                        β•‘
β•‘                       β–Ό                                       β•‘
β•‘              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                              β•‘
β•‘              β”‚   Message Bus   β”‚  Typed EventEmitter          β•‘
β•‘              β”‚   (pub/sub)     β”‚  correlationId tracking      β•‘
β•‘              β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                              β•‘
β•‘                       β–Ό                                       β•‘
β•‘         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                           β•‘
β•‘         β”‚  Priority Queue (3 lanes)β”‚                          β•‘
β•‘         β”‚  fast(2) std(2) prem(1)  β”‚                          β•‘
β•‘         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                          β•‘
β•‘                      β–Ό                                        β•‘
β•‘         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β•‘
β•‘         β”‚   Orchestrator       │────▢│  Agent Pool        β”‚    β•‘
β•‘         β”‚   (persistent brain) β”‚     β”‚  (warm sessions)   β”‚    β•‘
β•‘         β”‚   + Circuit Breaker  β”‚     β”‚  checkout/return   β”‚    β•‘
β•‘         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β•‘
β•‘                      β”‚                                        β•‘
β•‘    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                     β•‘
β•‘    β–Ό                 β–Ό                 β–Ό                      β•‘
β•‘  β”Œβ”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                β•‘
β•‘  β”‚SQLiteβ”‚      β”‚  Plugins β”‚     β”‚ Metrics  β”‚                β•‘
β•‘  β”‚(WAL) β”‚      β”‚(hot-load)β”‚     β”‚(/metrics)β”‚                β•‘
β•‘  β””β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

Key components:

  • Message Bus β€” Typed EventEmitter decoupling all components via pub/sub
  • Priority Queue β€” 3-lane concurrent processing (fast/standard/premium) with rate limiting
  • Agent Pool β€” Pre-warmed AI sessions for instant background task dispatch
  • Circuit Breaker β€” Auto-trips after 3 SDK failures, self-heals after 30s
  • Plugin System β€” Drop plugins in ~/.hoot/plugins/ with hot-reload
  • Audit Log β€” Every auth rejection, model switch, and agent event logged to SQLite

πŸ”Œ Extend Hoot

Hoot has two extension mechanisms:

Skills (no code β€” teach Hoot new knowledge)

Hoot ships with every skill from github/awesome-copilot β€” the community catalog of Copilot customizations. New skills sync automatically via daily auto-sync, so Hoot's capabilities grow without you lifting a finger.

Skills are markdown files that give Hoot new capabilities by adding instructions to its system prompt. You can also create your own β€” drop a SKILL.md into ~/.hoot/skills/your-skill/:

---
name: my-skill
description: Teaches Hoot how to do X
---

When the user asks about X, do the following...

Or discover and install community skills: just ask Hoot "find a skill for X".

Plugins (TypeScript code β€” hook into events)

Plugins are Node.js modules that register tools, subscribe to bus events, and add API routes. Drop an index.js into ~/.hoot/plugins/your-plugin/:

import type { HootPlugin } from 'hoot';

const plugin: HootPlugin = {
  name: 'hello-world',
  version: '1.0.0',
  async onLoad(ctx) {
    ctx.bus.on('message.incoming', (envelope) => {
      ctx.log.info({ msg: envelope.text }, 'New message');
    });
    ctx.registerTool({
      name: 'greet',
      description: 'Say hello',
      handler: async () => ({ greeting: 'Hello from plugin!' }),
    });
  },
};

export default plugin;

Enable with HOOT_PLUGINS_ENABLED=1 in ~/.hoot/.env. Plugins hot-reload on file changes.


βš™οΈ Configuration

All configuration lives in ~/.hoot/.env. Every variable is optional β€” Hoot works with zero config.

VariableDefaultDescription
TELEGRAM_BOT_TOKENβ€”Bot token from @BotFather
AUTHORIZED_USER_IDβ€”Your Telegram user ID (whitelist)
API_PORT7777Local HTTP API port
COPILOT_MODELclaude-sonnet-4.6Default AI model
WORKER_TIMEOUT600000Worker session timeout in ms (10 min)
HOOT_QUEUE_V21Enable concurrent 3-lane priority queue
HOOT_POOL_ENABLED1Enable agent session pool with warm sessions
HOOT_ENCRYPT_DB0Enable XOR-obfuscated SQLite at rest
HOOT_LOG_FORMATjsonLogging format: json, pretty, or legacy
HOOT_LOG_LEVELinfoLog level: debug, info, warn, error
HOOT_PLUGINS_ENABLED0Load plugins from ~/.hoot/plugins/
HOOT_SELF_EDIT0Allow Hoot to modify its own source files
HOOT_TELEMETRY1Anonymous one-time startup ping (set 0 to disable)
HOOT_TUI_DEBUG0Enable TUI debug logging

πŸ”’ Security

Hoot takes security seriously. Every API call requires a bearer token, Telegram is user-ID whitelisted, and agents are blocked from sensitive directories like ~/.ssh and ~/.aws.

FeatureStatus
Bearer token auth (API)βœ… Always on
Telegram user ID whitelistβœ… Always on
Agent directory blocking (9 sensitive dirs)βœ… Always on
Structured audit loggingβœ… Always on
Rate limiting (100 req/min)βœ… Always on
CORS restriction (localhost only)βœ… Always on
Encryption at restπŸ”’ Opt-in (HOOT_ENCRYPT_DB=1)
Token rotationβœ… POST /auth/rotate
Prompt length limit (50K chars)βœ… Always on
Circuit breaker (SDK resilience)βœ… Always on

Full details: SECURITY.md Β· Threat Model


πŸ“Š Observability

When HOOT_LOG_FORMAT=json (default), all output is structured JSON piped to stdout:

{"ts":"2026-03-21T06:29:13Z","level":"info","component":"orchestrator","msg":"Message queued","correlationId":"abc-123"}

Prometheus metrics available at GET http://127.0.0.1:7777/metrics:

hoot_messages_total{tier="standard",channel="telegram"} 42
hoot_response_duration_seconds{tier="fast",quantile="0.95"} 0.8
hoot_workers_active 2
hoot_uptime_seconds 86400

πŸ› οΈ Development

Prerequisites

Getting started

# Clone and install
git clone https://github.com/DUBSOpenHub/hoot.git
cd hoot
npm install

# Watch mode (auto-restart on changes)
npm run dev

# Build TypeScript
npm run build

# Run tests
npx vitest run

# Type check
npx tsc --noEmit

❓ FAQ

Is Hoot free? Yes. You need a Copilot subscription for the underlying AI, but Hoot itself is MIT-licensed open source.

Does Hoot need the internet? Yes β€” the default Copilot SDK backend requires cloud connectivity. But all storage, config, skills, and memories are local. Alternative backends (like Ollama) can run fully offline.

Can I use it without Telegram? Absolutely. Telegram is optional. The TUI and HTTP API work without it.

How much memory does it use? ~200MB base + ~400MB per active agent. Each agent is a full Copilot SDK session β€” not a lightweight thread, a real AI session with its own context, tools, and file access. 5 concurrent agents = ~2.2GB total. This is configurable via HOOT_CONCURRENT_WORKERS in .env.

How many things can it do in parallel? 5 concurrent agents by default. Each agent can independently run commands, edit files, and call tools. Agents can also invoke Stampede (up to 20 parallel CLI agents in tmux panes), so one Telegram message can theoretically orchestrate 100 parallel agents β€” though API rate limits are the practical ceiling.

What models does Hoot use? 3-tier routing: GPT-4.1 (fast/trivial), Claude Sonnet 4.6 (standard/coding), Claude Opus 4.6 (premium/complex). The LLM classifier auto-selects with keyword overrides.

Can I add custom skills? Yes β€” Hoot ships with every skill from awesome-copilot and syncs new ones daily. You can also create your own: drop a markdown file in ~/.hoot/skills/ or a TypeScript plugin in ~/.hoot/plugins/.

Why do some environment variables start with HOOT_ and others don't? The HOOT_-prefixed variables are Hoot-specific settings. A few internal variables still use a legacy MAX_ prefix for backward compatibility β€” both prefixes work, but HOOT_ is preferred for new config.

What is the Copilot SDK? The GitHub Copilot SDK is a Node.js library that provides AI model access, session management, tool calling, and streaming. It's Hoot's default AIProvider backend. The AIProvider interface (src/providers/types.ts) lets you swap in any backend β€” implement createSession(), sendAndWait(), and listModels() and Hoot works with your provider instead.


🀝 Contributing

Contributions welcome! See CONTRIBUTING.md for setup instructions and AGENTS.md for the architecture overview.


πŸ“„ License

MIT


πŸ™ Created by Gregg Cochran (@DUBSOpenHub) β€” an AI-native builder who shipped this entire daemon, every superpower from awesome-copilot, and a Telegram bot using nothing but the GitHub Copilot CLI. No hand-written code. Just one terminal and over 100 AI agents.

The magic of Hoot πŸ¦‰: You message an owl on your phone. The owl thinks, spawns agents, writes code, runs tests, and messages you back when it's done. You walk away. You come back. The work is finished. That's it. That's the whole product. An owl that never sleeps, never forgets, and does what you tell it β€” from anywhere.

Why this matters: You don't need to be a developer to build things that help you in your role. Find the leverage. Gain the velocity. The CLI is the equalizer β€” if you can describe what you need, you can ship it. Hoot exists because one person asked "what if I had an AI that never went offline?" and then built it. You can do the same. πŸ¦‰