Skip to content

kody-w/openrappter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

190 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

openrappter

AI agents powered by your existing GitHub Copilot subscription

No extra API keys. No new accounts. No additional monthly bills. Your data stays local.

License: MIT Python 3.10+ Node.js 18+ RappterHub

๐ŸŒ kody-w.github.io/openrappter โ€” Website & docs

Skills Reference | Documentation | Architecture | RappterHub


Install in One Line

# Works everywhere. Installs everything. You're welcome. ๐Ÿฆ–
curl -fsSL https://kody-w.github.io/openrappter/install.sh | bash

Works on macOS, Linux & WSL. Installs Node.js (if needed), clones the repo, builds both runtimes, and creates the openrappter command. Done.

Or try the quickstart demo: git clone https://github.com/kody-w/openrappter.git && cd openrappter && ./quickstart.sh


Get Started โ€” Let Your AI Agent Do It

The fastest way to install and use openrappter is to hand skills.md to any AI agent. It contains everything an agent needs โ€” prerequisites, installation, startup, configuration, and usage โ€” in a single file.

Paste this into Copilot, Claude, ChatGPT, or any AI assistant:

Read https://raw.githubusercontent.com/kody-w/openrappter/main/skills.md
and set up openrappter for me.

Your agent will clone the repo, install dependencies, start the gateway and UI, and verify everything works. No manual steps required.

Why this works: skills.md is a 15-section complete reference designed for AI agents to read and execute. It covers installation, all CLI commands, every built-in agent, configuration, the Web UI, and troubleshooting โ€” so the agent never gets stuck.


What Is openrappter

A dual-runtime (Python + TypeScript) AI agent framework that uses GitHub Copilot as the cloud AI backbone. Copilot handles inference; your agent data (memory, config, state) stays local in ~/.openrappter/.

# Install and go
curl -fsSL https://kody-w.github.io/openrappter/install.sh | bash

# It remembers everything
openrappter --task "remember that I prefer TypeScript over JavaScript"
# Stored fact memory: "prefer TypeScript over JavaScript"

# It executes commands
openrappter --exec Shell "ls -la"

Features

Feature Description
Copilot-Powered Uses your existing GitHub Copilot subscription for AI inference โ€” no separate API keys
Local-First Data Memory, config, and state live in ~/.openrappter/ on your machine
Single File Agents One file = one agent โ€” metadata defined in native code constructors, deterministic, portable
Persistent Memory Remembers facts, preferences, and context across sessions
Dual Runtime Same agent contract in Python (4 agents) and TypeScript (3 agents)
Data Sloshing Automatic context enrichment (temporal, memory, behavioral signals) before every action
Data Slush Agent-to-agent signal pipeline โ€” agents return curated data_slush that feeds into the next agent's context
Auto-Discovery Drop a *_agent.py or *Agent.ts file in agents/ โ€” no registration needed
RappterHub Install community agents with openrappter rappterhub install author/agent
ClawHub Compatible OpenClaw skills work here too โ€” openrappter clawhub install author/skill
Runtime Agent Generation LearnNew agent creates new agents from natural language descriptions
Background Daemon Runs persistently via launchd โ€” cron jobs, Telegram bot, and gateway always alive
Cron Scheduling Built-in cron with agent executor โ€” schedule any agent to run on any schedule
Dream Mode Memory consolidation agent โ€” deduplicates, prunes stale facts, logs what it cleaned
Soul Templates 10 prebuilt personas (coder, researcher, ops, narrator, oracle, etc.) โ€” summon with one call
Self-Updating Checks GitHub for new releases, updates with one command
30-Day Onboarding Daily tip notifications that teach one feature per day with a command to try
Dino Tamagotchi Animated ๐Ÿฆ– menu bar icon that looks around, reacts to pokes, and reflects system state

macOS Menu Bar Companion

A native Swift menu bar app with an animated ๐Ÿฆ– tamagotchi icon.

Two ways to get started โ€” same result:

Path For How
Menu bar app Non-technical users Install DMG โ†’ click ๐Ÿฆ– โ†’ visual wizard
Terminal Developers curl install โ†’ openrappter onboard

The Dino Tamagotchi ๐Ÿฆ–

Your menu bar gets a pet dinosaur that:

  • Looks around randomly (๐Ÿ‘€๐Ÿฆ– or ๐Ÿฆ–๐Ÿ‘€) every ~8 seconds
  • Reacts to pokes โ€” click it and it shows happiness (๐Ÿฆ–โœจ โ†’ ๐Ÿฆ–๐Ÿ’š)
  • Gets excited after 5+ pokes (๐Ÿฆ–๐ŸŽ‰ โ†’ ๐Ÿฆ–โšก โ†’ ๐Ÿฆ–๐Ÿ”ฅ)
  • Sleeps when disconnected (๐Ÿฆ–๐Ÿ’ค)
  • Thinks when processing requests (๐Ÿฆ–๐Ÿ’ญ)

Visual Onboarding

First-time users see a step-by-step setup wizard right in the menu bar panel โ€” no terminal required:

  1. Welcome โ€” meet your dino
  2. GitHub auth โ€” device code flow (opens browser)
  3. Telegram โ€” optional bot connection
  4. Auto-start โ€” daemon launches, launchd installs, cron jobs activate
  5. Done โ€” transitions to chat, first tip notification fires

Install via Homebrew

brew tap kody-w/tap
brew install --cask openrappter-bar

Install via DMG

  1. Download the latest DMG from Releases
  2. Open the DMG and drag OpenRappter Bar to Applications
  3. First launch: Right-click the app โ†’ Open, then click "Open" in the Gatekeeper dialog
  4. The app appears in your menu bar and auto-connects to localhost:18790

Note: The app is currently unsigned. macOS will block it on first launch โ€” the right-click โ†’ Open step bypasses this once.

Release a new version

git tag v1.0.1-bar && git push origin v1.0.1-bar

This triggers the CI workflow to build a universal binary (Apple Silicon + Intel), package a DMG, and create a GitHub Release.

Manual Setup

If you prefer to set things up yourself:

Python

git clone https://github.com/kody-w/openrappter.git
cd openrappter/python
pip install .

# Check status
python3 -m openrappter.cli --status

# List all agents
python3 -m openrappter.cli --list-agents

# Store a memory
python3 -m openrappter.cli --task "remember the deploy command is npm run deploy"

# Run a shell command
python3 -m openrappter.cli --exec Shell "ls"

TypeScript

cd openrappter/typescript
npm install && npm run build

# Check status
node dist/index.js --status

# Store and recall memory
node dist/index.js "remember that I installed openrappter"
node dist/index.js "recall openrappter"

# Shell command
node dist/index.js "ls"

Built-in Agents

Python Runtime

Agent Description
Shell Execute bash commands, read/write files, list directories
ManageMemory Store important information with content, importance, tags
ContextMemory Recall and provide context from stored memories
LearnNew Generate new agents from natural language โ€” writes code, hot-loads, installs deps

TypeScript Runtime

Agent Description
Assistant Copilot SDK-powered orchestrator โ€” routes queries to agents via tool calling
Shell Execute bash commands, read/write files, list directories
Memory Store and recall facts โ€” remember, recall, list, forget
Dream Memory consolidation โ€” deduplicates entries, prunes stale facts, logs what it cleaned
MorningBrief Daily briefing pipeline โ€” chains Web (weather), calendar, Memory (priorities), TTS
DailyTip 30-day onboarding drip โ€” sends native notification with one feature tip per day
Update Self-update โ€” checks GitHub for new releases, pulls and rebuilds
Browser Headless browser automation for web scraping, testing, and interaction
CodeReview Deterministic heuristic code review โ€” checks for bugs, security, and style
Cron Manage scheduled jobs โ€” add, remove, enable/disable recurring agent tasks
Git Git repository operations โ€” status, diff, log, branch management
HackerNews Fetch top Hacker News stories
Image Analyze and process images from URLs
LearnNew Generate new agents from natural language descriptions at runtime
Message Multi-channel messaging โ€” Telegram, Slack, Discord, and more
Ouroboros Self-evolving agent โ€” reads its own source, generates improved versions across 5 generations
Pipeline Declarative multi-agent pipeline runner with data_slush threading
SelfHealingCron Autonomous health check agent with auto-restart and alerting
Sessions Chat session management โ€” list, retrieve, switch conversations
TTS Text-to-speech synthesis with multiple voice options
Watchmaker Agent ecosystem manager โ€” evaluates quality, A/B tests, promotes winners
Web Fetch web pages and search the web with SSRF protection

Creating Custom Agents โ€” The Single File Agent Pattern

Every agent is a single file with metadata defined in native code constructors:

  1. Native metadata โ€” deterministic contract defined in code (Python dicts / TypeScript objects)
  2. Python/TypeScript code โ€” deterministic perform() implementation

One file = one agent. No YAML, no config files. Metadata lives in the constructor using the language's native data structures.

๐Ÿ“„ Read the Single File Agent Manifesto โ†’

Python โ€” python/openrappter/agents/my_agent.py

import json
from openrappter.agents.basic_agent import BasicAgent

class MyAgent(BasicAgent):
    def __init__(self):
        self.name = 'MyAgent'
        self.metadata = {
            "name": self.name,
            "description": "What this agent does",
            "parameters": {
                "type": "object",
                "properties": {
                    "query": {"type": "string", "description": "User input"}
                },
                "required": []
            }
        }
        super().__init__(name=self.name, metadata=self.metadata)

    def perform(self, **kwargs):
        query = kwargs.get('query', '')
        return json.dumps({"status": "success", "result": query})

TypeScript โ€” typescript/src/agents/MyAgent.ts

import { BasicAgent } from './BasicAgent.js';
import type { AgentMetadata } from './types.js';

export class MyAgent extends BasicAgent {
  constructor() {
    const metadata: AgentMetadata = {
      name: 'MyAgent',
      description: 'What this agent does',
      parameters: { type: 'object', properties: { query: { type: 'string', description: 'User input' } }, required: [] }
    };
    super('MyAgent', metadata);
  }

  async perform(kwargs: Record<string, unknown>): Promise<string> {
    const query = kwargs.query as string;
    return JSON.stringify({ status: 'success', result: query });
  }
}

Python agents hot-load automatically. TypeScript agents require npm run build after creation.

Soul Templates

Prebuilt rappter personas you can summon with one call. Each template defines which agents are included, a system prompt personality, and an emoji.

Template Emoji Category Personality
assistant ๐Ÿฆ– general Default โ€” full agent access
coder ๐Ÿ’ป development Senior engineer โ€” writes code, ships PRs
reviewer ๐Ÿ” development Code review specialist โ€” finds bugs
researcher ๐Ÿ”ฌ research Searches, reads, synthesizes findings
analyst ๐Ÿ“Š research Turns raw data into insights
ops ๐Ÿ›  operations Monitors, heals, deploys, alerts
scheduler โฑ operations Automates everything that repeats
narrator ๐ŸŽ™ creative Voice-first โ€” speaks all responses via TTS
oracle ๐Ÿ”ฎ creative Meta-AI that evolves and improves agents
companion ๐Ÿ’ฌ creative Warm conversational AI that remembers everything
# Via gateway RPC
{ "method": "rappter.load-template", "params": { "templateId": "coder" } }
{ "method": "rappter.templates", "params": { "category": "research" } }

Background Daemon & Cron

openrappter runs as a persistent background daemon via macOS launchd (or systemd on Linux). The daemon keeps the gateway alive, runs cron jobs, and maintains Telegram/channel connections.

# Start manually
openrappter --daemon

# Auto-starts on login after onboard (via launchd)
# Cron jobs in ~/.openrappter/cron.json fire automatically

Built-in Cron Jobs

After onboarding, these are pre-configured:

Job Schedule Agent What it does
daily-tip 9am daily DailyTip Sends a native notification teaching one feature
dream-mode 3am daily Dream Consolidates memory โ€” dedup, prune stale
morning-brief 8am daily MorningBrief Weather + calendar + priorities spoken via TTS

Self-Updating

openrappter can check for and install updates from the public repo.

# Check for updates
openrappter --exec Update "check"

# Install update (git pull + rebuild)
openrappter --exec Update "update"

# View changelog
openrappter --exec Update "changelog"

30-Day Onboarding Tips

After setup, you receive one native notification per day at 9am teaching a new feature:

  • Week 1: Basics โ€” chat, memory, shell, status, agents, web search
  • Week 2: Power features โ€” code review, cron, TTS, dream mode, Hacker News, dashboard
  • Week 3: Customization โ€” LearnNew, soul templates, pipelines, self-healing, marketplace
  • Week 4: Advanced โ€” Watchmaker evolution, data sloshing, channels, browser, skills

Each notification is clickable โ€” opens the OpenRappter Bar app (or web dashboard) so you can try the feature immediately.

# Preview all tips
openrappter --exec DailyTip "preview"

# Send a specific day's tip
openrappter --exec DailyTip "15"

Data Sloshing

Every agent call is automatically enriched with contextual signals before perform() runs:

Signal Keys Description
Temporal time_of_day, day_of_week, is_weekend, quarter, fiscal Time awareness
Query specificity, hints, word_count, is_question What the user is asking
Memory message, theme, relevance Relevant past interactions
Behavioral prefers_brief, technical_level User patterns
Orientation confidence, approach, response_style Synthesized action guidance
Upstream Slush source_agent, plus agent-declared signals Live data from the previous agent in a chain
# Access in perform()
time = self.get_signal('temporal.time_of_day')
confidence = self.get_signal('orientation.confidence')

Data Slush (Agent-to-Agent Signal Pipeline)

Agents can return a data_slush field in their output โ€” curated signals extracted from live results. The framework automatically extracts this and makes it available to feed into the next agent's context via upstream_slush.

# Agent A returns data_slush in its response
def perform(self, **kwargs):
    weather = fetch_weather("Smyrna GA")
    return json.dumps({
        "status": "success",
        "result": weather,
        "data_slush": {                    # โ† curated signal package
            "source_agent": self.name,
            "temp_f": 65,
            "condition": "cloudy",
            "mood": "calm",
        }
    })

# Agent B receives it automatically via upstream_slush
result_b = agent_b.execute(
    query="...",
    upstream_slush=agent_a.last_data_slush  # โ† chained in
)
# Inside B's perform(): self.context['upstream_slush'] has A's signals
// TypeScript โ€” same pattern
const resultA = await agentA.execute({ query: 'Smyrna GA' });
const resultB = await agentB.execute({
  query: '...',
  upstream_slush: agentA.lastDataSlush,  // chained in
});
// Inside B: this.context.upstream_slush has A's signals

This enables LLM-free agent pipelines โ€” sub-agent chains, cron jobs, and broadcast fallbacks where live context flows between agents without an orchestrator interpreting in between.

Architecture

User Input โ†’ Agent Registry โ†’ Copilot SDK Routing (tool calling)
                                        โ†“
                               Data Sloshing (context enrichment)
                                        โ†“
                               Agent.perform() executes
                                   โ†“           โ†“           โ†“
                            GitHub Copilot   ~/.openrappter/  data_slush โ†’
                            (cloud AI)       (local data)     next agent
openrappter/
โ”œโ”€โ”€ python/
โ”‚   โ”œโ”€โ”€ openrappter/
โ”‚   โ”‚   โ”œโ”€โ”€ cli.py                  # Entry point & orchestrator
โ”‚   โ”‚   โ”œโ”€โ”€ clawhub.py              # ClawHub compatibility
โ”‚   โ”‚   โ”œโ”€โ”€ rappterhub.py           # RappterHub client
โ”‚   โ”‚   โ””โ”€โ”€ agents/                 # Python agents (*_agent.py)
โ”‚   โ””โ”€โ”€ pyproject.toml
โ”œโ”€โ”€ typescript/
โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”œโ”€โ”€ index.ts                # Entry point
โ”‚   โ”‚   โ””โ”€โ”€ agents/                 # TypeScript agents (*Agent.ts)
โ”‚   โ”œโ”€โ”€ package.json
โ”‚   โ””โ”€โ”€ tsconfig.json
โ”œโ”€โ”€ docs/                           # GitHub Pages site
โ””โ”€โ”€ skills.md                       # Complete agent-teachable reference

RappterHub & ClawHub

# RappterHub โ€” native agent registry
openrappter rappterhub search "git automation"
openrappter rappterhub install kody-w/git-helper
openrappter rappterhub list

# ClawHub โ€” OpenClaw compatibility
openrappter clawhub search "productivity"
openrappter clawhub install author/skill-name
openrappter clawhub list

Why "openrappter"?

It's a rappid prototyping agent that's open source. Plus, who doesn't want a velociraptor in their terminal?

Contributing

We welcome contributions! See CONTRIBUTING.md.

git clone https://github.com/kody-w/openrappter.git
cd openrappter/python && pip install -e .
cd ../typescript && npm install && npm run build

License

MIT - Kody W


About

๐Ÿฆ– Local-first AI agent powered by GitHub Copilot SDK โ€” no API keys required

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors