Discord support bot for Ryoku with reviewed answers and source-backed replies
3
stars
27
commits
Python
primary language
Aug 28, 2026
updated
The Ryoku support bot for Discord · reviewed answers, safety prompts, and source-backed replies.
Nero is the private Discord bot for answering reviewed Ryoku support questions.
It serves curated responses from data/support.json, adds
safety context for risky actions, and can search a local stable Ryoku checkout
for source-backed answers through Prowl.
Docs · Support catalog · Benchmarks · Discord
python3.12 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
The bot uses a local stable Ryoku checkout for source-backed answers.
git clone https://github.com/neur0map/ryoku-arch.git /path/to/ryoku
Point RYOKU_REPO_PATH in .env at that checkout.
Run this once inside the cloned Ryoku repo:
cd /path/to/ryoku
prowl-agent init --no-input --integrations none
.envSet:
TOKEN to Nero's Discord bot tokenRYOKU_REPO_PATH to your cloned Ryoku checkoutPROWL_AGENT_PATH to the absolute Prowl executable, e.g. /home/neur0map/workspace/prowl-agent/prowl-agent. This prevents service PATH drift.SUPPORT_CHANNEL_ID to the one Discord channel where ordinary messages should be answered. Leave it as 0 to require a mention/reply everywhere.FEEDBACK_DB_PATH to a local SQLite file for Correct/Incorrect signals. It defaults to runtime/nero-feedback.sqlite3 and must be backed up separately from Git.OLLAMA_HOST, GEMMA_MODEL=gemma4:e4b, and LFM_MODEL=lfm2.5:latest for local answersMODEL_NAME, PROWL_TIMEOUT_SECONDS, PROWL_RESULT_LIMIT, and OLLAMA_TIMEOUT_SECONDSNero retrieves the reviewed support card and/or Prowl citations before invoking a model. The model only turns that evidence into a concise Discord reply; it is not permitted to invent a command or a source.
gemma4:e4b) handles normal, reviewed support answers with thinking disabled.lfm2.5:latest) handles replies backed by verified Prowl evidence, including diagnostic and contributor/source questions. Only its final response is sent to Discord.keep_alive: 0. This is deliberate: on this 14 GiB CPU-first host, keeping both models resident can cause model eviction or OOM. Additional Discord requests wait their turn and fall back to the reviewed answer if Ollama is unavailable.uv run --python 3.12 \
--with-requirements requirements.txt \
--env-file .env \
python -B bot.py
In SUPPORT_CHANNEL_ID, users can ask Nero normal Ryoku/Arch support questions without mentioning it. In every other channel, call Nero with @Nero or reply to one of Nero's messages. Mentions and replies work in all channels.
Every Nero reply has Correct and Incorrect buttons. Only the person who asked can submit or revise a rating. Nero stores the rating and the Discord message IDs needed to join it to the future cleaned message archive; it does not add question or answer text to this feedback journal.
Run the unit test suite:
uv run --python 3.12 \
--with-requirements requirements.txt \
python -B -m unittest discover -s tests -v
Run the regression benchmark:
uv run --python 3.12 \
--with-requirements requirements.txt \
python -B benchmark.py --mode hybrid \
--benchmark data/regressions.json \
--ryoku-repo /path/to/ryoku \
--check
Run the local LLM benchmark when Ollama is available:
uv run --python 3.12 \
--with-requirements requirements.txt \
--env-file .env \
python -B benchmark_llm.py --check
The LLM benchmark uses data/llm-evals.json to exercise both routes: Gemma for a reviewed support answer and LFM for a source-cited answer. It records only final Discord-visible text, latency, pass/fail, model, and route metadata; hidden reasoning markers such as <think>, thinking, or hidden-reasoning cause a failure and are redacted from serialized output.
Run the full benchmark with replay sampling:
uv run --python 3.12 \
--with-requirements requirements.txt \
python -B benchmark.py --mode hybrid \
--ryoku-repo /path/to/ryoku \
--replays 3 --check
Python
100.0%
Discord support bot for Ryoku with reviewed answers and source-backed replies
3
stars
27
commits
Python
primary language
Aug 28, 2026
updated
The Ryoku support bot for Discord · reviewed answers, safety prompts, and source-backed replies.
Nero is the private Discord bot for answering reviewed Ryoku support questions.
It serves curated responses from data/support.json, adds
safety context for risky actions, and can search a local stable Ryoku checkout
for source-backed answers through Prowl.
Docs · Support catalog · Benchmarks · Discord
python3.12 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
The bot uses a local stable Ryoku checkout for source-backed answers.
git clone https://github.com/neur0map/ryoku-arch.git /path/to/ryoku
Point RYOKU_REPO_PATH in .env at that checkout.
Run this once inside the cloned Ryoku repo:
cd /path/to/ryoku
prowl-agent init --no-input --integrations none
.envSet:
TOKEN to Nero's Discord bot tokenRYOKU_REPO_PATH to your cloned Ryoku checkoutPROWL_AGENT_PATH to the absolute Prowl executable, e.g. /home/neur0map/workspace/prowl-agent/prowl-agent. This prevents service PATH drift.SUPPORT_CHANNEL_ID to the one Discord channel where ordinary messages should be answered. Leave it as 0 to require a mention/reply everywhere.FEEDBACK_DB_PATH to a local SQLite file for Correct/Incorrect signals. It defaults to runtime/nero-feedback.sqlite3 and must be backed up separately from Git.OLLAMA_HOST, GEMMA_MODEL=gemma4:e4b, and LFM_MODEL=lfm2.5:latest for local answersMODEL_NAME, PROWL_TIMEOUT_SECONDS, PROWL_RESULT_LIMIT, and OLLAMA_TIMEOUT_SECONDSNero retrieves the reviewed support card and/or Prowl citations before invoking a model. The model only turns that evidence into a concise Discord reply; it is not permitted to invent a command or a source.
gemma4:e4b) handles normal, reviewed support answers with thinking disabled.lfm2.5:latest) handles replies backed by verified Prowl evidence, including diagnostic and contributor/source questions. Only its final response is sent to Discord.keep_alive: 0. This is deliberate: on this 14 GiB CPU-first host, keeping both models resident can cause model eviction or OOM. Additional Discord requests wait their turn and fall back to the reviewed answer if Ollama is unavailable.uv run --python 3.12 \
--with-requirements requirements.txt \
--env-file .env \
python -B bot.py
In SUPPORT_CHANNEL_ID, users can ask Nero normal Ryoku/Arch support questions without mentioning it. In every other channel, call Nero with @Nero or reply to one of Nero's messages. Mentions and replies work in all channels.
Every Nero reply has Correct and Incorrect buttons. Only the person who asked can submit or revise a rating. Nero stores the rating and the Discord message IDs needed to join it to the future cleaned message archive; it does not add question or answer text to this feedback journal.
Run the unit test suite:
uv run --python 3.12 \
--with-requirements requirements.txt \
python -B -m unittest discover -s tests -v
Run the regression benchmark:
uv run --python 3.12 \
--with-requirements requirements.txt \
python -B benchmark.py --mode hybrid \
--benchmark data/regressions.json \
--ryoku-repo /path/to/ryoku \
--check
Run the local LLM benchmark when Ollama is available:
uv run --python 3.12 \
--with-requirements requirements.txt \
--env-file .env \
python -B benchmark_llm.py --check
The LLM benchmark uses data/llm-evals.json to exercise both routes: Gemma for a reviewed support answer and LFM for a source-cited answer. It records only final Discord-visible text, latency, pass/fail, model, and route metadata; hidden reasoning markers such as <think>, thinking, or hidden-reasoning cause a failure and are redacted from serialized output.
Run the full benchmark with replay sampling:
uv run --python 3.12 \
--with-requirements requirements.txt \
python -B benchmark.py --mode hybrid \
--ryoku-repo /path/to/ryoku \
--replays 3 --check
Python
100.0%