← Files
<!-- ──────────────────────────────────────────────────────────────────────────── PROFILE README · Mikhail Deynekin (@paulmann) · rev.3 · 2026-10 Design language: dark GitHub palette (#0d1117 / #161b22 / #58a6ff / #a371f7), motion where it earns its place (animated SVG banner & wave divider, typing lines, capsule waves), live shields badges for repo vitals, native mermaid diagrams, self-hosted SVG cards for unique content. MAINTENANCE (quarterly): 1. Re-run build_svg_assets.py from the delivery package → refreshes local SVG 2. Run qa/link_check.py from the delivery package → every URL must stay 200 3. markdownlint this file (config: delivery package qa/.markdownlint.json) 4. Update release versions in toolchain tables; refresh «Currently». Badge logos: simple-icons (CC0-1.0). Live badges: shields.io. ──────────────────────────────────────────────────────────────────────────── --> <div align="center"> Mikhail Deynekin — Senior SysAdmin &amp; Developer, AI/LLM Infrastructure: animated knowledge-graph hero banner

Typing SVG — current focus lines

<img alt="Double-edged waving ribbon divider, full width" src="assets/divider.svg" width="100%" /> </div> <details> <summary>🧭 Contents — the page is long on purpose; jump straight to what you need</summary> <br/>
  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

</details>

👋 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.

<br clear="right"/>

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"]

🧠 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.

<p> <img alt="Python 3.13+ badge" src="assets/badges/r-py313.svg" /> <img alt="PowerShell 7.6+ badge" src="assets/badges/r-ps76.svg" /> <img alt="MCP server with 23 tools badge" src="assets/badges/r-mcp.svg" /> </p>

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

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”.

<details> <summary>🔌 MCP tool reference — the full <code>ragraf_*</code> contract (23 tools)</summary> <br/>
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.

</details>

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.

<p> <img alt="PHP 8.4 badge" src="assets/badges/php.svg" /> </p>
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

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.

<p> <img alt="Bash 4.2+ badge" src="assets/badges/bash.svg" /> </p>
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

📚 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.

<p> <img alt="PHP 8.3+ badge" src="assets/badges/php.svg" /> </p>

🔧 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.

<p> <img alt="Python badge" src="assets/badges/py.svg" /> </p>

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

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#


🧰 Tech stack#

<div align="center">

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

</div>

📊 Live metrics#

<div align="center"> <img alt="Top languages card for @paulmann by code volume" height="290" src="assets/cards/langs.svg" /> <img alt="Commit streak stats for @paulmann" height="165" src="https://streak-stats.demolab.com/?user=paulmann&theme=github-dark-blue&hide_border=true&card_width=420" /> <img alt="Repository distribution by domain card" height="250" src="assets/cards/domains.svg" />

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.

</div>

🏅 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 % PolyForm Noncommercial 1.0.0 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
<details> <summary>🗂️ Repository navigator — all public repos by domain</summary> <br/>

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

</details> <details> <summary>📬 Email infrastructure arsenal — extended</summary> <br/> </details> <details> <summary>🖥️ RDP & remote access toolkit — extended</summary> <br/> </details> <details> <summary>🪟 Windows automation & security — extended</summary> <br/> </details>

🤝 Collaboration#

Where I add value fastest:

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

🧭 Currently#


🌐 Connect#

<div align="center">

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

Infrastructure that survives audits. AI tooling that survives reality.

</div> <img alt="Dynamic waving footer in GitHub dark palette" src="https://capsule-render.vercel.app/api?type=waving&color=0:0d1117,35:1f6feb,70:a371f7,100:0d1117&height=140&section=footer" width="100%" />