Stickys is a powerful desktop sticky notes application with integrated AI capabilities through OpenAI Codex and MCP (Model Context Protocol) tools. It provides a seamless experience for note-taking with voice transcription, agent automation, and Docker containerization support.
- ๐ Desktop Sticky Notes: Borderless, always-on-top sticky notes with full drag & resize support
- ๐จ Customizable Colors: Multiple color themes for organizing your notes
- ๐พ Auto-Save: Automatic saving of notes with version history
- ๐ Smart Search: Fuzzy search across all active and saved notes
- ๐ธ Screenshot Capture: Take screenshots of individual notes or regions
- ๐ค Voice Transcription: Real-time speech-to-text using Whisper model
- ๐ค AI Agent Integration: Automated note processing with OpenAI Codex
- ๐ MCP Tool Support: Extensible tool system for AI agents
- ๐ Transcript Graph: Consensus-based text processing for accurate transcriptions
- ๐ณ Docker Support: Full containerization with Codex CLI integration
- ๐ TCP/HTTP API: Remote control via TCP socket (port 47821) and HTTP endpoints
- ๐ ๏ธ WSL & Docker Backends: Flexible execution environments
- ๐ฆ Pip Installable: Standard Python package with dependencies
- Python 3.9 or higher
- Windows 10/11 (primary platform)
- Docker (optional, for containerized Codex)
- Node.js 20+ (for Codex CLI)
# Clone the repository
git clone https://github.com/yourusername/gnosis-stickys.git
cd gnosis-stickys
# Install dependencies
pip install -r requirements.txt
# Run the application
python -m stickys# Install from the package directory
cd Stickys
pip install -e .
# Run the installed package
stickys# Build the Docker image
docker build -f Stickys/Dockerfile -t gnosis/stickys:dev .
# Set environment variable (PowerShell)
$env:STICKY_CODEX_BACKEND = 'docker'
$env:STICKY_CODEX_DOCKER_IMAGE = 'gnosis/stickys:dev'
# Run with Docker backend
python -m stickys# Run with all features enabled
.\Stickys\scripts\run_stickys.ps1 -AutoBuildStickys/
โโโ stickys/ # Main Python package
โ โโโ __main__.py # Entry point
โ โโโ sticky_notes.py # Core application (252KB)
โ โโโ tools/ # Backend implementations
โ โ โโโ docker_codex.py # Docker Codex backend
โ โ โโโ wsl_codex.py # WSL Codex backend
โ โ โโโ tcp_test.py # TCP connectivity testing
โ โโโ mcp_tools/ # MCP tool integrations
โ โโโ logs/ # Application logs
โโโ codex-service/ # HTTP service wrapper
โ โโโ main.py # FastAPI service
โ โโโ Dockerfile # Service container
โโโ scripts/ # Utility scripts
โ โโโ run_stickys.ps1 # PowerShell launcher
โโโ Dockerfile # Main container image
โโโ pyproject.toml # Package configuration
โโโ README.md # This file
STICKY_CODEX_BACKEND: Backend type (dockerorwsl, default:wsl)STICKY_TCP_HOST: TCP server host (default:localhost)STICKY_TCP_PORT: TCP server port (default:47821)
STICKY_WHISPER_MODEL: Whisper model size (default:base.en)STICKY_WHISPER_COMPUTE: Compute type (default:int8)STICKY_ASR_WINDOW: Audio window in seconds (default:15)STICKY_ASR_DEBOUNCE: Debounce time in seconds (default:1.5)
STICKY_CODEX_DOCKER_IMAGE: Docker image name (default:gnosis/stickys:dev)STICKY_CODEX_HOST_DIR: Host directory to mountSTICKY_CODEX_CONTAINER_DIR: Container working directory (default:/workspace)
STICKY_AGENT_SETTLE_SECONDS: Agent idle time before processing (default:20)STICKY_SEARCH_ASSIST: Enable search assistance (default:true)
- Launch the application to see the system tray icon
- Right-click tray icon โ "New Sticky Note"
- Or use the keyboard shortcut:
Win+Alt+S
- Drag: Click and hold the top bar to move notes
- Resize: Drag the corner handle (โข) to resize
- Copy: Click the copy button (๐) or
Ctrl+Shift+C - Screenshot: Click the camera button (๐ท)
- Close: Click the โ button to save and hide
- Click the microphone button (๐ค) to toggle transcription
- Visual meter shows audio levels
- Spinner indicates processing
- Click play button (โถ) to enable agent
- Agent processes note content after idle period
- Pause button (โธ) to disable agent
Connect to port 47821 and send JSON commands:
import socket
import json
import struct
def send_command(cmd):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 47821))
data = json.dumps(cmd).encode('utf-8')
sock.send(struct.pack('!I', len(data)))
sock.send(data)
# Read response
length = struct.unpack('!I', sock.recv(4))[0]
response = json.loads(sock.recv(length).decode('utf-8'))
sock.close()
return response
# Example: Create a note
response = send_command({
'type': 'create_note',
'text': 'Hello from API!',
'x': 100,
'y': 100,
'color': '#ffff99'
})create_note: Create new sticky notelist_active: List all active noteslist_saved: List saved notessearch: Search notes by textread_note: Read note contentupdate_note: Update note text/positiondelete_note: Delete a noteagent_run: Trigger agent processingstatus: Get system status
Place custom MCP tools in the MCP/ directory at repo root:
# MCP/my_tool.py
def my_custom_tool(text: str) -> str:
"""Process text with custom logic"""
return text.upper()Tools are automatically available to the Codex agent.
# Build from repository root
docker build -f Stickys/Dockerfile -t gnosis/stickys:dev .# Start the service container
docker run -d \
--name codex-service \
-p 8000:8000 \
-p 1455:1455 \
-v $(pwd):/workspace \
gnosis/stickys:dev
# Configure environment
export STICKY_CODEX_BACKEND=docker
export STICKY_CODEX_HTTP_URL=http://localhost:8000
# Run the application
python -m stickysThe Docker container exposes an HTTP API on port 8000:
GET /status: Check service healthPOST /exec: Execute Codex commandsPOST /login: Initiate Codex authentication
# Unit tests
pytest tests/
# Integration tests
pytest tests/integration/
# TCP connectivity test
python -m stickys.tools.tcp_test# Format code
black stickys/
# Lint
pylint stickys/
# Type checking
mypy stickys/# Build wheel
cd Stickys
python -m build
# Install locally
pip install dist/Stickys-*.whl- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing) - Open a Pull Request
- Authentication tokens stored in
~/.local/stickys/codex/ - TCP API bound to localhost only
- Docker containers run with limited privileges
- No external network access by default
This project is proprietary software. All rights reserved.
- OpenAI for Codex CLI
- Anthropic for Claude integration
- Faster Whisper for voice transcription
- The Python community for excellent libraries
For issues and questions:
- GitHub Issues: Create an issue
- Email: dev@nuts.services
Made with โค๏ธ by the Gnosis team