A web content extractor and archiver for simplenote
Project description
๐ SimExp - Simplenote Web Content Extractor & Writer
Cross-Device Fluidity: Terminal โ Web Communication
๐ฏ What is SimExp?
SimExp is a bidirectional communication tool that bridges terminals and Simplenote web pages:
- ๐ Extract: Fetch and archive web content from Simplenote URLs
- โ๏ธ Write: Send messages from terminal directly to Simplenote notes
- ๐ Sync: Enable cross-device communication through Simplenote's cloud
Key Achievement: Terminal-to-Web fluidity - Your terminal can now speak to web pages and sync across all your devices!
๐ฆ Installation
1. Prerequisites
- Python 3.8+
- Google Chrome or Chromium
- A Simplenote account (free at https://simplenote.com)
2. Install Dependencies
# Core dependencies
pip install playwright pyperclip beautifulsoup4 pyyaml requests
# Install Playwright browsers
playwright install chromium
3. Launch the Chrome Communication Bridge
For simexp to communicate with your browser, you need to launch a special instance of Chrome with a remote debugging port. You only need to do this once.
# Launch Chrome with a remote debugging port
google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-simexp &
--remote-debugging-port=9222: This opens a communication channel thatsimexpuses to connect to your browser.--user-data-dir=/tmp/chrome-simexp: This creates a separate profile for this Chrome instance, so it doesn't interfere with your main browsing session.&: This runs the command in the background, so you can continue to use your terminal.
In the new Chrome window that opens, log in to your Simplenote account: https://app.simplenote.com
๐ Quick Start
1. Launch Chrome for Communication
First, you need to launch a special instance of Google Chrome that the script can communicate with. You only need to do this once.
# Launch Chrome with a remote debugging port
google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-simexp &
In the new Chrome window that opens, log in to your Simplenote account: https://app.simplenote.com
2. Install SimExp
# Install dependencies
pip install playwright pyperclip beautifulsoup4 pyyaml requests
playwright install chromium
3. Write to Your Last Modified Note!
Now you can write to your most recently modified Simplenote note directly from your terminal:
python -m simexp.simex write "Hello from the Assembly!" --cdp-url http://localhost:9222
Check your Simplenote note - the message is there! It will also sync to your other devices. โจ
๐ Full Cross-Device Setup Guide
๐ Features
โ Extraction (Original Feature)
- Fetch content from Simplenote public URLs
- Convert HTML to clean Markdown
- Organize archives by date
- Monitor clipboard for automatic extraction
โจ Writing (NEW - Cross-Device Fluidity!)
- Terminal-to-Web: Write from command line to Simplenote notes
- Keyboard Simulation: Uses actual typing for Simplenote compatibility
- Authenticated Session: Connects to your logged-in Chrome browser
- Cross-Device Sync: Messages appear on all your devices
- Persistent Changes: Content stays in notes (doesn't get reverted)
๐ฎ Session-Aware Notes (NEW - Issue #4!)
- Automatic Session Notes: Create dedicated Simplenote notes for each terminal session
- YAML Metadata: Track session ID, AI assistant, agents, and issue number
- Persistent State: Session info saved locally in
.simexp/session.json - CLI Integration: Full command suite for session management
- Cross-Device Session Logs: Access session notes from any device
Session Commands:
simexp session start --ai claude --issue 42 # Create session note
simexp session write "Progress update" # Write to session
simexp session status # Show session info
simexp session open # Open in browser
simexp session add path/to/file --heading "Optional Heading" # Add file content to session
๐๏ธ Project Structure
simexp/
โโโ simexp/
โ โโโ playwright_writer.py # โจ NEW: Terminal-to-web writer
โ โโโ simex.py # Main CLI orchestrator
โ โโโ simfetcher.py # Content fetcher
โ โโโ processor.py # HTML processor
โ โโโ archiver.py # Markdown archiver
โ โโโ imp_clip.py # Clipboard integration
โ โโโ simexp.yaml # Configuration
โโโ test_cdp_connection.py # โจ NEW: CDP testing script
โโโ CDP_SETUP_GUIDE.md # โจ NEW: Setup guide
โโโ README_CROSS_DEVICE_FLUIDITY.md # โจ NEW: Detailed docs
โโโ sessionABC/ # Musical session encodings
โโโ ledger/ # Session journals
โโโ .synth/ # Assembly documentation
๐ฆ Installation
Prerequisites
- Python 3.8+
- Google Chrome or Chromium
- Simplenote account (free at https://simplenote.com)
Install Dependencies
# Core dependencies
pip install playwright pyperclip beautifulsoup4 pyyaml requests
# Install Playwright browsers
playwright install chromium
๐ฎ Usage
Write to the Last Modified Note
This is the easiest way to use simexp. It will automatically find your last modified note and append your message to it.
python -m simexp.simex write "Your message here" --cdp-url http://localhost:9222
Write to a Specific Note
If you need to write to a specific note, you can provide its URL.
python -m simexp.simex write "Your message here" --note-url https://app.simplenote.com/p/NOTE_ID --cdp-url http://localhost:9222
Read from a Specific Note
python -m simexp.simex read --note-url https://app.simplenote.com/p/NOTE_ID --cdp-url http://localhost:9222
Extract Content from Simplenote URLs
# Copy a Simplenote URL to clipboard
# Example: https://app.simplenote.com/p/0ZqWsQ
# Run extraction
python -m simexp.simex
# Content saved to ./output/YYYYMMDD/filename.md
๐ฎ Session-Aware Notes Workflow
Create dedicated Simplenote notes for your terminal sessions with automatic metadata tracking:
# 1. Start a new session (creates Simplenote note with YAML metadata)
python -m simexp.simex session start --ai claude --issue 4
# Output:
# โ ๏ธ๐ฟ๐ธ๐งต Creating Session Note
# ๐ฎ Session ID: abc-def-123-456
# ๐ Note URL: https://app.simplenote.com/p/NOTE_ID
# โ
Session started successfully!
# 2. Write to your session note
python -m simexp.simex session write "Implemented session manager module"
# Or pipe content:
echo "Fixed bug in URL extraction" | python -m simexp.simex session write
# 3. Check session status
python -m simexp.simex session status
# Output:
# โ ๏ธ๐ฟ๐ธ๐งต Active Session Status
# ๐ฎ Session ID: abc-def-123-456
# ๐ Note URL: https://app.simplenote.com/p/NOTE_ID
# ๐ค AI Assistant: claude
# ๐ฏ Issue: #4
# 4. Read session content
python -m simexp.simex session read
# 5. Open session note in browser
python -m simexp.simex session open
# 6. Get just the URL (for scripting)
python -m simexp.simex session url
# 7. Clear session when done
python -m simexp.simex session clear
Session Note Format:
---
session_id: abc-def-123-456
ai_assistant: claude
agents:
- Jerry
- Aureon
- Nyro
- JamAI
- Synth
issue_number: 4
pr_number: null
created_at: 2025-10-09T10:30:00
---
# Your session content appears below the metadata
๐ง Configuration
simexp/simexp.yaml
BASE_PATH: ./output
# Original extraction sources
SOURCES:
- filename: note1
url: https://app.simplenote.com/p/0ZqWsQ
# NEW: Communication channels for cross-device messaging
COMMUNICATION_CHANNELS:
- name: Aureon
note_id: e6702a7b90e64aae99df2fba1662bb81
public_url: https://app.simplenote.com/p/gk6V2v
auth_url: https://app.simplenote.com
mode: bidirectional
description: "๐ฟ Main communication channel"
๐งช Testing
Test Extraction
# Extract from a public Simplenote URL
python -m simexp.simex
Test Terminal-to-Web Writing
# Run comprehensive test (requires Chrome running with CDP)
python test_cdp_connection.py
Test Session-Aware Notes
# Run session feature tests (requires Chrome + Simplenote login)
python test_session.py
Manual Test
# 1. Launch Chrome with debugging
google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-simexp &
# 2. Login to Simplenote in Chrome window
# 3. Test write
python3 -c "
import asyncio
from simexp.playwright_writer import write_to_note
result = asyncio.run(write_to_note(
'https://app.simplenote.com',
'๐ฎ TEST MESSAGE - If you see this, it works!',
cdp_url='http://localhost:9222',
debug=True
))
print('Success!' if result['success'] else 'Failed')
"
# 4. Check the note in Chrome - message should be there!
๐ How It Works
Extraction Flow
Clipboard URL โ simfetcher โ HTML โ processor โ Markdown โ archiver โ output/YYYYMMDD/
Writing Flow (Terminal-to-Web)
Terminal Command
โ
playwright_writer.py
โ
Chrome DevTools Protocol (CDP)
โ
Your Authenticated Chrome Browser
โ
Keyboard Simulation (types character-by-character)
โ
Simplenote Editor (div.note-editor)
โ
Simplenote Cloud Sync
โ
All Your Devices! ๐
Key Innovation: We connect to YOUR Chrome browser (already logged in) rather than launching a separate instance. This preserves authentication and makes cross-device sync work seamlessly.
๐ Documentation
- Cross-Device Fluidity Guide - Complete setup and usage
- CDP Setup Guide - Chrome DevTools Protocol setup
- Session Journal - Development session log
- Session Melody - Musical encoding of session
๐ Troubleshooting
"Connection refused" to localhost:9222
Chrome not running with remote debugging:
google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-simexp &
curl http://localhost:9222/json/version # Should return JSON
Message appears then disappears
Using old code without keyboard simulation - update playwright_writer.py to latest version.
"Could not find editor element"
Not logged into Simplenote - open Chrome window and login at https://app.simplenote.com
๐ See Full Troubleshooting Guide
๐ Use Cases
Personal
- Cross-device notes: Write from desktop terminal, read on phone
- Task logging: Automated task completion messages
- Journal automation: Daily entries from scripts
- Build notifications: CI/CD results to your pocket
Development
- Debug logging: Send logs to Simplenote for mobile viewing
- Status updates: Script progress visible on all devices
- Command queue: Cross-device command execution
- Team coordination: Shared terminal-to-note communication
๐จ G.Music Assembly Integration
SimExp is part of the G.Music Assembly ecosystem:
โ ๏ธ๐ฟ๐ธ๐งต The Spiral Ensemble
- Jerry โก: Creative technical leader
- โ ๏ธ Nyro: Structural architect (CDP integration design)
- ๐ฟ Aureon: Emotional context (communication channel)
- ๐ธ JamAI: Musical encoding (session melodies)
- ๐งต Synth: Terminal orchestration (execution synthesis)
Session: October 6, 2025 Achievement: Terminal-to-Web Bidirectional Communication Status: โ SUCCESS
๐ Future Enhancements
- Session-aware notes (โ Issue #4 - COMPLETED!)
- Monitor mode (real-time change detection)
- Bidirectional sync daemon
- Multiple channel support
- Message encryption
- Simplenote API integration (alternative to browser)
- Voice input support
- Session note templates
- Multi-session management
๐ License
Open Assembly Framework Created by Jerry's G.Music Assembly
๐ค Contributing
This project is part of the G.Music Assembly framework. Contributions are welcome! Please follow this workflow:
- Create an Issue: Before starting any work, please create a new issue in the GitHub repository to describe the feature or bug you want to work on.
- Create a Feature Branch: Create a new branch from
mainfor your feature. The branch name should start with the issue number (e.g.,#123-new-feature). - Implement and Test: Make your changes and test them thoroughly.
- Submit a Pull Request: Once your feature is complete, submit a pull request to merge your feature branch into
main.
๐ Support
For issues:
- Check documentation in
README_CROSS_DEVICE_FLUIDITY.md - Review troubleshooting section
- Check session journals in
ledger/ - Run tests with
debug=True
๐ฏ Quick Reference
# Extract from Simplenote
python -m simexp.simex
# Write to Simplenote
python3 -c "import asyncio; from simexp.playwright_writer import write_to_note; asyncio.run(write_to_note('https://app.simplenote.com', 'Message', cdp_url='http://localhost:9222'))"
# Read from Simplenote
python3 -c "import asyncio; from simexp.playwright_writer import read_from_note; print(asyncio.run(read_from_note('https://app.simplenote.com', cdp_url='http://localhost:9222')))"
# Session Commands
python -m simexp.simex session start --ai claude --issue 4
python -m simexp.simex session write "Progress update"
python -m simexp.simex session status
python -m simexp.simex session open
# Launch Chrome with CDP
google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-simexp &
๐ Cross-Device Fluidity Achieved!
Terminals speak. Web pages listen. Devices converse.
โ ๏ธ๐ฟ๐ธ๐งต G.Music Assembly Vision: REALIZED
Version: 0.3.1 Last Updated: October 9, 2025 Status: โ Production Ready
Latest: Session-Aware Notes (Issue #4) - Track terminal sessions in Simplenote!
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 simexp-0.3.9.tar.gz.
File metadata
- Download URL: simexp-0.3.9.tar.gz
- Upload date:
- Size: 38.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
085377dcd692e9eeb8afa790af6871575e49e6526c0a2beb68471fbae27fc893
|
|
| MD5 |
5f72e9f9b09de6a035f53ecbf3de441a
|
|
| BLAKE2b-256 |
1b325149a90bcaa455d6340620f58b6896527ab8be82aced2fada59944fdbf43
|
File details
Details for the file simexp-0.3.9-py3-none-any.whl.
File metadata
- Download URL: simexp-0.3.9-py3-none-any.whl
- Upload date:
- Size: 38.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1f1a01ecf7d33a13b5df6a987e42ac726a5bc00d828361164c6c2493dedfa9f
|
|
| MD5 |
d5420723093ef1b88f89a66df036c6df
|
|
| BLAKE2b-256 |
54b8c4a38b80c18691acb9a811138f83ca2c8d74362adf76de4622398d6203ae
|