Skip to content

rappter1/openrappter

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

137 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

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"

macOS Menu Bar App

Download OpenRappter Bar from Releases β€” it's a .dmg with a drag-to-Applications installer.

First launch: macOS may show "unidentified developer" since the app isn't notarized. To open it, right-click the app β†’ Open β†’ Open. You only need to do this once.

Or build from source:

cd macos
./scripts/build-mac-app.sh
./scripts/codesign-mac-app.sh
./scripts/create-dmg.sh
# DMG created at macos/dist/OpenRappterBar-1.0.0.dmg

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

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.

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

Languages

  • TypeScript 73.0%
  • Python 16.1%
  • Swift 6.6%
  • Shell 2.9%
  • HTML 1.2%
  • Dockerfile 0.2%