INDEX Table of Contents (8 sections)

Practical Summary and Core Concept

Amanuensis is a local-first pipeline designed to manage AI-driven social media personas on Mastodon and Bluesky. Unlike cloud-based automation tools, it operates entirely on local hardware, utilizing local LLMs and image generation models. The system is built around a human-in-the-loop architecture, ensuring that every post and reply is reviewed and approved via Telegram before publication. This design addresses the challenge of AI fabrication by grounding content in factual source summaries and requiring human verification, effectively preventing the automated dissemination of unverified or hallucinated technical information.

Prerequisites and System Requirements

To run the Amanuensis pipeline, you must have a machine capable of handling local AI inference. The system requires Python 3.10 or higher and relies on several local services. You must install LMStudio to serve an instruction-tuned model, such as Mistral-7B-Instruct, via an OpenAI-compatible API on port 1234. Additionally, SwarmUI is required for image generation. You must download the Juggernaut XL "Ragnarok" base model separately and apply the 41ex4_p4v10v4 LoRA, which is available from Hugging Face. You will also need a Telegram bot token and chat ID for the approval workflow, along with valid credentials for your target social media platforms. An OpenWeatherMap API key is necessary to provide ambient context for the persona's prompts.

Initial Setup and Configuration

The installation process begins by cloning the repository and installing the necessary dependencies. After setting up the environment, you must configure the .env file to link your local services and social credentials. You must explicitly set LMSTUDIO_BASE_URL (e.g., http://localhost:1234) and SWARMUI_BASE_URL (e.g., http://localhost:7801) to ensure the pipeline can communicate with your local services. The following commands illustrate the initial dependency installation and environment setup:

>_ CLI / SHELL
pip install -e ".[dev]"
cp .env.example .env

The system uses a profile-based architecture, where each persona is defined by a slug. You can create a new profile by copying the structure of the existing alexa profile, which includes identity configuration, Jinja2 prompt templates, and local storage directories for memory and generated content.

The Documented Workflow

The daily operation of Amanuensis is divided into one-shot and persistent processes. The main_batch.py script is a one-shot utility that should be run via cron or manually each day to fetch stories, generate content, and send it to Telegram. In contrast, main_dispatcher.py, main_telegram_listener.py, and main_reply_listener.py are persistent loops that should be managed by systemd or supervisord to ensure continuous uptime. The listener handles the approval, regeneration, or cancellation of posts via the Telegram interface. Once approved, the dispatcher handles the scheduled publication of content, while the reply listener monitors for incoming comments, drafts potential replies, and routes them through the same Telegram approval process.

Understanding the Architecture

The system architecture is modular, separating content curation from generation and publication. Adapters fetch raw data, which is then processed by a curator to handle deduplication and topic filtering. The Brain component interacts with the local LLM to draft text, while the ImageService handles visual generation using the Juggernaut XL base model and the custom LoRA. These components feed into a QueueService backed by SQLite, which manages the approval state. This structure allows for a clear separation of concerns, where the logic for fetching, generating, and publishing is decoupled, facilitating easier maintenance and the potential for adding new social media adapters or persona profiles.

Limitations and Considerations

Amanuensis is documented as an experimental project rather than an active, supported product. The repository provides the code under an MIT license, but the maintainers note that issues and pull requests may not receive responses. Users should be aware that the system relies on specific local hardware configurations. Furthermore, the reliance on local LLMs means that the quality and accuracy of the generated content are heavily dependent on the specific model loaded in LMStudio. The system is designed for users comfortable with managing persistent background processes and local AI infrastructure.

Who Should Use This Tool

This tool is intended for developers or power users who want to experiment with autonomous social media personas while maintaining strict control over the content. It is particularly well-suited for those who prioritize local-first software and want to avoid the privacy and cost implications of cloud-based LLM APIs. Because the system requires a human-in-the-loop for every interaction, it is not an automated "set and forget" tool. It is best used by individuals who are interested in the technical challenges of AI grounding and who are willing to dedicate the time to review and curate the persona's output on a daily basis.

Verification and Testing

Before deploying the system for live use, it is highly recommended to perform a dry run to verify that your local stack is correctly configured. Running python main_batch.py --dry-run will fetch real stories and generate posts and images without writing to any database or sending notifications to Telegram. This allows you to inspect the output and ensure that the LLM and image generation services are communicating correctly. Similarly, python main_dispatcher.py --dry-run can be used to simulate the publication process, logging the intended actions without making actual API calls to Mastodon or Bluesky, providing a safe way to test the entire pipeline.

⚡ GITNEURAL METHODOLOGY & REPRODUCIBILITY GUARANTEE

This technical guide was independently researched and verified against official repositories, container environments, and CLI manifests. GitNeural does not accept paid placements, sponsored reviews, or affiliate kickbacks.