Sometimes an AI gives you a technically correct answer, but you still cannot follow the explanation. It may skip an important step, introduce too many new terms, or assume you already know a specialist concept.
I created Reexplain For Me, a reusable AI agent skill that addresses this problem. Instead of explaining everything from zero, it starts with what you already know and walks through the difficult part, one step at a time.
What does Reexplain For Me do?
The skill is intended for adults who already know the basics of a subject, but need help with a particular advanced concept. It is especially useful when reading technical documentation, understanding software behaviour, or comparing implementation choices.
Its instructions tell the AI agent to:
Give a short, useful answer before the detailed explanation.
Explain one new idea at a time and define unfamiliar technical terms.
Use one consistent example across several steps, rather than switching examples halfway.
Explain where an analogy stops being accurate.
Correct factual mistakes directly, without unnecessary praise.
Compare choices using their benefits, limitations, risks, and requirements.
Confidence labels help you judge the answer
Another feature is explicit confidence tagging. The skill asks the AI to distinguish what is supported by evidence from what is inferred or uncertain:
[Certain]: a claim supported by checked evidence or a demonstrated calculation.
[Likely]: a strong inference based on the available evidence.
[Guessing]: a claim with insufficient evidence, including an explanation of what information is missing.
These labels are not a guarantee that the model is correct. They are a way to make its assumptions and uncertainty easier to inspect.
How to use Reexplain For Me
With an AI agent that has the skill installed, invoke it by name and identify where the explanation became difficult:
Use $reexplain-for-me. I know what a database index does.
Walk me through why a query planner might scan the whole table anyway.
Use one example and carry it through each step.
If you still do not understand a particular step, you can ask the agent to return to that step and explain it with a smaller example. You can also include a passage, diagram description, or error message to give the agent more context.
Can I use it with other AI agents?
The repository provides the skill in SKILL.md format, with additional Codex metadata under agents/openai.yaml. It is written primarily as a Codex skill, but the instructions are plain text and can be reused in other AI agent environments.
For agents that support compatible skill files, install it using that agent’s supported skill location or import method. For agents that do not, you can adapt the contents of SKILL.md as custom instructions or a reusable prompt. The exact installation procedure and invocation command depend on the agent; not every platform recognizes $reexplain-for-me automatically.
Get the skill on GitHub
Reexplain For Me is available in my GitHub repository. Read the README for the usage example and the complete SKILL.md for its response rules.
The objective is simple: make AI explanations easier to follow without talking down to technically competent readers, hiding uncertainty, or agreeing with incorrect assumptions.
Running a local AI system such as Ollama, Open WebUI, or a Retrieval-Augmented Generation (RAG) application often means preparing a collection of PDF files, Microsoft Word documents, and LibreOffice files. These formats are useful for everyday work, but they are not always easy to parse or index correctly.
MarkForge converts these files into Markdown, a simple text format suitable for local AI knowledge bases. In this guide, we will install the Punctiq version of MarkForge using Docker on Ubuntu Linux and convert documents without sending them to an external service.
MarkForge is an open-source, self-hosted document converter. It supports batch processing, Markdown previews, extraction of figures, optional AI-assisted cleanup, and ZIP exports containing converted documents and associated files.
Document type
Supported extension
PDF
.pdf
Microsoft Word
.docx
Legacy Microsoft Word
.doc
OpenDocument Text
.odt
Important: Several unrelated projects also use the MarkForge name. This article covers github.com/Punctiq/markforge. Its supported Office document formats do not include Excel, PowerPoint, or OpenDocument spreadsheet/presentation files.
Why Markdown for Local AI?
Markdown is plain text with lightweight structure. It can preserve headings, paragraphs, lists, simple tables, and image references without the additional formatting data found in Word files and PDFs.
For a local RAG system, Markdown content can be split into smaller sections, embedded, and stored in a vector database. Keeping the headings can also make the retrieved passages easier to understand. However, conversion is not a guarantee of accurate extraction. Tables, equations, and multi-column pages still need to be checked.
Step 1: Install MarkForge with Docker
We will use Docker on Ubuntu. The project’s Docker image includes dependencies such as LibreOffice and Pandoc.
Clone the source repository:
git clone https://github.com/Punctiq/markforge.git
cd markforge
With the API key left empty, MarkForge can perform normal document conversion without invoking an external AI model. Keep AUTH_ENABLED=false only if the application remains restricted to your own machine or another trusted environment.
Build and start the application:
docker compose up -d --build
Open http://127.0.0.1:8010 in a browser on the Docker host. The provided Compose configuration binds port 8010 to the host’s loopback address, rather than exposing the service directly to the local network or internet.
Check whether the service is responding:
curl http://127.0.0.1:8010/api/v1/health
Step 2: Convert PDF, Word, and ODT Files
Open the MarkForge web interface.
Select a .pdf, .docx, .doc, or .odt document.
Disable AI Cleanup for conversion without LLM calls.
Start conversion and inspect the resulting Markdown preview.
Download the Markdown or the ZIP package containing the output and figures.
The ZIP package is helpful when a document has figures that need to remain together with the Markdown file.
Automate a conversion with curl
MarkForge also provides a conversion API. For example, to convert manual.pdf into a ZIP package:
This approach can be adapted to a local document-processing script. Check the API response and converted content before automatically indexing the output.
PDF limitation: This version uses PyMuPDF to extract existing text. Image-only scanned pages without selectable text are not automatically processed with OCR. Perform OCR separately before conversion if your PDF consists of scanned pages.
Step 3: Optional AI Cleanup with Ollama
MarkForge can optionally send extracted Markdown to an LLM for formatting cleanup. It supports OpenAI-compatible endpoints, including a locally hosted Ollama server.
For MarkForge installed directly on the same host as Ollama, a basic configuration is:
Use a model that you actually have installed. Docker users must change the endpoint: inside the MarkForge container, 127.0.0.1 refers to the container itself, not the machine running Ollama. Configure a reachable host or Docker network address before enabling cleanup.
Safe, Balanced, and Aggressive cleanup modes are available. For technical, academic, and compliance-related documents, begin with Safe mode and compare the output against the original document. An LLM may alter terminology, numbers, or meaning while attempting to improve formatting.
Step 4: Import Markdown into a Local AI Knowledge Base
After conversion, place the Markdown files and extracted figures inside a local folder:
You can then import the documents into an Open WebUI knowledge collection or process them in a custom RAG pipeline. For lengthy material, splitting content by section headings often makes chunks more useful than splitting at arbitrary positions.
Before indexing, check headings, reading order, tables, equations, citations, and references to images. Keep a copy of the source file for future verification.
Why Privacy Matters When Converting Documents
Many websites offer free PDF-to-Markdown and Word-to-Markdown conversion. While convenient, uploading files to a service you do not control may expose confidential information.
This is particularly important for documents containing student records, unpublished academic manuscripts, internal technical specifications, contracts, financial details, or other personal information.
When using a third-party service, you may not have full visibility into document retention, server logging, subcontractors, or how uploaded data is processed. Privacy claims should be checked against the provider’s actual terms and technical practices.
Self-hosting reduces unnecessary exposure by keeping processing on infrastructure under your control. It does not automatically guarantee privacy. If you enable a remote LLM provider for AI cleanup, extracted document content may still leave your network.
For sensitive documents, keep conversion local, disable cloud cleanup, restrict access to the MarkForge server, and secure temporary files and converted outputs. Never expose an unauthenticated document converter directly to the public internet.
Final Thoughts
MarkForge provides a straightforward way to convert PDF, Word, and OpenDocument Text files into Markdown for Ollama, Open WebUI, and other local AI workflows. Its self-hosted installation is useful when the documents should remain on your own computer or trusted server.
For a private RAG knowledge base, the recommended workflow is simple: convert locally, inspect the Markdown, and then index only the verified content.
I’ve put my latest project on GitHub: renogybt-emulator, a Python library and command-line tool that emulates the Bluetooth interface exposed by Renogy BT-1 and BT-2 modules connected to an MPPT solar charge controller.
The aim is to make it easier to develop and test solar-monitoring software without needing a physical controller, solar panels or batteries on the desk.
TLDR; This software make a Linux computer behave like a Renogy solar charge controller over Bluetooth, so you can test your apps without physical solar equipment.
Demo Screenshots From Official Renogy Mobile Application
How it works
The BT-1 and BT-2 modules provide Bluetooth Low Energy (BLE) access to Renogy equipment, using RS232 and RS485 respectively on the controller side. My emulator runs on a Linux computer with a BLE adapter and presents the Bluetooth services and simulated controller data that a compatible client expects.
Underneath, it implements the BLE GATT services and characteristics used for communication, together with a Modbus RTU responder. A client sends a request over Bluetooth, and the emulator replies with values from its simulated register bank. Those values include battery voltage, charging current, solar power, temperatures and load status.
This lets a monitoring application connect to an emulated device and exercise its normal communication path.
Alternatively you can also convert/export multiple mp3 files : ./spectrum.sh *.mp3
Why Use This Script?
The main advantage is simplicity. There is no video editor, GUI application, or complicated workflow involved. FFmpeg handles the audio analysis, visualization, video encoding, and audio encoding in a single operation.
It is also easy to modify the showfreqs parameters if you want different spectrum sizes, positions, frame rates, scaling methods, or visual styles.
For batch processing MP3 files into simple spectrum videos, this small Bash script provides a practical solution.
I have completed and released my latest open-source project, academic-article-schema SKILL.md. a reusable LLM Agent Skill designed for researchers, academicians, journal authors, and research developers who have online web profiles.
The skill generates structured academic metadata for research articles and datasets for use on their online web profiles.
It can produce Google Scholar citation_* meta tags, Dublin Core metadata, Open Graph tags, and Schema.org ScholarlyArticle and Dataset JSON-LD. It also supports configuration of author details, ORCID, institutional affiliation, publisher information, and dataset links.
Why Academic Publication Metadata on Web Pages Matters ?
Publishing a paper online is not enough. Search engines, academic indexes, reference managers, and AI-based research tools need structured information to correctly identify the title, authors, publication date, DOI, journal, dataset, and other important details.
Good metadata can improve the visibility and machine readability of academic publications. It can also help services such as Google Scholar, Google Dataset Search, Zotero, Mendeley, search engines, and AI research tools understand the relationship between a research article, its authors, institution, and associated datasets.
For academicians, this is important because research visibility affects how easily other researchers can discover, reference, and cite our work.
SKILL.md : Reusable LLM Skill
The repository includes a SKILL.md, configurable author defaults, reference material, and example templates. It is designed to be reused across multiple papers instead of rebuilding the same instructions for every project.
The skill can also be adapted for several LLM and agent environments described in the project documentation, including ChatGPT/Codex, Google Antigravity, Open WebUI, Claude Projects, Cursor, and other coding agents.
For researchers who maintain personal academic websites, institutional repositories, research project pages, or dataset pages, this skill provides a practical way to produce more consistent academic metadata with the help of an LLM.
The main objective is simple: make academic publications easier for machines to understand, and therefore easier for people to discover.
A lot of people struggling in configuring PKP Open Journal System 3 (OJS3) to run behind nginx reverse proxy as OJS3 does not support nginx natively
So most implementation would settle with Apache HTTPD server or install it behind nginx reverse proxy.
However the problem is that the OJS3 behave badly when placed behind nginx reverse proxy, especially when the reverse proxy is using HTTPS / TLS. This messed up the based URL in the OJS3, subsequently causing some resources from the website to be unavailable.
To solve this, you only need to add a single line in the Apache HTTPD site configuration file.