Skip to content
View paulmann's full-sized avatar
🎯
Focusing
🎯
Focusing

Block or report paulmann

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
paulmann/README.md

Mikhail Deynekin — Senior SysAdmin & Developer, AI/LLM Infrastructure: animated knowledge-graph hero banner

Typing SVG — current focus lines

Double-edged waving ribbon divider, full width
🧭 Contents — the page is long on purpose; jump straight to what you need
  1. About me
  2. Operating principles
  3. Expertise matrix
  4. AI & LLM engineering — RAGRAF · AI-Consensus · ctf · LLM Code Projector · MD.Viewer · sr-search-replace · MCP reference
  5. Infrastructure engineering — Windows & RDP · email · web/PHP · Linux
  6. Tech stack
  7. Live metrics
  8. Quality bar
  9. Documentation & reference
  10. Repository navigator (collapsed catalogue below)
  11. Collaboration · Connect

👋 About me

I am Mikhail Deynekin — a senior sysadmin and developer based in Frankfurt am Main, Germany, in IT continuously since 1991: from DOS workstations and BBS boards to Kubernetes-era infrastructure and, today, LLM agent tooling. I build the kind of software I want to operate at 3 a.m.: idempotent, self-documenting, honest about its failures, and measurable.

  • 🔧 35+ years across Windows & Linux infrastructure: automation, hardening, forensics
  • 🤖 Current focus: code knowledge graphs for agents (RAGRAF), MCP contracts, multi-model consensus (AI-Consensus)
  • 📧 Email infrastructure specialist: hMailServer, Exim, Roundcube, SpamAssassin, SPF/DKIM/DMARC
  • 🖥️ RDP security toolkit author and the Windows 11 25H2 enablement script used in production fleets
  • 🧾 Docs-as-product: every serious repo ships architecture notes, agent regimens, options references
  • 🌐 deynekin.com · 📬 Mikhail@Deynekin.com · 🕐 replies within 24 h

Note

How I work in one sentence: measure first, automate second, document always — and never let a tool guess silently when it could say “I don’t know, here is why.”


🧭 Operating principles

# Principle What it looks like in code
1 Verifiable facts over plausible text RAGRAF answers only with file:line proofs and provenance: stated/derived; benchmarks live in bench/results/, not in marketing
2 Honest degradation, never silent failure No Joern layer → capability=degraded and a plain refusal from slice; Clear-TempFolders ships a DryRun mode; ctf never executes what it reads
3 Idempotence by default hMailServer-Spam-Provisioner is safe to re-run on every boot; ctf snapshots are reproducible with per-file hashes
4 Zero-dependency core, optional power layers ctf = one POSIX script; RAGRAF embeddings run without torch, Joern is optional; MD.Viewer needs no build, DB, or framework
5 Documentation is the product Six-part council design in AI-Consensus, an agent integration regimen in RAGRAF, token-budget guides in ctf — and this profile

🎯 Expertise matrix

Domain Depth Evidence in this profile Core tech
AI & LLM engineering Building agent tooling: RAG, MCP servers, multi-model consensus, context pipelines RAGRAF · AI-Consensus · ctf · LLM Code Projector Python 3.13, PHP 8.4, SQLite (graph+FTS5+vectors), tree-sitter, MCP
Email infrastructure Production mail since the pre-cloud era: MX, filtering, deliverability, webmail 8 repos under Email infrastructure hMailServer, Exim, SpamAssassin, Roundcube, SPF/DKIM/DMARC
Windows & RDP security Fleet automation, session forensics, upgrade engineering, security-log analysis 12 repos under Windows & RDP security PowerShell 5.1–7.6, C#, Windows Security log, BITS, GPO-level hygiene
Web & PHP backend Single-file engines, IIS + FastCGI deployments, WordPress/WooCommerce ops HTML.PHP · MD.Viewer · IIS-PHP-FastCGI-AutoDeploy PHP 8.3+, IIS, WordPress, WooCommerce
Databases PostgreSQL/MySQL operations: encoding migrations, cache truncation, tuning & replication pg-encoding-migrator · Clean-RoundCube-Cache-PostgreSQL-Windows PostgreSQL, MySQL/MariaDB, PDO with prepared statements
Linux & network ops RouterOS filtering, certificate hygiene, disk/power management, cron discipline sata-spindown-guard · cert-unifier · Bash_WP-CLI_Update Bash, RouterOS, hdparm, Let’s Encrypt

🤖 AI & LLM engineering

Not a pile of experiments — a connected toolchain. Each tool closes one gap of the agent-assisted development loop, and every gap I hit in my own work became a repo:

flowchart LR
  ctf["ctf<br/>sources → one<br/>token-budgeted doc"] --> sess(("LLM<br/>session"))
  ragraf["RAGRAF<br/>code knowledge graph<br/>23 MCP tools"] --> sess
  sess --> cons["AI-Consensus<br/>multi-model council:<br/>roles → consensus"]
  cons --> proj["LLM Code Projector<br/>markdown → real<br/>file structures"]
  proj --> view["MD.Viewer<br/>docs, published<br/>beautifully"]
  proj --> sr["sr-search-replace<br/>surgical edits<br/>with rollback"]
Loading

🧠 RAGRAF — a graph-and-vector knowledge base of code for LLM agents

Answers “where is it, who calls it, what breaks if I change it, how is it done elsewhere” with verifiable file:line facts — instead of blind rg and full-file reads. One SQLite per corpus holds the graph, the BM25 lexicon, the vectors and the drift ledger.

RAGRAF last commit RAGRAF license MIT Python 3.13+ badge PowerShell 7.6+ badge MCP server with 23 tools badge

Indexing pipeline & stores

flowchart TB
  scan["scan — walk + checksums"] --> ast["ast — tree-sitter: symbols, calls, SQL"]
  ast --> load["load"] --> resolve["resolve — names"]
  resolve --> schema["schema — tables from migrations"]
  schema --> cpg["cpg — Joern interprocedural calls (optional)"]
  cpg --> lexvec["lexvec — FTS5 + vectors + raw chunk text"]
  lexvec --> g[("graph.sqlite<br/>nodes · edges · db schema")]
  lexvec --> l[("lexvec.sqlite<br/>BM25 + vectors + chunks")]
  lexvec --> c[("control.sqlite<br/>revisions · drift ledger · telemetry")]
  g --> mcp{{"23 MCP tools · 22 CLI operations"}}
  l --> mcp
  c --> mcp
Loading

Measured, not promised — real PHP portal, 14 navigation tasks, artifacts in bench/results/:

Metric Without the index With RAGRAF
Tool calls for 14 tasks 28 (modelled realistically 43) 14
Average calls per task 2.0 / 3.1 1.0
Candidates to review up to 34 files 1–5 exact
Files read in full 14 (minimum) 0
Target-file hit on the first query — 92 % (12/13)
Verifiability (facts with file:line) — 100 %

Three design decisions, each born from a measured defect

  1. Immutable index + drift ledger instead of “update on the fly”. Inside a revision the index never changes; code edits accumulate in the ledger and affected facts turn stale. Mixing timestamps inside one answer is exactly how wrong conclusions are born.
  2. No free-form graph query language for the agent. Fixed operations only: in LLMxCPG (USENIX Security ’25) base models produced 132/1278 and 19/1278 valid CPGQL queries versus 1278/1278 for a fine-tuned one — a query language turns base models into error generators.
  3. Every fact carries proof: path:line, provenance (stated / derived), index_rev, confidence. An edge without evidence looks credible only because it came “from the database”.
🔌 MCP tool reference — the full ragraf_* contract (23 tools)
Tool Answers
ensure bootstrap: corpus is indexed and current before the session starts
index_status revision, parse completeness, degradation, ledger size
drift_report ledger of divergences between index and code
drift_ack acknowledge ledger entries after review
search “where is this written about” — hybrid BM25 + vector; --with-text returns snippets from the index
symbol definition site: kind, file, lines, signature
references where else the symbol is used
callers who calls it
callees what it calls
impact what a change affects — proven and heuristic links reported separately; mandatory before edits
slice structural slice (nodes, edges, lines) without function bodies — full capability only
code symbol bodies; text from the index by default, `text_source: index
repo_map repository map within a character budget; chars_used is measured, not estimated
schema what is in a DB table (from migrations)
table_usage who reads or writes the table
routes routes and entry points
live_read the current file on disk with differences from the index highlighted
policy_trace who gets a permission, and under which condition
class_usage a styling class: where defined, where applied, what diverges
write_check is this write valid — write plan checked against the schema before running
usage call telemetry and effect estimation
freshness is the index current (checksum comparison)
catalog corpus registry: what is indexed, with which checksums

There is, and will be, no free-form graph query tool (FT-15): a MATCH … RETURN attempt is rejected with code -32602.

Quick start

ragraf init <project-dir>                       # creates config/myproject.yaml
python tools/ragraf.py --project config/myproject.yaml index
{
  "mcpServers": {
    "ragraf": {
      "command": "python",
      "args": ["<repo>/tools/ragraf-mcp.py", "--project", "<repo>/config/myproject.yaml"]
    }
  }
}

Important

Degradation is a feature. No Joern layer → capability=degraded and an honest refusal from slice; no embedding model → lexical search still works; no free port → the server says why. Silent degradation never happens.

🏛️ AI-Consensus — an OpenCorum-style council of LLMs

A PHP 8.4 web application where several models deliberate in defined roles, a consensus engine scores their agreement, and every answer ships a clickable DAG of the whole session. Full audit trail: every model response, every step, every score — in MySQL.

AI-Consensus last commit AI-Consensus license MIT PHP 8.4 badge

flowchart TB
  q["User query"] --> l0["L0 · Skill Router — pick the matching SKILL,<br/>or auto-create one from the query"]
  l0 --> l1["L1 · Query distribution — parallel calls<br/>to multiple roles × models (BotHub, OpenAI-compatible)"]
  l1 --> l2["L2 · Response normalization —<br/>JSON-schema enforcement per role"]
  l2 --> l3["L3 · Consensus analysis —<br/>agreement scores, conflict detection"]
  l3 --> ans["Answer + interactive “Details” DAG"]
  mem[("Vector memory:<br/>short & long term")] -.-> l1
  aud[("MySQL 8 audit trail:<br/>PDO, prepared, transactions")] -.-> l3
Loading
  • SKILLS system — declarative JSON workflows defining agent roles, prompts and consensus rules; the router auto-selects or auto-creates the most relevant SKILL per query.
  • Strict PHP 8.4 — strict types, readonly properties, enums throughout; six-part design doc from architecture to the full CouncilEngine module.

Tip

The council pattern shines where single-model answers are expensive to trust: research synthesis, policy-style questions, architecture reviews.

ctf — collect-to-file: context assembly with a token budget

One self-contained POSIX script (bash 4.2+, shellcheck-clean) that folds a source tree into a single Markdown / JSON / JSONL / text document with relative paths — the document an LLM reasons over best, or a reviewer reads in one pass.

ctf last commit ctf license MIT Bash 4.2+ badge

ctf --budget 60000 src/ > context.md        # LLM context, capped at a token budget
ctf --format jsonl --hashes . > audit.jsonl  # auditable snapshot, per-file hashes
Format Best for
Markdown LLM context & cross-file review: syntax-highlighted, path-annotated
JSON / JSONL machine pipelines, chunkers, RAG ingest
Text diffs, greps, plain archives

It does not shell out to eval, does not execute anything it reads, never writes outside the file you asked for.

🏗️ LLM Code Projector — markdown answers → real file structures

The reverse direction of the loop: feed it a ChatGPT/Claude/DeepSeek/Gemini answer with project trees and code fences — get a runnable directory tree in one command. Recognizes ASCII and Unicode trees, any nesting depth.

./MD_to_Files.sh chatgpt_response.md ./my-new-project

LLM Code Projector last commit LLM Code Projector license MIT

📚 MD.Viewer — zero-build documentation publishing

The loop’s last mile: LLM- and human-written markdown rendered as polished docs. Auto TOC with heading numbering, Mermaid with auto-repair, glossary tooltips, dark mode, code-copy controls, searchable file browser, built-in self-updater — no build step, no database, no framework: copy md.php next to your .md files and open it.

MD.Viewer last commit MD.Viewer license MIT PHP 8.3+ badge

🔧 sr-search-replace — the “apply the fix” step

Universal search & replace with session rollback, binary detection and backup management: the safe way to let an agent (or yourself) touch forty files at once.

sr-search-replace last commit Python badge

Warning

Agent regimen I actually follow (from RAGRAF’s integration doc): start with index_status + drift_report; never base a conclusion on a fact marked stale — live_read it first; whole-file reads are the last resort, not the first reflex.


🏭 Infrastructure engineering

The other half of my life: systems that must stay up, stay secure, and stay boring.

🪟 Windows & RDP security

Project Role
Windows-11-25H2-Update-Script 24H2 → 25H2 via official enablement package KB5054156: BITS fallback, retry logic, signature validation, full logging
RDP-Diagnostic-Tool Complete RDP readiness diagnostics with auto-remediation & reporting
1st-Remote-Session-Manager-Pro Shadow, view-only, disconnect, message, logoff — with GitHub auto-updates
RDPAudit Real-time security monitoring & session auditing (C#)
1st-RDPMon Server-side session monitoring & alerting
Get-Windows-Security-Events-By-IP Forensic Security-log analysis by IPv4/IPv6 with failure-code decoding
.\Upgrade-Win11-To-25H2.ps1 -RetryCount 5    # enterprise guardrails baked in

📬 Email infrastructure — the full delivery chain

flowchart LR
  net((Internet)) --> mx["hMailServer / Exim<br/>MX + TLS"]
  mx --> sa["SpamAssassin (spamd)<br/>daily rule updates"]
  sa --> mb["Mailboxes<br/>idempotent SPAM provisioning"]
  mb --> rc["Roundcube<br/>IIS + PHP FastCGI"]
  rc --> pg[("PostgreSQL<br/>prefs & cache")]
  le["cert-unifier · Let’s Encrypt"] -. TLS .-> mx
  le -. TLS .-> rc
Loading
  • hMailServer at the core: domains, accounts, aliases, lists, CSV/JSON export, antivirus integration (Defender, Kaspersky, ClamAV)
  • SpamAssassin as a Windows service under PowerShell 7 with Task-Scheduler rule updates
  • Deliverability stack: SPF · DKIM · DMARC configured and monitored, not “set and forgotten”
  • Roundcube ops: deployment on IIS + FastCGI, PostgreSQL backend, cache truncation tooling

Tip

Mail troubleshooting order I trust: DNS & rDNS → SPF/DKIM/DMARC alignment → spam-score breakdown → content rules. Nine times out of ten the problem is the first two.

🌐 Web, PHP & databases

🐧 Linux & network ops

  • sata-spindown-guard — cron-based HDD spindown guard (hdparm), safe for unmounted drives
  • cert-unifier — unified PEM (key + chain) for Let’s Encrypt deployments
  • RouterOS filtering & monitoring practice; bash tooling with cron discipline and dry-run habits

🧰 Tech stack

Languages & scripting

PowerShell badge PHP badge Bash badge Python badge JavaScript badge C# badge Perl badge

AI & LLM

OpenAI-compatible APIs badge MCP model context protocol badge RAG graph plus vector badge tree-sitter AST parsing badge SQLite FTS5 plus vectors badge local torch-free embeddings badge

Infrastructure & OS

Windows Server badge Linux badge Docker badge MikroTik RouterOS badge IIS badge

Databases

PostgreSQL badge MySQL / MariaDB badge

Email & web

hMailServer badge Exim badge Roundcube badge SpamAssassin badge WordPress badge Let's Encrypt badge


📊 Live metrics

Top languages card for @paulmann by code volume Commit streak stats for @paulmann Repository distribution by domain card

Stats & language cards are local SVG snapshots rebuilt from the live GitHub API by build_svg_assets.py (delivery package) — immune to third-party rate limits and outages; streak stays live via streak-stats.


🏅 Quality bar

Signal Where to verify
shellcheck-clean tooling ctf v4.0.0 README badge & CI-equivalent checks
SemVer discipline ctf v4.0.0 · Projector v6.0.1 · MD.Viewer v2.11.3 · AI-Consensus v1.0.0
100 % MIT across public repos LICENSE file in every repository
Self-updating deployments MD.Viewer updater.php v3.14.0 · RSM-Pro GitHub auto-updates
Measured performance RAGRAF bench/results/ artifacts · ctf Performance section
Security defaults signature validation (Win11 script) · XSS-safe escaping (HTML.PHP) · admin checks (Print-Spooler-Queue-Cleanup) · prepared statements (AI-Consensus)
Token-budget awareness ctf --budget · ragraf_repo_map chars_used measured volume

📚 Documentation & reference

Every serious repo ships its own field guide. The most useful entry points:

Document Where What it teaches
Agent integration regimen RAGRAF → docs/implementation/INTEGRATION.md Call order, drift discipline, hard rules, MCP config — copy-pasteable into AGENTS.md
Capabilities & design decisions RAGRAF → README The 22-operation contract, 16 parsed languages, three decisions with their measured defects
Council engine design, parts 1–6 AI-Consensus → docs/ Architecture, SKILL JSON schema, MySQL DDL, controller flow, full PHP 8.4 engine
Options reference & token budgets ctf-collect-to-file → README Every flag, four formats, budget fitting, exit codes, Windows notes, performance
Input format & instructions for LLMs LLM Code Projector → README How to format LLM answers so they materialize into clean file trees
Zero-build docs deployment MD.Viewer → README md.php + updater: self-hosted documentation without a toolchain
Enterprise upgrade quickstart Windows-11-25H2-Update-Script → README PowerShell & Batch entry points, parameters, logging layout
Idempotent provisioning contract hMailServer-Spam-Provisioner → README What re-running changes (nothing) and guarantees (everything)
Service-mode SpamAssassin on Windows SpamAssassin-Windows-PS7 → README spamd as a system service + daily rule updates via Task Scheduler
🗂️ Repository navigator — all public repos by domain

AI & LLM RAGRAF · AI-Consensus · ctf-collect-to-file · LLM Code Projector · MD.Viewer · sr-search-replace

Windows & RDP security Windows-11-25H2-Update-Script · RDP-Diagnostic-Tool · 1st-Remote-Session-Manager-Pro · 1st-RDPMon · RDPAudit · Get-Windows-Security-Events-By-IP · Windows-LogOff · windows-show-all-tray-icons · Windows-Cleaner-and-Optimizer · Clear-TempFolders · Print-Spooler-Queue-Cleanup · Import-CaCertificates

Email infrastructure hMailServer-Spam-Provisioner · SpamAssassin-Windows-PS7 · PowerShell_Export-hMailServerData · hMailServer-External-Antivirus · hmailserver-kaspersky-cleanup · hmailserver-clamav-cleanup · Clean-RoundCube-Cache-PostgreSQL-Windows · Contact-Form-7-Spam-Checker

Web, PHP & databases HTML.PHP · IIS-PHP-FastCGI-AutoDeploy · Bash_WP-CLI_Update · woocommerce-1c-data-cleaner · BAS-IP · Clean_BOM_Senior · pg-encoding-migrator

Linux & certificates sata-spindown-guard · cert-unifier

📬 Email infrastructure arsenal — extended
  • hMailServer — domains, accounts, aliases, distribution lists, CSV/JSON export, antivirus integration (Defender, Kaspersky, ClamAV)
  • SpamAssassin on Windows — spamd as a system service under PowerShell 7 with daily rule updates via Task Scheduler
  • Idempotent provisioning — [SPAM] IMAP folders + filter rules for every account, safe to re-run
  • Virus cleanup — Kaspersky and ClamAV scan-and-quarantine tooling for the hMailServer store
  • Deliverability stack — SPF · DKIM · DMARC configuration and hygiene
  • Roundcube — deployment on IIS + PHP FastCGI, PostgreSQL backend, cache truncation tooling
  • Exim — routing, filtering, delivery tuning on Linux
🖥️ RDP & remote access toolkit — extended
🪟 Windows automation & security — extended

🤝 Collaboration

Where I add value fastest:

  • 📧 Email deliverability rescues — SPF/DKIM/DMARC alignment, spam-filter tuning, hMailServer/Exim migrations
  • 🖥️ RDP hardening & session operations for Windows fleets, from diagnostics to forensics
  • 🪟 Windows upgrade/update automation with enterprise guardrails (signatures, retries, logging)
  • 🤖 LLM agent tooling — code knowledge bases, MCP contracts, context pipelines, consensus patterns
  • 🧾 Evidence-based codebase audits — RAGRAF-driven, every finding with file:line

Open-source collaboration is welcome on any repo: issues with reproduction steps get answers, pull requests with tests get merged.

🧭 Currently

  • 🔭 Building: RAGRAF — making code knowledge bases a first-class citizen for LLM agents
  • 🌱 Exploring: agent-safe MCP contracts, consensus scoring for multi-model councils
  • 👯 Open to: collaborations on AI tooling · consulting on email & RDP infrastructure
  • 📫 Reach me: Mikhail@Deynekin.com — I reply within 24 hours

🌐 Connect

Personal website badge: deynekin.com Email badge: Mikhail@Deynekin.com GitHub badge: @paulmann

Infrastructure that survives audits. AI tooling that survives reality.

Dynamic waving footer in GitHub dark palette

Pinned Loading

  1. sr-search-replace sr-search-replace Public

    Universal search and replace tool for files with advanced features: recursive processing, binary detection, session-based rollback, and backup management

    Python 1

  2. Get-Windows-Security-Events-By-IP Get-Windows-Security-Events-By-IP Public

    PowerShell script to analyze Windows Security logs by IP address (IPv4/IPv6), decode logon failure codes, and generate customizable forensic reports with flexible column output.

    PowerShell 1

  3. Clean_BOM_Senior Clean_BOM_Senior Public

    Removes invisible UTF-8 BOM and CRLF from PHP, CSS, JS, TXT, XML, HTM, and HTML files. Prevents fatal PHP errors with namespace/declare. Atomic, safe, and CI-friendly: only changes files if needed …

    PowerShell 1

  4. 1st-RDPMon 1st-RDPMon Public

    RdpMon - Server-side RDP monitoring tool

    JavaScript 1

  5. RDP-Diagnostic-Tool RDP-Diagnostic-Tool Public

    Comprehensive RDP Diagnostic & Remediation Tool for Windows 10/11 - Performs complete diagnostics, automatic remediation, and detailed reporting on system readiness for Remote Desktop Protocol conn…

    PowerShell 5