Sentinal is an autonomous AI agent that monitors ArXiv for new AI research, generates technical blog posts using Gemini (RAG), and publishes them to a Hugo static site.
- Prerequisites: Python 3.10+, PowerShell (Windows).
- Initialize:
Run the setup script to create folders:
.\setup_sentinal.ps1
- Install Dependencies:
pip install -r requirements.txt
- Showcase:
- Sample blog posts:
docs/showcase/blog_posts/ - Sample papers (PDFs):
docs/showcase/papers/
- Sample blog posts:
Ensure your environment is set up correctly:
# Install test dependencies
pip install -r requirements-dev.txt
# Run the full suite
pytest
# Check code coverage
pytest --cov=srcSee tests/README.md for detailed test architecture.
- Configuration:
- Rename
.env.exampleto.env. - Add your
GOOGLE_API_KEY(Gemini).
- Rename
- Hugo Theme:
Download a theme (e.g., Ananke) into
blog/themes/:git clone https://github.com/theNewDynamic/gohugo-theme-ananke.git blog/themes/ananke
Start the agent:
python main.py- Automated Research Monitoring: Tracks ArXiv for new papers in AI/ML
- RAG-Based Generation: Uses retrieval-augmented generation for accurate, grounded content
- State Machine Workflow: LangGraph-powered pipeline with quality gates
- Scheduled Execution: APScheduler for automated daily runs
- Vector Database: ChromaDB for semantic search and retrieval
- Chat Interface: Interactive chat with grounded responses from research papers
The system uses a state machine workflow:
- Download papers from ArXiv
- Extract and chunk text
- Generate embeddings and store in vector DB
- Generate blog post using RAG
- Quality review
- Publish to Hugo site
sentinal/
├── src/
│ ├── core/ # Core models, config, database
│ ├── modules/ # Research, writing, publishing modules
│ ├── rag/ # RAG components (chunking, embeddings, retrieval)
│ ├── scheduler/ # Job scheduling
│ ├── api/ # FastAPI routes
│ └── utils/ # Utilities (logging, PDF extraction, quality check)
├── config/ # Configuration files
├── examples/ # Example outputs
├── ui/ # Web interface
└── main.py # Application entry point



