Pascal — autonomous AI employee runtime
Project description
Pascal — Autonomous AI Employee
An autonomous AI agent that works like a real employee: receives tasks, plans, executes, and reports back.
Getting Started
Install
pip install pascal-agent
Or with all optional features:
pip install "pascal-agent[all]"
Run
pascal
That's it. On first run, Pascal auto-detects your LLM provider or walks you through setup.
Manual setup (optional)
# Interactive setup
pascal setup
# Or set individually
pascal config set provider openai
pascal config set model gpt-5.4-mini
pascal config
Provider setup:
| Provider | Auth | How |
|---|---|---|
| OpenAI | API key | export OPENAI_API_KEY=sk-... |
| Anthropic | API key | export ANTHROPIC_API_KEY=sk-ant-... |
| Codex | ChatGPT Pro OAuth | codex auth login (free with Pro subscription) |
Usage
# Interactive mode (default)
pascal
> Summarize the files in this directory
> Read README.md and explain the architecture
> exit
# One-shot task
pascal "Write a Python script that downloads weather data"
# Set a mission (persistent context)
pascal --mission "You are a data analyst for the marketing team"
# Check current state
pascal --status
# Always-on daemon with Telegram
pascal --daemon
# Resume a paused task
pascal --resume task_abc123
Configuration
Config file (~/.pascal/pascal.toml)
[pascal]
model = "gpt-5.4-mini"
provider = "openai" # openai | anthropic | codex
db_path = "~/.pascal/state.db"
max_effect = "E2" # E0=read E1=analyze E2=write E3=push E4=merge E5=delete
max_tool_rounds = 10 # max tool calls per LLM turn
CLI config commands
pascal config # Show all settings
pascal config set model gpt-5.4-mini # Set a value
pascal config get provider # Get a value
Environment variables (override config file)
PASCAL_MODEL=gpt-5.4-mini
PASCAL_PROVIDER=openai
PASCAL_MAX_EFFECT=E2
API keys can be set as environment variables or saved to ~/.pascal/.env (auto-loaded).
Optional integrations
Telegram bot (~/.pascal/telegram.json):
{"bot_token": "123:ABC...", "owner_chat_id": 12345}
MCP tool servers (~/.pascal/mcp.json):
[{"name": "chrome", "command": "npx", "args": ["chrome-devtools-mcp@latest"]}]
Custom skills (~/.pascal/skills/my-skill.md):
---
name: my-skill
description: What this skill does
---
Instructions for Pascal when this skill is activated...
How It Works
pascal "Do something"
|
v
Desk render (state.py + desk.py)
->
Prompt + tool schemas (prompt.py + schemas.py)
->
LLM picks one action or tool call
->
actions.py dispatches built-ins or named MCP tools
->
governance.py + effect.py + trust.py gate execution
->
tools.py / sandbox.py / mcp.py execute
->
state.py + receipts.py persist outcome
->
compaction.py trims prompt pressure when needed
|
v
Task complete / wait / escalate
Plans are declarative: plan stores a tree on the active task, and each plan call executes one pending leaf before returning the next frontier.
Delegation is mode-aware: one-shot CLI runs delegate inline, while daemon/REPL modes spawn a background child task and use check_delegate to collect the result.
Built-in actions cover shell, editor, computer, UIA, code, task management, planning, delegation, reply, and memory/rule updates. Connected MCP tools can also be exposed directly by name.
Safety is layered:
effect.pyclassifies side effects and appliescompute_threshold()governance.pyblocks stagnation and repeated bad loopstrust.pyscans for injection, credentials, and destructive patternssandbox.pyand workspace-bounded tools constrain executionreceipts.pywrites an append-only JSONL ledger
Daemon Mode
Always-on operation with Telegram integration:
# Setup Telegram first
echo '{"bot_token": "YOUR_TOKEN", "owner_chat_id": YOUR_ID}' > ~/.pascal/telegram.json
# Start daemon
pascal --daemon
Features:
- Telegram DM for tasks and approvals
- Adaptive heartbeat (5min active, 30min idle)
- Auto-restart on crash
- STOP/PAUSE control (
~/.pascal/STOPor~/.pascal/PAUSEfile)
Development
git clone https://gitlab.com/laum0621/pascal.git
cd pascal
pip install -e ".[dev]"
# Tests
python -m pytest tests/ --ignore=tests/test_uia_integration.py -q
# Lint
python -m ruff check src/ tests/
# Type check
python -m mypy src/pascal/
Project Structure
src/pascal/
loop.py ........... Main orchestration loop
actions.py ........ Action dispatch, plan execution, delegate lifecycle
state.py .......... SQLite state, checkpoints, plans, memories
desk.py ........... State -> prompt compiler
tools.py .......... Built-in editor/computer/uia/channel tools
mcp.py ............ MCP connections, discovery, and tool calls
governance.py ..... Stagnation and repetition checks
effect.py ......... Effect classification + compute_threshold()
compaction.py ..... Token budgeting and session summaries
sandbox.py ........ Shell/code isolation
receipts.py ....... Append-only JSONL ledger
scheduler.py ...... Bounded periodic checks and webhooks
daemon.py ......... Always-on Telegram runtime
config.py ......... Config loader and LLM factory
schemas.py ........ Tool schemas, including named MCP tools
prompt.py ......... Base system prompt + PASCAL.md loading
types.py .......... Shared DTOs and plan tree types
llm/ .............. OpenAI, Anthropic, Codex providers
channels/ ......... Telegram adapter
uia.py ............ Windows UI Automation
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pascal_agent-1.3.0.tar.gz.
File metadata
- Download URL: pascal_agent-1.3.0.tar.gz
- Upload date:
- Size: 170.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2bbedadfcbb9115409dd304adc459358d71c422e1e17d9b8df4e0449d893eda6
|
|
| MD5 |
14527a5f1b8ad336f34af618fef5a512
|
|
| BLAKE2b-256 |
729a2b657ce4113b613294ed4cbe62aa11f447fff9344712ac8f7ef50e1fa049
|
File details
Details for the file pascal_agent-1.3.0-py3-none-any.whl.
File metadata
- Download URL: pascal_agent-1.3.0-py3-none-any.whl
- Upload date:
- Size: 125.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c19403f23a283041fce33e6418ca09d32ce829eafc5fa35be39b8f8da35c7434
|
|
| MD5 |
f73af1191abb80101064f4b76808842a
|
|
| BLAKE2b-256 |
999c313243e727e0a6d0425775b66746f16b5dd9c4e1592aa384e70b4b3e525a
|