This repository contains a Python runner that fetches articles from arXiv based on a YAML file of topics/queries and publishes them daily to Discord via Webhook.
- Download/clone this repository with the full source code (including the files within the
.github/workflowsfolder). - Push the code to a new repository (GitHub) that you own.
Each topic in the YML file (e.g. topics/hep.yml) contains:
- The query to be executed:
arxiv_url - The environment variable name that holds the Discord webhook URL:
webhook_env
This variable determines where the message will be sent on Discord.

- Select the destination channel.
- Open Settings.
- Go to Integrations.
- Click New Webhook.
- Copy the value from Copy Webhook URL.
This URL is the value that must be stored as a GitHub secret.
- Go to your repository Settings.
- Open Secrets and variables → Actions.
- Click New repository secret.
- Set the value of the secret with the Webhook URL.
In the workflow file:
.github/workflows/check_new_papers.yml
Make sure the secret is exposed as an environment variable.
In your topic file (e.g. topics/topic.yml), set:
Each topic defines its own arXiv query using the arxiv_url field.
This is a direct query to the arXiv Atom API and is consumed as-is by the runner.
No transformation or validation is performed by the system.
To add a new topic:
- Create a new step in the workflow.
- Use the same structure as the existing steps.
- Declare the required secrets.
- Pass the new topic as a parameter to
runner.py.
A detailed execution report can be found under:
GitHub → Actions → arXiv → Discord workflow
Each run prints:
- Fetched articles
- Filtered articles
- Posted messages
- Errors (if any)
Rule of thumb:
If the query is wrong, the system is wrong.
If the variable binding is wrong, nothing will be posted.