This release is a pre-release and may not be stable for production use.
Truenex Promoter
Autonomous AI marketing agent for open-source projects. Monitors your repo, discovers promotion opportunities, generates content drafts, and asks for your approval before taking action.
Human-in-the-loop by design. The agent proposes, you decide. No automated posts, no spam, no surprises.
Product Strategy: Open Core + Freemium UI
| Edition | Interface | What's included | Price |
|---|---|---|---|
| OSS | CLI (this repo) | Monitoring, queue, generators, LLM local/remote, hardware analyzer | Free |
| Pro | Desktop UI (Tauri) | System tray, dashboard, analytics, auto-executors | $19/mo |
| Team | Desktop + Cloud | Multi-repo, multi-user, sync | $49/mo |
| Enterprise | SaaS Web | Zero install, white-label, API, support | Custom |
The CLI is and will remain open-source forever. The UI is a closed-source paid add-on.
Current Status
Alpha — dogfooding on Truenex Memory.
What it does
- Monitors GitHub — stars, issues, releases
- Detects milestones — celebrates star milestones (10, 25, 50...)
- Discovers Awesome Lists — finds relevant curated lists for your project
- Finds Stack Overflow questions — unanswered questions matching your tags
- Generates drafts — PR descriptions, social posts, dev.to articles, Product Hunt launches
- Queues for approval — every action waits for your
approveorreject
Quick Start
# Install from PyPI
pipx install truenex-promoter
# or
pip install truenex-promoter
# Configure (optional)
export TRUENEX_PROMOTER_OWNER=your-org
export TRUENEX_PROMOTER_REPO=your-repo
# Check once
trnx-promoter
# or
python -m truenex_promoter
# Run continuously
trnx-promoter --loop
# View pending actions
trnx-promoter --queue
# Approve an action
trnx-promoter --approve <action-id>
# Reject an action
trnx-promoter --reject <action-id> --reason "not relevant"
Configuration
All settings are via environment variables:
| Variable | Default | Description |
|---|---|---|
TRUENEX_PROMOTER_OWNER |
marcomnit |
GitHub owner |
TRUENEX_PROMOTER_REPO |
truenex-memory |
GitHub repo |
TRUENEX_PROMOTER_GITHUB_TOKEN |
— | GitHub personal access token |
TRUENEX_PROMOTER_INTERVAL |
60 |
Check interval in minutes |
TRUENEX_PROMOTER_LLM_PROVIDER |
none |
none, openai, deepseek, kimi, llamacpp |
TRUENEX_PROMOTER_LLM_API_KEY |
— | API key for remote LLM |
TRUENEX_PROMOTER_LLM_MODEL |
— | Model name (e.g. deepseek-chat) |
TRUENEX_PROMOTER_LLM_MODEL_PATH |
— | Path to .gguf file for local LLM |
TRUENEX_PROMOTER_LLM_TEMPERATURE |
0.7 |
Sampling temperature (0.0–2.0) |
ENABLE_AWESOME_FINDER |
true |
Discover Awesome Lists |
ENABLE_STACKOVERFLOW |
true |
Find Stack Overflow questions |
ENABLE_DEVTO |
true |
Generate dev.to drafts |
ENABLE_PRODUCTHUNT |
true |
Generate Product Hunt drafts |
Configuration is validated on startup. Invalid values raise clear error messages.
LLM Configuration
The promoter can use a local LLM (llama.cpp) or remote API.
Local LLM (recommended: Nemotron 3 Nano 4B)
# Download Nemotron 4B Q4 (~3GB)
python -c "from huggingface_hub import hf_hub_download; hf_hub_download(repo_id='unsloth/NVIDIA-Nemotron-3-Nano-4B-GGUF', filename='NVIDIA-Nemotron-3-Nano-4B-Q4_K_M.gguf', local_dir='./models')"
# Configure
export TRUENEX_PROMOTER_LLM_PROVIDER=llamacpp
export TRUENEX_PROMOTER_LLM_MODEL_PATH="./models/NVIDIA-Nemotron-3-Nano-4B-Q4_K_M.gguf"
export TRUENEX_PROMOTER_LLM_N_GPU_LAYERS=-1
# Test
trnx-promoter --llm-check
Remote API (OpenAI, DeepSeek, Kimi)
export TRUENEX_PROMOTER_LLM_PROVIDER=deepseek
export TRUENEX_PROMOTER_LLM_API_KEY=sk-...
export TRUENEX_PROMOTER_LLM_MODEL=deepseek-chat
trnx-promoter --llm-check
Example Output
[2026-05-14 08:38:46 UTC] EVENT: NEW_RELEASE
Title: New release: v0.1.0-alpha.1
URL: https://github.com/marcomnit/truenex-memory/releases/tag/v0.1.0-alpha.1
[2026-05-14 08:38:46 UTC] ACTION PROPOSED (ID: 6696a400)
Title: Announce release v0.1.0-alpha.1
Approve: trnx-promoter --approve 6696a400
Reject: trnx-promoter --reject 6696a400
[2026-05-14 08:38:49 UTC] ACTION PROPOSED (ID: f15b266a)
Title: Propose addition to awesome-mcp-servers
Target: https://github.com/punkpeye/awesome-mcp-servers
Architecture
trnx-promoter check
-> github_monitor.check() # fetch repo state
-> content_generator # draft posts/PRs/articles
-> awesome_finder # discover awesome lists
-> stackoverflow_finder # find relevant questions
-> action_queue.add() # queue for approval (SQLite)
-> notifier.action_proposed() # notify user
User: trnx-promoter --approve ID
-> action_queue.approve() # mark approved
-> executor.execute() # generate file + open browser
Security
- Token sanitization — API keys and tokens are redacted from logs and error messages
- Path traversal protection — executor filenames are sanitized and bound-checked
- Action type whitelist — only known action types can be queued
- Rate limiting — GitHub API calls include retry with exponential backoff
- SQLite persistence — atomic operations prevent race conditions in the action queue
Development
# Clone
git clone https://github.com/marcomnit/truenex-promoter.git
cd truenex-promoter
# Install editable
pip install -e ".[dev]"
# Run tests
pytest tests/ -v
# Build
python -m build
License
Apache 2.0
Metadata
Release files for truenex-promoter 0.1.0a2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| truenex_promoter-0.1.0a2.tar.gz | 41.1 kB | Without provenance | Details for truenex_promoter-0.1.0a2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| truenex_promoter-0.1.0a2-py3-none-any.whl | Python 3 | none | any | Details for truenex_promoter-0.1.0a2-py3-none-any.whl |
Total release size: 88.7 kB
Release files / truenex_promoter-0.1.0a2.tar.gz
| Download URL | truenex_promoter-0.1.0a2.tar.gz |
|---|---|
| Size | 41.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d954e815b3f89e0dfb4b10bd1fb6fdd8eed9922bcaa95b9366e7e15ad3694f5e
|
|
BLAKE2b-256 checksum How to use checksums |
92bf332495569414c29112c8b09fa94f78110eefed66be92922c10c919e8cefc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.1
|
Release files / truenex_promoter-0.1.0a2-py3-none-any.whl
| Download URL | truenex_promoter-0.1.0a2-py3-none-any.whl |
|---|---|
| Size | 47.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7f9a1ed9e82a096a37955cb6e348208133050c715e527d62af096c92d00f7e63
|
|
BLAKE2b-256 checksum How to use checksums |
07ba32c514028a20d780def35dbd5d4254939c25762c610adce7c61e1de95529
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.1
|
Security for truenex-promoter 0.1.0a2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.