AI portfolio

Vladimir Koptsev

Film director who builds and runs AI agent teams

AI operations for my festival agency STEZA and my production company since February 2026: agents, deterministic gates, human sign-off

I am a graduate of Alexander Sokurov's directing workshop, with 6 films and more than 50 festival selections. Since February 2026, AI agents in Claude Code and Codex have handled correspondence, applications, editing, publishing and bookkeeping for STEZA and my production company. No email, post or application leaves until a script has checked the recipient and the figures and I have said "ok". Below are the systems I run every day, with figures as of the check date. I can build the same mix of agents and checks for your team.

what I am looking forAI operations in a company, team enablement, AI video; employment, contract or project; Barcelona, remote or on site, CET; Russian native, English working

Claude CodeCodexMCPhooksPythonNodeTelethonlaunchdHetznerFastAPISQLiteborgObsidian

00 · Summary as of 12 October 2026

96%

of last week's tasks went to cheaper models picked by a script; the expensive model set each task and accepted the result (161 delegations, 130 accepted on the first pass)

10

guard hooks at the environment level: an email or post goes out only with a ticket, and only a script can issue one

707

automated checks, ALL GREEN, in my open-source MCP server for video editing

150

times cheaper to review images on contact sheets than one by one

7

scheduled jobs run without me, from daily to monthly

9

agents on my own server, about 7 euros a month at list price

00a · How I can help

1

AI operations in a company

I come in and look at the work people repeat every day (client emails, reports, content, bookkeeping), then build agents for it: an agent drafts the client email, a script checks the recipient and the figures, an employee presses "send". I train the team to work with the agents and stay until the system runs without me.

2

Team enablement

Group intensives and one-on-one sessions with owners and managers. We build each person a working agent and decide where it must stop and ask. Then we set up a way to measure its work.

3

Video with generative models

Brand and product videos generated from real footage, with style held from shot to shot and cut straight against live action. The Grave Stakes film teaser is in the Video section below.

Working terms

focus
AI operations in a company, team enablement, AI video
format
employment, contract or project
location
Barcelona, remote or on site
time zone
CET
languages
Russian native, English working

00b · Video: teaser and generated shots

Grave Stakes film teaser: live action cut together with generated shots.

Generated shots for the teaser: Seedance 2.5 started from stills of the real shoot, upscaled in Topaz. Each shot runs 4-10 seconds, no sound.

00c · Architecture

hard cases to the staff chathermes-task.sh from the MacVladimirClaude Code chatMemory322 agent filesObsidian: 3519 notes,2646 linksSkills138 in the library,1-3 loaded per taskHetzner serverHermes · 069 profiles,no root,free NIMmodelsoutputs:support bots,09:30 digesttask96%verdict,outcome:learnsresult for reviewTask router01 · rules in code0 tokensModel ladderFable / Opus /Sonnet / HaikuSubagents9 personalplus one-offCouncils · 04internal DMAD, 7 roles;external panels, 6+6 models; CodexAuthor voice · 0825-text corpus,47 edit pairsoutbound10 guard hooks · 03 · PreToolUse / PostToolUse / StopOutbound gate · 02ticket, risk light,claims map→ emails, applicationsPublishing · 07panel, ticket,feed check→ Telegram, VK,Instagram, LinkedInConnectorsGmail, Calendar, Drive,Sheets, Notion, Vercel;10 MCP servers:Premiere · 05, Telegram,Codex
one picture for all eight cards, the numbers point to them; I am marked in green: tasks leave me, results and verdicts come back to me
For engineers: container diagram (C4)
Vladimir[Person]sets tasks, says "ok"chat: task, "ok"Vladimir's AI team [system]Claude Code CLI[orchestrator,Opus / Fable]sets tasks andreviews resultsTask router[Python, task-router.py]assigns class and modelcallsSubagents[Sonnet / Haiku / Opus]carry out tasksspawnsMemory[Markdown, MEMORY.md]322 agent files, Obsidianreads / writesSkills[SKILL.md, 138 in library]1-3 loaded per taskreadsGuard hooks[settings.json, 10 hooks]block actions without a ticketcheck each callOutbound gate[Python: risk-gate, outbound-ticket]ticket for every emailcallsPublishing pipeline[Python: FastAPI + SQLite]posts go out on ticket and "ok"hands over postsHetzner server[Hermes agent]Gmail,Google Calendar[API]Telegram[Telethon]LinkedInExternalcouncil models[NVIDIA NIM, OpenRouter]SSHMCPHTTPSHTTPSpublishespublishes

C4PersonContainerExternal system

01-08 · System cards

Task router and model ladder

01

task-router.py · 540 lines of Python · 0 tokens per routing decision

what it is
Before delegation, each task gets a class (A mechanical, B heavy compute, C closed or open, D judgment, voice, money, outbound) and a model. Fable plans and accepts key work, Opus reviews and runs open tasks, Sonnet executes, Haiku handles small mechanical jobs. A script assigns the class and model from a rules table without calling any model, so routing costs zero tokens.
how it works
The routing script (task-router.py) has the commands route, outcome, solo, consult, calibrate and status. It learns from verdicts: two failures in a row move a task type one step up the ladder. Moving down is allowed only for classes A and B after five clean accepts, and a rollback freezes the rule for 30 days. Route log: 1965 entries.
in a company
Rules pick the model for each task so the token bill stays under control. The expensive model sets the task and accepts the result, cheaper ones do the work.
human check
I or an Opus reviewer accept each subagent result; the verdict goes into the log and changes future routes.
result
Week to 12 October: 161 delegations (Sonnet 81, Opus 75, main session 5), 130 accepted, 2 sent back for rework, 1 escalation, 3 failures, 23 consultations with the senior model. Orchestration share 96%.
Fable · $10 / $50plans, assigns, accepts23 consultationsOpus · $5 / $25reviewer, open tasks C275 delegations in 7 daysSonnet · $3 / $15main executor, A, B, C181 delegations in 7 daysHaiku · $1 / $5small mechanical jobsD judgment, voice,money, outboundsession modelC2 openA mechanicalB heavy computeC1 closed2 failures in a row:the task type movesone step updown: only A and B,after 5 clean accepts,30-day freeze7 days to 12 October: 161 delegations, orchestration share 96%
prices are API rates per million tokens, input / output; source token-economy.md
$ python3 task-router.py status # trimmed
ladder: haiku -> sonnet -> opus -> fable; classes: A=sonnet, B=sonnet, C1=sonnet, C2=opus, D=session
learned rules: 4
last 7 days: 161 delegations (opus:75, session:5, sonnet:81); verdicts: {'ok': 130, 'retask': 2, 'escalated': 1, 'failed': 3}; rule changes: 1
orchestration share: 96% (5 solo); consultations with the senior model: 23

output translated from Russian; figures as printed on 12 October 2026

Outbound gate: tickets, risk light, claims map

02

outbound-ticket.py · risk-gate.py (721 lines) · claims-map.py · correspondence.py

what it is
No email, message or job application leaves my system without a ticket. A script issues the ticket when the conditions line up: the recipient is known, the text has no money and no unverified third-party facts, and I have said "ok".
how it works
Three ticket types. Red covers one recipient for 30 minutes and needs my "ok" quoted word for word. Batch lasts 6 hours and works only for a fixed address list. Green lasts 60 minutes and needs one of three grounds: an approved template, a reply in a live thread or a short service reply. The risk light (risk-gate.py) defaults to red and decides by rules, with no model involved. It learns from verdicts and incidents, and an incident freezes the ground it slipped through. Claims map: the script refuses a red ticket until every third-party name and number in the email has a line saying where it came from and who confirmed it. Before drafting, the agent rereads the recipient file: what we already wrote to them, what we promised, what we turned down. Follow-up corrections are banned: once an email is sent, nobody amends or retracts it.
in a company
Sales emails to clients: the agent writes, a script checks the recipient and the figures, an employee presses "send".
human check
Any money marker in the text stops the send until a senior model has reviewed it and I have given a word-for-word "ok".
result
Risk light selftest 15 of 15; 867 risk-light decisions in the log; 235 verified claims (names, sums, dates) in recipient files. A send counts as done only when the receiving side shows it (the Sent folder, the channel itself).
$ python3 risk-gate.py selftest
[PASS] service reply, green: exit 0 (expected 0)
[PASS] plain amount of money: exit 2 (expected 2)
[PASS] masked amount (NBSP+ZW): exit 2 (expected 2)
[PASS] red marker "EUR sign": exit 2 (expected 2)
[PASS] red domain from the government list: exit 2 (expected 2)
[PASS] red address in cc: exit 2 (expected 2)
[PASS] service reply with two recipients: exit 2 (expected 2)
[PASS] thread with no history: exit 2 (expected 2)
[PASS] thread with clean history: exit 0 (expected 0)
[PASS] thread with red history (any_red): exit 2 (expected 2)
[PASS] unregistered template: exit 2 (expected 2)
[PASS] telegram channel: exit 2 (expected 2)
[PASS] long service reply: exit 2 (expected 2)
[PASS] attachment in a service reply: exit 2 (expected 2)
[PASS] daily limit: 20 green, the next one exits 2 (expected 2)

SELFTEST PASS: 15 scenarios, live state untouched

output translated from Russian

DraftemailRecipient filewhat we said,promised, denied235 claimsevery name andnumber has asource line?no: back to the draftyesmoney inthe text?noRisk lightrisk-gate,defaultred;selftest 15/15yessenior modelreview, thenVladimir's "ok"green · 60 minapproved template,live thread,service replybatch · 6 haddress list onlyred · 30 minone recipient,quoted "ok"TicketissuedHookoutbound-guard:fresh ticket?nostop, turnto VladimiryesSendCheckon receivingside: Sentfolder, channelLog867 risk-lightdecisionsoutcome, incident:an incident freezes that groundno follow-up corrections: a sent email stays as sent
an email's path from draft to log; the green box is the hook that stops a send without a fresh ticket

Guard hooks at the environment level

03

10 registrations in settings.json · PreToolUse, PostToolUse, Stop, UserPromptSubmit

what it is
Checks that the environment runs before and after agent actions. A hook fires before a tool call and blocks it when a condition fails.
how it works

Outbound. The hook blocks an email without a fresh ticket. It also blocks publishing, editing or deleting a post on social networks and Telegram without a ticket. outbound-guard, publish-guard

Token budget. A subagent gets a warning at its 60th call and loses its tools at the 100th. Subagents go to the background only when told to. Screenshots shrink to 1568 px, and PDFs are read as text, not as images. subagent-step-limit, agent-foreground-default, shrink-image, pdf-to-md

Housekeeping. The agent does not create files "for the owner to read"; content goes to the chat. Every turn gets an exact timestamp. A changed skill triggers a registration reminder, and the knowledge base syncs after each session. reader-guard, now-stamp, skill registration, knowledge base sync

in a company
Agent restrictions live in the environment settings and run before every action: a sales agent cannot send an email without an issued permission.
human check
The hook returns a refusal that says what to get (a ticket, a quoted "ok"), and the turn comes back to me.
result
Without a ticket, the hook blocks the call to the send tool. Lesson from the 19 September 2026 audit: one invalid line in settings.json silently disabled the whole file along with its hooks. Since then a script (claude doctor) checks the hooks after every config edit.
$ hooks from settings.json, file names
PreToolUse ['pdf-to-md-guard.sh', 'shrink-image-hook.sh', 'publish-guard.py', 'outbound-guard.py', 'reader-guard.py', 'subagent-step-limit.sh', 'agent-foreground-default.py']
PostToolUse: reminder to register a changed skill
Stop ['claude-obsidian-sync.sh']
UserPromptSubmit ['now-stamp.sh']

output translated from Russian

Model councils: internal DMAD and external panels

04

council-review · panel-nv (NVIDIA NIM) · panel (OpenRouter) · Codex

Several models read every important decision and every outbound text before I accept it. The internal council follows the DMAD scheme: five advisor subagents with different roles, a devil's advocate and a chair, and confidential material can go there. External panels take non-confidential work: six model families on NVIDIA NIM and six models on OpenRouter, with Codex joining as a second agent through an MCP bridge I wrote. A monthly smoke test checks that the models still respond. I write the synthesis and make the call. A council of 12 agents that wrote 15 rules into a skill took 15 minutes (measured), and a copy of the panel runs on the server for Hermes.

premiere-claude-bridge: MCP server for Premiere Pro and DaVinci Resolve

05

github.com/koptsev63/premiere-claude-bridge · MIT · v0.4.1 Beta · 71 commits

what it is
Open-source tool that lets Claude Code or Codex work inside an editing program as an assistant editor. I built it for my production company and published the code.
how it works
Node MCP server with ten pr_* tools: status, project, sequence, timeline, selection, playhead, markers, export to Adobe Media Encoder, arbitrary ExtendScript. Python core of 25 modules: silence and best-moment search, audio mixing with ducking, subtitles and transcript checks, color gate and technical file QC, edit variants and revisions to a hand-built cut, XML handoff. Adapters for Premiere, DaVinci Resolve (Studio Python API) and FCPXML. Bundle for Claude Desktop and server.json for the MCP registry.
in a company
An editor hands routine work inside their own program to the agent: logging, finding pauses, checking a file before delivery. Meaning and rhythm stay with the editor.
human check
The director decides the meaning and rhythm of the cut. Every error from a real job becomes a code check with a test.
result
28 test suites, 707 checks, ALL GREEN on 12 October 2026; tested on real footage: 108 source files, 4.4 GB.
$ core.tests # premiere-claude-bridge, tail of output
xml_handoff: 11 passed, 0 failed

ALL GREEN

28 suites, 707 checks, 2 skipped

premiere-claude-bridge: repository card

Hermes: server agent with narrow rights

06

Hermes Agent v0.20.2 · Hetzner CPX22 · 9 profiles

A round-the-clock agent that keeps working when my laptop is off: it answers people in support bots, keeps the family books and sends morning digests. It runs as a separate user without root, with one narrow wrapper as its only way into sudo. Approval mode is set to smart, the no-confirmation mode is banned, and mail keys are not in its environment. Nine isolated profiles split the work, all on free models through NVIDIA NIM (Nemotron 3 Ultra, with DeepSeek and Gemini Flash as fallbacks). A bridge script on my Mac (hermes-task.sh) hands it tasks without spending main-session tokens, and it passes hard questions to me in a staff chat. The server costs about 7 euros a month at list price. One profile, Kassa, is a family bookkeeping agent: two models read every receipt independently.

Publishing pipeline with human sign-off

07

postmaster (FastAPI + SQLite) · tg.py (Telethon) · tg-verify.py · tg-scan.py · post-dedup.py

what it is
One panel runs my Telegram channel, VK, Instagram and LinkedIn. The panel has no "publish" button: a script publishes once there is a ticket and my "ok".
how it works
FastAPI and SQLite panel on the server, with an in-process scheduler, a calendar and a text version for each platform. Only I can approve a post, by a tap in the Telegram bot, a word in the agent chat or the "Approve" button on the post page; any edit to the text, image or platform list removes the approval. Before drafting, the agent runs a TF-IDF repeat check against every channel post and the topic map. Before publishing, a script checks the text (text-gate.py: personal stoplist, platform limits, markup) and issues a 30-minute ticket. After publishing, a check script (tg-verify.py) looks at the real rendered post, because an API "ok" does not count as proof. The feed guard (tg-scan.py) rereads the whole feed after 2 and 15 minutes, and a duplicate means stop and report. A long post with an image goes out from my own account through Telethon (a user-account Telegram client), only with a ticket and my "ok". A nightly job saves view counts and a morning card sums up the channel.
in a company
A content team where one person holds the button: agents prepare posts for each platform, and only the manager releases them.
human check
The agent sends me the full post text in chat. I read all of it and write "ok" for specific platforms. Then the script issues a ticket and the pipeline publishes.
result
621 posts of history imported (146 Telegram, 475 VK); 212 posts in the repeat-check base. I dropped the stylometric detector after an audit showed 18-20% false positives on my own texts and replaced it with the repeat check and topic map.

Author voice skill with measured acceptance

08

koptsev-voice v6.7 · 7 genre modes · 25 confirmed texts

what it is
The agent writes in Russian in my voice, and I measure acceptance by draft survival: the share of the draft that stays after my edit. It is 84% over the last ten texts, against a target of 90%.
how it works
Corpus of 25 confirmed texts of mine (about 6400 words) with a provenance map that separates my own voice from character speech and quotes. I log each edit as a dated pair, "agent's phrase, my phrase", and error classes come out of the pairs: 6 classes of things I cut, 12 classes of things I fix. A class needs at least two examples, and the agent writes down what an edit means only after a short interview with me. Stoplist: 15 hard rules and 12 warnings, all from my direct bans. Before showing a draft, the agent runs a "stranger test": a fresh context checks every verb-plus-object pair with three questions.
in a company
Letters and posts in a manager's name: the agent writes in their voice, and the share of edits shows how close it gets.
human check
I edit, and the system learns from the pairs; a whole draft never becomes a reference text.
result
47 dated pairs in the log. Draft survival: target 90%, now 84%, log open.
$ draft survival metric
average over the last 10 drafts: 84% (target >= 90%)

output translated from Russian

09 · Systems week and my week

runs without me

  • daily, about 09:00mail summary cards
  • daily, 09:45festival submission watch
  • weekdays, 10:00watch on a client's film
  • Mondays, 09:30weekly calibration of the risk light and task router
  • Mondays, 10:30family bookkeeping reconciliation
  • 1st of the month, 09:40 and 10:00model panel smoke test, monthly finance close
  • every night, 03:40channel view snapshot
  • after every sessionknowledge base sync; the server pulls it every 15 minutes
  • on a launchd schedulebackups

what I do

  • week to 12 Octoberassigned 161 tasks to subagents, accepted 130, sent 2 back for rework, consulted the senior model 23 times
  • every outbound textI read it in full and say "ok"
  • every incidentI take it apart and write down a rule

10 · Time taken

tasktimewho did itdate, 2026
Internal council of 12 agents and 15 rules written into a skill15 minsubagents and me15 September
Audit of a client's website and chats, transcription of 5 voice messages, edits, deploy, check21 minsession15 September
Project mail audit: 118 threads by script in 1 minute, 59 threads reviewed25 minscript and session15 September
Senior-model review of five emails (6.5 minutes), tickets, sending, check in Sent20 minFable and scripts15 September
Five parallel searches by subagents21 min for the longestSonnet15 September
Press kit in English3.5 minOpus6 October
143 frames and 5 contact sheets32 sSonnet6 October
Smoke test of 22 models and panel line-up rebuildabout 0.8 h-2 October
First encrypted archive: 18073 files, 15.4 GB34 minborg4 September
Upscale from 720p to 4K, 217 frames1.5 minTopaz from the terminal28 September
30 seconds of music6 minACE-Step, local-
Audit of 1297 bookshop catalogue cards against shelf photos, three passes11.4 active hours-9 September
Rework of someone else's fork of keySwitcher (keyboard layout switcher): source recovered from transcripts, 4 fixes, build, signing, autostart1.4 hsession and subagent15 September

active hours counted from transcripts; pauses under 15 minutes count as work

11 · Incident → rule → guard

date, 2026incidentruleguard
8 Septemberstylometry gave 18-20% false positives on my own textsdetector droppedrepeat check and topic map
15 SeptemberI posted by hand after the agent hit its limit, and the panel reported "not published"only the channel itself confirms that a post went outtg-verify.py, reading the channel
15 Septemberinflated time estimatesestimates come only from measurements; the word "weeks" is banned for scripted workmeasurement table time-calibration.md
19 Septemberone invalid line in the config silently switched off all hooksa check after every config editclaude doctor in brain-doctor.sh
6 Octoberrepeated topics in the channelrepeat check before the draftpost-dedup.py (TF-IDF) and topic map
8 Octoberduplicate post in the channelthe whole feed is the source of truth; a duplicate means stop and reporttg-scan.py rereads the feed after 2 and 15 minutes

12 · How it was built

FebMarAprMayJunJulAugFebruary 2026agency and productionmove to AI agents4 Mayrepository openedpremiere-claude-bridge10 Julycontext audit: 35,800tokens of dead weight,rules moved to docs12 August621 posts importedinto the panel18 Augustmodel ladderand task routerSepOct3 Septemberaudit of the city-walkbot: 11 subagents, thereviewer accepted 24 of 244 Septemberfirst encrypted backup,18073 files8 Septemberstylometry dropped:18-20% false positives14 Septembertoken spend audit15 Septembermeasured-time table19 Septemberaudit: invalid config line,two guard hooks2 OctoberCodex connected to ClaudeCode as an MCP server5 Octobercouncil panel copiedto the server for Hermes8 Octoberduplicate post →tg-scan feed guard10 October"stranger test"in the voice skill12 Octoberlive runsand this pageincident → rule
February to August on the upper axis, September and October zoomed in on the lower one; green marks the token audits that produced a rule and two guard hooks

13 · Also in production

1 · ModelsClaude Fable / Opus / Sonnet / Haiku / Codex / NVIDIA NIM: Nemotron 3 Ultra, Kimi K3,GLM 5.3 Flash, DeepSeek V4.1 Flash, Muse Glimmer, DiffusionGemma / OpenRouter /Gemini Flash / Mistral / Groq Whisper2 · Agents, runtimeClaude Code (cockpit) / Codex CLI / Hermes Agent on the server / 9 personal subagents /scheduled jobs3 · Rulesmy layer:moves toany modelCLAUDE.md and AGENTS.md / 138 skills and router / 10 hooks / task router /risk light / tickets4 · Memory322 files / Obsidian, 3519 notes / route log (1965 entries) and correspondence log /borg: 7 daily, 4 weekly, 6 monthly archives5 · ConnectorsGmail, Calendar, Drive, Sheets, Docs, Notion, Vercel / gog CLI / Telethon /Telegram Bot API / Instagram Graph API / VK API / 10 MCP servers: premiere, telegram,codex, stitch, open-design, 21st-magic, agent-bridge, higgsfield, suno, palmier6 · InfrastructureMacBook M5 + launchd / Hetzner VPS + systemd + Docker + nginx / FastAPI + SQLite /Stripe / private GitHub7 · Video and audioPremiere and DaVinci Resolve through my own script sets / premiere-claude-bridge /Seedance 2.5 / Veo 3.1 / Topaz Video / mlx-whisper / ACE-Step 1.5 / Suno / Remotion
toolkit by layer; the rules layer is marked in green, and I carry it over to any model

Operations for STEZA festival agency

Agents pick festivals, check rules and deadlines, write to programmers and prepare submissions. Each film has a live Google Sheet with tabs "Status", "Submissions", "Needed from the author" and "Materials", kept up by the Google command-line client (gog) without a browser. A scheduled job watches submissions every day.

Memory

322 working memory files for the agent; Obsidian as an external brain, 3519 notes, 1219 of them in the graph with 2646 links; sync between the Mac, a private GitHub repo and the server every 15 minutes; a script checks the brain's health for 0 tokens.

Skills

138 skills, 108 of them lazy. The skill router loads one domain profile and 1-3 instructions into context and nothing else; scripts audit the system.

$ skill counter: folders and lazy
folders: 138  lazy: 108

Scheduled jobs

7 recurring jobs (morning mail cards, festival submission watch, weekly calibration, family bookkeeping check, monthly finance close, model panel smoke test) plus one-off jobs for events. On the Mac, launchd runs backups and the nightly channel snapshot.

Backups

borg with an encrypted repository on the server: 7 daily, 4 weekly, 6 monthly archives. The first archive held 18073 files, 15.4 GB. The panel and bot databases have their own backups.

Video

Generation: Seedance 2.5 queued by script, Veo 3.1 through Google Flow.
Processing: Topaz Video from the terminal, mlx-whisper transcription, music with ACE-Step 1.5 locally and Suno.
Editing: DaVinci Resolve and Premiere through my own script sets, Remotion for infographics.

Token accounting

token-usage-report.py reads the session logs. Audits on 14 and 19 September 2026 found leaks (subagent GUI loops, an invalid settings.json), and I closed them with hooks. Contact sheets of 24 images cut the cost of reviewing one frame by a factor of 150.

Barcelona audio walk

Telegram bot that guides a walk through the Gothic Quarter, with a FastAPI control panel and Stripe in test mode.

14 · How to read the terms

MCP
standard that connects an agent to programs and data.
Guard hook
check the environment runs before and after each agent action, whatever the task text says.
Deterministic gate
code makes the decision by fixed rules; no model takes part.
Ticket
one-time, time-boxed permission for one outbound action.
Subagent
separate model instance that gets one task from the main session and hands the result back.
Orchestration share
the main model assigns tasks and accepts results while subagents do the work; the share is the percentage of tasks handed to subagents.
Skill
instruction for one kind of work that the agent loads into context on demand.
Token
unit of text that model usage is billed by.
Draft survival rate
share of an agent's draft that stays after my edit.
Contact sheet
one sheet with 24 thumbnails, so a batch of images gets reviewed at a glance.
Selftest
built-in run of preset scenarios that checks the script decides as expected.
DMAD
multi-agent debate scheme with assigned roles and a devil's advocate.
Telethon
user-account Telegram client: a script posts as a person, not as a bot.
launchd
macOS scheduler.
borg
encrypted, deduplicating backup tool.

15 · Contacts