AI-powered blog writing toolkit that automates research, planning, and content creation
Features • Installation • Quick Start • Configuration • Documentation • Contributing
| Feature | Description |
|---|---|
| 🔍 Automated Research | Gathers information from the web with source citations |
| 📈 Google Trends | Validates topics and finds rising/related search queries |
| 📝 Smart Outlining | Dynamically chooses layout (Listicle, Deep Dive, Tutorial) |
| ✍️ Premium Writing | WSJ-style prose, human-like flow, and anti-AI-detection |
| 🔄 Blog Enhancement | Improve existing blogs with SEO, content expansion, and fixes |
| 📄 Hugo Compatible | Outputs markdown with YAML/TOML frontmatter & cover images |
| ⚙️ Fully Configurable | Custom API endpoints, models, prompts, and more |
| 🔌 OpenAI Compatible | Works with any OpenAI-compatible API (local or cloud) |
| 🎨 Beautiful CLI | Rich terminal output with real-time progress indicators |
# Clone the repository
git clone https://github.com/suhaibbinyounis/pencraft.git
cd pencraft
# Install the package
pip install -e .
# Or with development dependencies
pip install -e ".[dev]"pip install pencraft# Generate a complete blog post
# Generate a premium blog post with cover image
pencraft write "The Future of Remote Work" \
--words 2000 \
--cover-image "https://images.unsplash.com/photo-1234.jpg" \
--output ./blogs \
--verbose
# Research a topic only
# Research a topic (includes Google Trends analysis)
pencraft research "AI in Healthcare"
# Generate an outline only
pencraft outline "Getting Started with Docker"
# View current configuration
pencraft config --show
# Create a config file
pencraft config --init
# Enhance existing blogs (SEO, content expansion, fixes)
pencraft enhance ./my-blog.md --words 3000
# Enhance entire directory
pencraft enhance ./blogs/ --recursive --words 3000from pencraft import Settings
from pencraft.generator import BlogGenerator
# Create generator with custom settings
generator = BlogGenerator(settings=Settings(
llm={"base_url": "http://localhost:3030/v1", "api_key": "your-key"}
))
# Generate a blog post
blog = generator.generate(
topic="Introduction to Python",
target_word_count=2000,
tags=["python", "programming"],
output_dir="./output"
)
print(f"Generated: {blog.title} ({blog.word_count} words)")
print(f"Saved to: {blog.file_path}")from pencraft import BlogEnhancer, Settings
enhancer = BlogEnhancer(settings=Settings())
# Enhance single file
result = enhancer.enhance(
Path("./my-blog.md"),
target_word_count=3000,
improve_seo=True,
use_trends=True,
)
print(f"Enhanced: {result.original_word_count} → {result.enhanced_word_count} words")
# Batch enhance directory
results = enhancer.enhance_directory(Path("./blogs/"), pattern="*.md")Pencraft supports multiple configuration methods:
export PENCRAFT_LLM__BASE_URL="http://localhost:3030/v1"
export PENCRAFT_LLM__API_KEY="your-api-key"
export PENCRAFT_LLM__MODEL="gpt-4"Create pencraft.yaml:
llm:
base_url: "http://localhost:3030/v1"
api_key: "your-api-key"
model: "gpt-4"
temperature: 0.7
blog:
min_word_count: 1500
include_toc: true
include_citations: true
hugo:
frontmatter_format: "yaml"Use with: pencraft write "Topic" --config pencraft.yaml
LM Studio
- Download LM Studio
- Load a model and start the local server
- Configure:
base_url: "http://localhost:1234/v1"
Ollama
- Install Ollama
- Run:
ollama run llama2 - Configure:
base_url: "http://localhost:11434/v1"
OpenAI
llm:
base_url: "https://api.openai.com/v1"
api_key: "sk-your-key"
model: "gpt-4"pencraft/
├── src/pencraft/
│ ├── agents/ # AI agents (research, planner, writer)
│ ├── config/ # Configuration management
│ ├── formatters/ # Markdown, frontmatter, citations
│ ├── llm/ # OpenAI-compatible client
│ ├── tools/ # DuckDuckGo search, web scraper
│ ├── cli.py # CLI interface
│ └── generator.py # Main orchestrator
├── tests/ # Unit tests
├── examples/ # Usage examples
└── pyproject.toml # Project configuration
| Command | Description |
|---|---|
pencraft write <topic> |
Generate a complete blog post |
pencraft research <topic> |
Research a topic only |
pencraft outline <topic> |
Create a blog outline |
pencraft enhance <path> |
Enhance existing blog(s) with SEO & content improvements |
pencraft config --show |
Display current settings |
pencraft config --init |
Create a config file |
Generated blogs include proper Hugo frontmatter:
---
title: "Introduction to Machine Learning"
date: 2024-01-15T10:30:00+00:00
draft: false
tags: ["machine-learning", "ai", "tutorial"]
categories: ["Technology"]
toc: true
author: "Pencraft"
---
# Introduction to Machine Learning
## Table of Contents
- [What is Machine Learning?](#what-is-machine-learning)
- [Types of Machine Learning](#types-of-machine-learning)
...
## What is Machine Learning?
Machine learning is a subset of artificial intelligence...
## References
1. [Machine Learning Basics](https://example.com) - Official documentation# Install dev dependencies
pip install -e ".[dev]"
# Run tests
pytest tests/ -v
# Run linting
ruff check src/ tests/
ruff format src/ tests/
# Type checking
mypy src/Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests and linting
- Commit (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with LangChain for AI orchestration
- CLI powered by Typer and Rich
- Web search via DuckDuckGo