Chapters

DOC-05 / Technical reference · Chapter 10

The Catalogue of Façades

One façade per module: a map of the agentic harness's executable entry points, by family and invocation mode.

What a catalogue of façades is for

The Synedre's agentic harness is not a monolith: it is a constellation of small executable entry points — Python scripts under synedre/ and binaries under bin/. Each carries a single role. The catalogue of façades maps these entry points with, for each, its family, its one-line role and its typical invocation mode. The goal: that an engineer picking up the repository can quickly find which script does what, without rereading hundreds of files.

The guiding principle is simple — one module, one façade. When a domain of the system (client email, antivirus scanning, deployment) must be touched, there is a single, mandatory entry point. A façade is never bypassed: it is the façade that carries the safeguards.

Extraction method and coverage

The catalogue's descriptions are not invented: they are extracted programmatically from the first docstring or header comment of each file. For Python, a loop reads the module docstring; for bin/* binaries, the first non-banner description line. When a file carries only a boilerplate header (@author / @copyright), the real docstring is fished out a few lines below. This recovery is not systematic, and the reliability of each entry is annotated rather than oversold.

Coverage is tracked explicitly: the catalogue distinguishes the real total of files on disk from the number actually detailed.

CategoryReal total on diskCovered
synedre/*.py~180all listed or attached to a family
bin/* (executable entries)~80 entriesexecutable scripts detailed; data files and caches not detailed one by one
Drift detected. A cross-check between the crontab and the actual contents of synedre/ reveals several dozen dead cron entries: they point to Python files that have been deleted or renamed. The catalogue documents this gap rather than hiding it — an honest catalogue also maps its own holes. These entries are to be cleaned up.

The legend of invocations

Each façade carries a typical invocation mode. Understanding this vocabulary is enough to know how a script is meant to be triggered.

CodeMeaning
cronLaunched by the scheduler, often through a shared watchdog wrapper
CLICalled by hand from the command line
skillFaçade behind a Claude Code skill (.claude/skills/<name>/)
hookClaude Code hook (SessionStart / UserPromptSubmit / PreToolUse / PostToolUse / Stop)
libImported module, not a standalone entry point
workerDaemon or loop draining a database queue

The common base and the data layer

Every family converges on a single database, accessed exclusively through a Python PostgreSQL façade. No script talks to the database directly: it goes through this façade, which centralises the connection, and through an environment façade that loads configuration variables. Secrets live in out-of-repository environment files (gitignored) — never in plaintext in the code or the documentation.

Above this layer sits a base of cross-cutting façades, shared by every other family.

FaçadeRoleInvocation
PostgreSQL façadePython access to the single database for all automateslib
Sandbox connection helperDatabase connection for sandboxed agentslib
Environment façadeCentralised loading of configuration variableslib
Structured loggerMandatory logging for all automateslib
Cron wrapperAutonomous watchdog for scheduled automatescron
AI façadeProvider-agnostic layer (embed / complete)lib
Agent invocationCall a Synedre agent from any automateCLI / lib
PII filterStrips personal data before any send to the LLM pipelinelib

Atlas and orchestration

The atlas family carries the orchestrating core: receive an incoming email, classify its intent (run, chantier, question, noise), then act. A doctrinal rule frames agent invocation: an agent is always called through a pseudo-tty terminal (node-pty) that captures its stream of thought for audit, never in an opaque mode.

FaçadeRoleInvocation
Inbox pollPolls the orchestration mailbox at regular intervalscron
Intent classifierClassifies a message's intent via LLMlib / CLI
SpawnLaunches a headless intelligence to act on classified messagesworker
Ship-via-emailTriggers a production release by email, with triple anti-spoof verificationCLI
Post-ship monitoringMonitors after release, with a single automatic rollbackcron
Per-task ReAct cycleRuns a task's reason-act cycleworker
Runaway detectorAuto-pauses tasks blocked too long or too costly in tokenscron
Post-deploy QATwo-tier quality control after deploymentcron / CLI

Chantiers

The chantiers family embodies the multi-step creation workflow: read the request, audit available agents, draft a mission letter, explicitly recruit the team, create the atomic skeleton (chantier + travaux + tasks). The official "chantier from email" façade runs these steps under constraint.

FaçadeRoleInvocation
Chantier from emailCreates a client chantier from an incoming emailCLI / skill
Live chantierLive tail of agent events on a chantierCLI
Mission letterGenerates a draft mission letterlib
Auto-explode discoveryLLM pipeline turning a discovery into implementation tasksworker
Token estimatorEstimates token cost and recommends a model per tasklib
Pattern detectorSpots recurring patterns across task iterationscron
Validation QAQuality validation of a travail by its teamworker
Lead scannerDetects incoming leads from appointment bookingscron / skill

Audits, quality and security

A whole family watches over the system's health: nightly audits of automates, of the database schema, of dependencies, of backups; automated pentest; accessibility audit; HTTP monitoring of production sites. The principle: observe continuously, alert, and apply an automatic fix only under a strict safeguard.

FaçadeRoleInvocation
Automates auditNightly audit of all automatescron
Schema auditDaily audit of the database schema vs naming conventioncron
Backups surveillanceDaily check of database backupscron
Restore testMonthly restorability test of a database dumpcron
PentestAutomated pentestCLI / skill
Accessibility auditWCAG 2.2 AA auditCLI
Uptime monitoringHTTP monitoring of production sitescron
QA gate (review)Heuristic quality-review verdict (go / with reservations / no-go)CLI
Infra auditUnified infra audit of mothership and tenantsCLI / skill
OSS-safety auditScans the OSS core against any leak of tenant-specific lexiconCLI
Multi-tenant smoke testSmoke test of sites, failing on a server-error HTTP responseCLI

Memory, scars and learning

This family carries the system's learning loop: harvesting scars from the git history, LLM re-qualification, injecting active scars at session start through hooks, nightly memory consolidation, and semantic recall via vector search. Memory lives on three levels — working memory, a Zettelkasten second brain, vector semantic memory — but the database remains the only source of truth.

FaçadeRoleInvocation
Scar harvestAutomatic harvest of scars from the git historycron
Scar re-qualificationBatch LLM reclassification of scarscron
Session-start injectionHook reconnecting active memory at session starthook
Pre-tool injectionHook injecting scars before a tool runshook
Post-chantier lessonDrafts a pedagogical retrospective after a chantierCLI / skill
Nightly consolidationConsolidates memory overnightcron
Semantic recallVector search retrieving the relevant noteCLI / skill
Second-brain indexingIndexes the Zettelkasten into the semantic storecron
Context trackingEstimates the context budget consumed in a sessionlib / skill
Immutable hard-floorLoads and validates the manifest of immutable P0 blockslib / skill

Inbox and client email

A hard rule governs this family: the intelligence never sends an email to a client directly. Everything goes through a single email façade, in two beats — a draft, then an explicit send after human validation. A hook blocks any attempt to use a direct SMTP client. The mailbox credentials live in an out-of-repository environment file; their values appear nowhere in the code or the documentation.

FaçadeRoleInvocation
Client emailSend workflow: draft, review, send, archiveCLI (single façade)
Email façade guardHook enforcing the mandatory email façadehook
Inbox syncPolls the inbox into the databasecron
Direct inboxDirect connection to the mail server, as an emergency fallbackCLI / skill
Attachment AV scanFaçade scanning attachments before openingCLI / skill
Tone of voiceResolves the writing register per lead or clientlib
Appointment syncSyncs bookings into the CRM pipelinecron
Cost alertChecks the monthly LLM API total against the budgetcron

Blog, SEO and content

The content family carries DB-first publishing: a publishing engine, article cleanup, cover and carousel generation, SEO duplicate watching, product description generation, and a translation sub-family covering FR → EN (and DE) across the interface, base content and product sheets.

FaçadeRoleInvocation
Publishing engineDB-first article publishingCLI / skill
Blog hygieneAutomatic article cleanupcron
Cover generatorGenerates article cover imagescron / CLI
Carousel generatorProduces square-format social carouselsCLI
Cannibalisation radarDetects SEO duplicates and near-duplicatescron
Product sheet generatorWrites product descriptionsCLI
Content translationCompletes FR-only fields into EN in the databaseCLI

Browser agents

One family drives Playwright for web automation. Its protection doctrine is instructive: a SOCKS proxy handles address reputation but not the browser's behavioural detection; some actions therefore require a visible browser on a residential machine. Classifying the protection always precedes coding the flow.

FaçadeRoleInvocation
Browser agentPlaywright automate with residential egress via proxylib
Browser workerVisible-browser worker on a residential machineworker
Browser job queueInterface to the browser job queueCLI
ScreenshotCaptures pages via headless ChromiumCLI / lib
Fleet scanScans the site fleetcron / CLI

Banking, invoicing and finance

The finance family covers bank synchronisation, statement import with deduplication, recurring invoicing and reminders, and the tracking of production fixes. Write operations on a production database go through a dedicated secure wrapper.

FaçadeRoleInvocation
Bank syncCron entry point for the banking domaincron / skill
Statement importParses a bank export with deduplicationCLI / skill
Recurring invoicingDaily recurring-invoicing croncron
RemindersDaily reminders and reconciliation croncron

Deployment, ship and infra

This family embodies the hard asymmetry rule between deploying and going to production. ./deploy is always the intelligence's job: it deploys to preprod without asking. ./ship is the production release, a manual gesture exclusive to the Founder — the intelligence never touches it. On the mothership itself, deploying means a live rebuild, with no preprod. And before any deployment, you commit: uncommitted changes are lost in the rebuild.

FaçadeRoleInvocation
Deployment helpersFunctions shared across deployment scriptslib
deploy.yaml validationParses and validates the deployment configlib
Git-clean checkVerifies the git tree is clean before deploymentCLI
Safe production SQL writeSecure wrapper for any SQL write in productionCLI
Tenant bootstrapInitialises a new tenant from the templateCLI
ProvisioningAutomatically provisions a machine for a clientCLI
Post-ship health checkHealth check and automatic rollback after releaseCLI
Encrypted backupEncrypted backup of critical files to object storagecron / CLI
Restore from storageRestores a database from an object-storage backupCLI

The Claude Code hooks

Beyond the families above, an entire subsystem lives in hook configuration files. Hooks wire the façades to the key moments of a session's lifecycle: start, before and after each tool, prompt submission, and session end.

MomentHook role
SessionStartResets context tracking, loads the session brief, injects active memory
PreToolUse:BashProduction-write safeguard, mandatory email façade, scar injection
PreToolUse:Edit|WriteScar injection before a file edit
PreToolUse:AgentScar injection before an agent invocation
PostToolUseAutomatic context tracking, ReAct cycle logging, agent telemetry
StopReleases chantier locks, git-clean safeguard (blocks if the git tree is not clean), chantier synchronisation cascade
The "uncommitted git at Stop" safeguard is what embodies the commit-in-flow doctrine: no finished work stays uncommitted. The hook blocks session end as long as the tree is not clean.

Reliability notes

A good catalogue is honest about its limits. Three caveats accompany this one:

  • Scripts whose only header was boilerplate had their real role fished out further down the file — no role was invented, and uncertain cases are annotated.
  • The "invocation" column mixes the certain (verified presence in the crontab) with the inferred (a "daily cron" mention read in a docstring). For scheduling truth, only direct inspection of the scheduler is authoritative.
  • The skill ↔ façade mapping is sourced from skill sheets, which were not all opened one by one: to be confirmed case by case.

This is the spirit of the catalogue: map faithfully, flag the drift, and never oversell certainty.