01Übersicht
Tender Agent ist ein KI-Assistent für öffentliche Vergabe-Verfahren im DACH- und EU-Raum. Er scannt täglich TED-EU, Bund-Vergabe und Länder-/Kommunal-Portale, filtert nach deinen CPV-Codes, extrahiert Pflicht-Anforderungen aus den Vergabe-Unterlagen und bereitet Bid-Drafts mit Cost-Calculation vor — vor dem Submit-Button stoppt er. Vergabe-Recht ist zu sensibel für vollautomatische Submissions; Final-Review bleibt beim Menschen.
Das Produkt in einem Satz
Ein Plugin ist dein Vergabe-Profil. Der Agent findet passende Tender für dich, extrahiert Anforderungen + Risiken, baut den Bid zu 80 % vor — du finalisierst und reichst ein.
Zielkunde
- Mittelständische Unternehmen mit Vergabe-Erfahrung in DACH
- 10-500 Mitarbeiter — Bid-Volumen 50k €–5M € pro Tender
- Branchen: IT-Dienstleister, Bauleistungen + Bauplanung, Engineering, Beratung, Spezial-Maschinenbau, Sicherheit, Reinigung, Logistik, Pflegedienste
- Aktuell: Vergabe-Recherche kostet 5-15h/Woche manuell, Bids werden in Excel + Word zusammenkopiert
- Tier-Käufer: Pro-Tarif passt für Firmen mit ≥10 Bids/Jahr, Business für ≥30 Bids/Jahr, Enterprise wenn Multi-Region + eigene Vergabe-Portale dazukommen
Was wir NICHT sind
- Kein Auto-Submitter — Bids werden vom Menschen finalisiert + eingereicht
- Kein Vergabe-Berater (Rechts-/Strategie-Beratung bleibt beim Anwalt)
- Kein reines Listings-Tool (das sind dtad.de, vergabe24.de, ted-monitor) — wir liefern AI-Analyse + Bid-Drafting on top
- Nicht für reine Privat-Vergaben (B2B-Sourcing-Tools haben andere Anforderungen)
- Aktuell keine Bauleitplanung-Spezial-Workflows (HOAI / VOB Teil A/B/C generisch unterstützt, nicht tief integriert)
Das Unternehmen dahinter
Stellwerk-Plattform, Startup-Phase 2026, basierend in Hamburg. Tender ist das zweite Modul nach Outreach. Beide laufen auf demselben Plugin-System mit gemeinsamem Memory, Audit-Log und Workspace. Wir sind heute Eat-Your-Own-Dogfood-Kunde — der Agent findet uns Pilot-Kunden + Förderprogramm-Ausschreibungen.
02Architektur
Tender Agent ist ein Modul der Stellwerk-Plattform — TypeScript/ Node.js mit Hono-API, Plugin-System, Postgres-Storage. Der Kernel (Plugin-Registry, EventBus, JobQueue, Memory, Audit- Tracker) ist geteilt mit Outreach. Modul-Code lebt unter agent/src/domains/tender-match/.
Tech-Stack
| Layer | Stack |
|---|---|
| HTTP-Server | Hono (modular pro Plugin gemounted) |
| Runtime | Node.js 20+ mit tsx |
| Database | Supabase (Postgres, Frankfurt EU, RLS aktiv) |
| Vector-Store | pgvector in Supabase (Memory pro Plugin) |
| AI-Provider | Anthropic Claude (3-Tier: Haiku/Sonnet/Opus) |
| PDF-Extraktion | pdf-parse + custom Layout-Heuristik |
| Email-Provider | Resend (Frankfurt EU, Daily-Digest) |
| Tender-Sources | TED-EU XML, Bund-Vergabe RSS, DTAD/DTVP API |
| Calendar | ICS-Generator für Frist-Subscriptions |
| Payment | Stripe (Subscription-Modell) |
| Marketing-Web | Next.js 16 App Router, Vercel |
| Admin-UI | Vanilla TS + Vite (Founder-Tooling) |
| Customer-Workspace | Next.js auf app.stellwerkagents.com |
Die 14 Engines
Jede Engine hat klare Verantwortung, ist isoliert testbar:
| Engine | Verantwortung |
|---|---|
| TenderScanner | Inkrementelle Pulls aus Source-Connectoren mit Cursor-State |
| TenderAnalyzer | PDF/DOCX/ZIP Extraktion, Pflicht-Anforderungen, Risiken |
| TenderMatcher | Score-Berechnung formal/strategic/win-prob × Plugin |
| TenderBidDrafter | AI-Komposition Bid-Sections aus Templates + Anforderungen |
| TenderCalculator | Cost-Calc + Auto-Suggest aus Rates + Heuristik |
| TenderDocumentManager | Eignungsnachweise, Ablauf-Tracking, Bid-Mapping |
| TenderComplianceEngine | Regelbasierte Findings nach severity |
| TenderRbac | Team-Rollen mit Action-Permissions |
| TenderQuestionSuggester | AI-Vorschläge für Bieter-Fragen |
| TenderDigestMailer | Daily-Digest + Frist-Reminders + Resend |
| TenderDeadlineReminder | 7/3/1-Tage-Trigger + ICS-Calendar |
| TenderDiffDetector | Revisions in Bekanntmachungen → Re-Analyse |
| TenderOutcomeTracker | Won/Lost in Memory zum Lernen |
| TenderAuditReport | Strukturierter Report nach BGleichB §47 |
Data-Flow pro Tender
Source-Connector pollt täglich (TED-EU / Bund-Vergabe / DTAD)
↓
Diff-Detector — neu oder Revision?
↓
Insert in tender_tenders (cross-tenant)
↓
Event tender.scanned → fan-out pro Plugin
↓
Matcher: score_overall (formal × 0.4 + strategic × 0.3 + win_prob × 0.3)
├── formal_blocker = true → score=0, raus
└── score >= digest_min_score → in Daily-Digest-Queue
↓
Analyzer lädt Vergabe-Unterlagen (PDF/DOCX/ZIP)
├── Award-Kriterien + Gewichtung
├── Pflicht-Anforderungen (PQ, Zertifikate, Refs)
├── Risiken + ungewöhnliche Klauseln
└── Submission-Frist + Format
↓
Compliance-Engine erzeugt Findings (severity)
↓
Daily-Digest-Mail morgens 06:00 UTC
↓
[Customer entscheidet im Workspace]
├── "Bid drafting" → Bid-Drafter komponiert Sections
├── "Cost-Calc-Suggest" → Calculator schlägt Aufwände vor
├── "Questions-Suggest" → Bieter-Fragen für Aufklärung
└── Status-Lifecycle: draft → in_review → approved → submitted
↓
Frist-Reminder 7/3/1 Tage vor Deadline
↓
Outcome-Tracker: won/lost → Memory speichert Branchen-PatternAI-Model-Tiers
3-Tier-Routing zwischen Anthropic-Modellen — spart 40-50 % LLM-Kosten gegenüber "alles Sonnet":
| Tier | Modell | Wofür |
|---|---|---|
| Light | claude-3-5-haiku | Match-Scoring, Intent-Klassifikation, einfache Extraktion |
| Standard | claude-sonnet-4 | Anforderungs-Extraktion, Bid-Section-Generierung, Compliance-Check |
| Heavy | claude-opus-4 | Komplexe Bid-Drafts (Business-Tier), strategic-fit-Reasoning, Cost-Calc-Begründung |
03Plugin-Konfiguration
Tender-Match wird pro Plugin in plugin_domains.config konfiguriert. Eine valide Config ist Voraussetzung — der Matcher ignoriert Plugins ohne aktive Tender-Domain.
Pflicht-Felder
| Feld | Typ | Beschreibung |
|---|---|---|
cpv_codes | string[] | Mind. 1 × 8-stelliger CPV-Code (siehe §4) |
regions | string[] | ISO-Codes (DE, AT, CH) und/oder NUTS (DE21, DE-BY) |
volume_min_eur | number | Min. Auftragswert (Default 0) |
volume_max_eur | number | Max. Auftragswert (Default 999.999.999) |
sources | string[] | Aktive Source-IDs ("ted-eu", "bund-vergabe", "dtad", …) |
Optional-Felder
| Feld | Default | Beschreibung |
|---|---|---|
excluded_contracting_authorities | [] | Vergabestellen die du nicht sehen willst |
digest_min_score | 60 | Minimum-Score für Daily-Digest (0-100) |
digest.enabled | true | Daily-Digest-Mail aktiv? |
digest.cron | "0 6 * * 1-5" | Werktags 06:00 UTC |
digest.recipient | plugin-contact | Ziel-Email (Fallback Plugin-Contact) |
monthly_match_limit | plan-default | Hard-Limit pro Monat (Plan-Tarif derived) |
reference_connector_id | — | Welche Quelle liefert Referenz-Projekte (sharepoint, hubspot, …) |
reference_filter.cpv_min_overlap | 1 | CPV-Codes-Mindest-Übereinstimmung für Referenz-Match |
reference_filter.max_age_years | 5 | Referenzen nicht älter als N Jahre |
Beispiel-Config (IT-Dienstleister DE)
{
"cpv_codes": [
"72000000", // IT-Dienstleistungen
"72200000", // Softwareprogrammierung + Beratung
"72260000", // Software-bezogene Dienstleistungen
"72500000", // Datendienste
"72260000" // Software-Beratung
],
"regions": ["DE", "DE-BY", "DE-NW"],
"volume_min_eur": 25000,
"volume_max_eur": 500000,
"sources": ["ted-eu", "bund-vergabe", "dtad"],
"excluded_contracting_authorities": [],
"digest_min_score": 65,
"digest": {
"enabled": true,
"cron": "0 6 * * 1-5",
"recipient": "vergabe@deinefirma.de"
}
}Validierung
Configs werden via Zod beim Speichern validiert (siehe tenderMatchPluginConfigSchema). Bei Fehlern: 400 mit pfad-genauen Issues, kein Silent-Save.
04CPV-Codes
CPV (Common Procurement Vocabulary) ist die EU-weit standardisierte Klassifikation für Vergabe-Gegenstände. 8-stellige Codes in Hierarchien gegliedert. Die Wahl deiner CPV-Codes ist die wichtigste Setup-Entscheidung — sie bestimmt was du überhaupt zu sehen bekommst.
Hierarchie verstehen
Beispiel "IT-Dienstleistungen":
72000000— Dienstleistungen im Bereich Informatik (Top-Level)72200000— Softwareprogrammierung + Beratung72240000— System-Analyse + -Programmierung72260000— Software-bezogene Dienstleistungen72261000— Software-Beratung72262000— Software-Wartung
Faustregel: 5-15 spezifische Codes auf 6-8-Stellen-Tiefe; mehr verschwendet LLM-Kosten auf irrelevante Tender, weniger verpasst Matches in Nachbar-Codes.
Hierarchisches Matching
Der Matcher prüft hierarchisch: ein Tender mit 72261000 matched auf dein 72260000 (gleiche Familie). Das vermeidet falsche Negatives wenn der Auftraggeber einen feineren Code wählt als du.
Codes finden
- simap.ted.europa.eu/cpv — offizielle EU-Such-UI
- bund.de/cpv — deutsche Übersetzung
- Im Onboarding helfen wir dir 30 Min lang dabei (Pilot-Tarif inkl.)
Wenn dein Geschäft zwei Welten umfasst
Beispiel "Bauunternehmer mit IT-Sparte" — wir empfehlen zwei separate Plugins: eines mit Bau-CPVs (45*), eines mit IT-CPVs (72*). Sonst werden Matches gemischt + die Memory-Lernkurven verwässern. Plus: Tarif-Limit bei mehreren Plugins macht das Bundle attraktiv.
05Sources
Connectoren-Architektur: jede Quelle ist ein Plugin im Kernel. Plugin-Config gibt an welche Sources aktiv sind, der Scanner orchestriert.
Eingebaute Sources
| ID | Quelle | Abdeckung | Update |
|---|---|---|---|
ted-eu | TED-EU (Tenders Electronic Daily) | EU-weit, ab EU-Schwellenwert (~140k €) | Täglich |
bund-vergabe | service.bund.de Vergabe-Bereich | Bundesebene, alle Wertbereiche | Täglich |
dtad | Deutsches Ausschreibungsblatt | Länder + Kommunen | Täglich |
dtvp | Deutsche Vergabeplattform | Bayern + Baden-Württemberg + diverse Kommunen | Täglich |
evergabe | eVergabe-Online (Bundesbeschaffung) | Bundeswehr, BKA, BMI-nahe Vergaben | Enterprise |
Custom-Connectoren (Enterprise)
Hat dein Konzern eine eigene Lieferanten-Plattform oder regionale Vergabe-Datenbank, die wir nicht abgedeckt haben? Wir implementieren Custom-Connectors gegen Festpreis. Connector- Interface ist im Kernel definiert (Pull-Funktion + Cursor-State + Notice-Mapping).
Cursor-State pro Source
Jede Source hat einen Cursor (tender_sources_state) mit dem letzten Publication-Date + Notice-ID. Beim nächsten Scan wird inkrementell gepullt — keine Doppel-Reads, keine doppelten LLM-Kosten. Bei Fehler bleibt der Cursor stehen, beim nächsten Run wird re-tried.
Health-Status
Pro Source wird healthy-Flag + consecutive_errors getrackt. Im Workspace sichtbar unter Tender → Operations. Bei >3 consecutive_errors gibt es einen Alert in der Admin-UI.
06Match-Scoring
Jedes (Plugin, Tender)-Paar bekommt einen score_overall (0-100), zusammengesetzt aus drei Dimensionen mit gewichteter Summe.
Score-Komponenten
| Dimension | Gewicht | Was es prüft |
|---|---|---|
| formal_fit | 40 % | Pass/Fail-Checks: CPV-Overlap, Region, Volumen-Range, Excluded-Authorities, PQ-Pflicht erfüllbar? |
| strategic_fit | 30 % | Komplexität, Wettbewerbsdichte, Opportunities, Risiken aus Anforderungs-Text |
| win_probability | 30 % | Memory-Hits aus historischen Outcomes (won/lost) bei ähnlichen CPVs/Authorities |
Formal-Blocker
Wenn auch nur einer der Pass/Fail-Checks failed (z.B. CPV ohne Overlap, Region außerhalb, Volumen unter Min): die Match wird mit formal_blocker = true markiert, score_overall = 0 geclamped. UI zeigt "disqualifiziert" mit Begründung — vermeidet, dass Kunden versehentlich auf Tender bieten die formal nicht passen.
Strategic-Fit Komponenten
- Komplexität — low (40) / medium (60) / high (70) / expert (80)
- Wettbewerbsdichte — low (0 Penalty) / medium (-10) / high (-25)
- Opportunities — Plus-Points wenn Anforderungen zu unseren Stärken passen
- Risiken — Minus-Points bei ungewöhnlichen Klauseln, knappen Fristen
Win-Probability via Memory
Memory-Engine recalled für jedes Match die N relevantesten historischen Hits (typisch 8) per CPV-Match + Branchen-Match + Authority-Match. Daraus wird ein Win-Score abgeleitet:
- Hat das Plugin schon mal bei dieser Authority gewonnen? +Boost
- Bei diesem CPV verloren? -Boost
- Lernt mit der Zeit immer genauer (kalt-start: ~50 %)
Heuristik-First, LLM-Second
v1 ist eine deterministische Regel-Engine — transparent, kalibrierbar, testbar ohne LLM. LLM-basiertes Re-Scoring kommt wenn wir genug Outcome-Trainingsdaten haben (Phase 2026 ff). Heuristisch ist es OK weil der Kunde immer den finalen Pass macht — wir müssen nur Top-20 % vorsortieren, nicht perfekt scoren.
07Analyzer
Der Analyzer ist das LLM-intensivste Stück — er extrahiert strukturierte Daten aus Vergabe-Unterlagen, typisch 50-200 Seiten PDF mit 5-20 ZIP-Anhängen.
Was extrahiert wird
| Feld | Beispiel |
|---|---|
| award_criteria | [{ name: "Preis", weight: 40 }, { name: "Qualität", weight: 60 }] |
| required_certifications | ["DIN ISO 9001", "ISO 27001", "Branchenzertifikat XYZ"] |
| requires_prequalification | true |
| references_required_count | 3 |
| references_max_age_years | 5 |
| submission_deadline | 2026-08-15T12:00:00+02:00 |
| submission_format | "electronic_via_eVergabe" |
| contract_duration_months | 24 |
| risks | [{ severity: "high", description: "Penalty-Klausel ungewöhnlich hart" }] |
| opportunities | [{ description: "Verlängerungs-Option auf 48 Monate" }] |
Pipeline
- Download alle Vergabe-Unterlagen (Scanner liefert URLs)
- ZIPs entpacken, PDFs + DOCX zu Text konvertieren
- Layout-Heuristik: Inhaltsverzeichnis erkennen, Tabellen aus PDFs extrahieren
- Token-Aware-Chunking — relevante Abschnitte werden isoliert (Award-Kriterien-Sektion, Eignungs-Sektion, …)
- Sonnet-Call pro Chunk mit strukturierter JSON-Response
- Aggregation + Validation gegen Zod-Schema
- Persist in
tender_requirements
LLM-Kosten
Typisch 10-50 € pro 100 analysierte Tender — abhängig von Komplexität + PDF-Größe. Im Workspace getrackt unter Settings → Cost-Tracking. Caching: identische PDFs werden nicht doppelt analysiert (Hash-basiert).
08Bid-Drafter
Auf Knopfdruck baut der Drafter aus extrahierten Anforderungen + deinen Templates einen strukturierten Bid-Draft. Ziel: 80 % fertig, finaler Pass + Submit beim Menschen.
Sektionen die generiert werden
| Section | Quelle | AI-Anteil |
|---|---|---|
| executive_summary | AI aus Tender-Kontext + Branche | 100 % |
| company_intro | Aus Plugin-Templates | 0 % |
| references | Document-Manager-Match nach CPV-Overlap | 0 % |
| methodology | Eine Response pro award_criterion (AI) | 100 % |
| compliance_statement | AI bei PQ-Pflicht/Zertifikaten | 100 % |
| price_section | Aus Cost-Calculation (siehe §9) | 0 % Werte, 30 % Begründung |
Pro Section ist auto_generated: boolean getrackt — AI-Act-Transparenz, im Audit-Log nachvollziehbar.
Status-Lifecycle
draft — neu, editierbar
↓
in_review — Reviewer prüft
↓
approved — Approver gibt finales OK
↓
submitted — eingereicht (Mensch klickt Submit-Button im Vergabe-Portal)
↓
won/lost — Ergebnis nach Zuschlag
↓
[archived] — historisch, nicht mehr in aktiver ListeTemplates
Pro Plugin pflegst du tender_bid_templates — wiederverwendbare Sections (Company-Intro, Standard-Methodology, Vorlagen-Anhänge). Templates sind CPV-getaggt; der Drafter wählt die mit höchstem CPV-Overlap.
Template-Beispiel
{
"kind": "company_intro",
"title": "Über uns",
"content": "{{company_name}} ist seit 2018 Spezialist für ...",
"cpv_scope": ["72200000", "72260000"],
"active": true
}09Cost-Calculation
Pro Plugin hinterlegst du tender_cost_rates — die Bausteine deiner Kalkulation. Daraus generiert der Calculator auf Anfrage einen Vorschlag pro Match.
Cost-Rate-Typen
| Kind | Unit | Beispiel |
|---|---|---|
| hourly_rate | hour | "Projektleitung Senior", 145 €/h |
| daily_rate | day | "Beratung Junior", 980 €/Tag |
| material_markup | percent | "Standard-Aufschlag", 18 % |
| travel | flat | "Reisekosten-Pauschale", 250 € |
| subcontractor | hour | "DevOps-Sub", 120 €/h |
| overhead | percent | "Gemeinkosten", 15 % |
Auto-Suggest-Heuristik
POST /matches/:id/calculation/suggest liefert einen Vorschlag basierend auf:
- Tender-Volumen × Komplexitäts-Faktor (Anzahl award_criteria, geclamped 1..5)
- 0,5 h pro 1.000 € Tender-Wert × Komplexitäts-Faktor
- Geclamped: 20-200 h Aufwand pro Bid-Position
- Default-Stundensatz 95 €/h wenn kein eigener Rate hinterlegt (mit Warning)
- Bei
requires_prequalification: zusätzlich 800 € flat für PQ-Doku - Bei
required_certifications: 200 € pro Zertifikats-Anhang
Default-Aufschläge
| Aufschlag | Default |
|---|---|
| Overhead | 15 % |
| Risiko-Puffer | 5 % |
| Marge | 10 % |
| MwSt. | 19 % |
Im Workspace editierst du die Vorschläge bevor sie in den Bid wandern. Manual-Override gesamtbetrag jederzeit möglich (z.B. wenn Pauschal-Preis vorgegeben ist).
10Document-Manager
Eignungsnachweise + Referenzen + Zertifikate werden zentral verwaltet — nicht pro Bid neu hochladen.
Document-Felder
| Feld | Beschreibung |
|---|---|
| kind | "eignung" | "referenz" | "zertifikat" | "praequalifikation" |
| title | Anzeige-Name |
| doc_number | Optional: Dokument-Nummer (Zertifikats-ID, PQ-Nummer) |
| issuer | Aussteller (TÜV, IHK, …) |
| issued_at | Ausstellungs-Datum |
| expires_at | Ablauf — Alerts 30/14/7 Tage vorher |
| cpv_scope | CPV-Codes für die das Dokument relevant ist |
| storage_path | Supabase-Storage-URL |
Bid-Mapping
Beim Bid-Draft wählt der Drafter pro Anforderung das passende Dokument:
- CPV-Overlap mit Bid-Tender muss ≥
reference_filter.cpv_min_overlapsein - Nicht abgelaufen (expires_at > now)
- Bei Referenzen: nicht älter als
reference_filter.max_age_years - Manuell überschreibbar im Workspace pro Bid
Ablauf-Alerts
Cron-Job läuft täglich, prüft expires_at:
- 30 Tage vorher: Email-Reminder + Workspace-Alert
- 14 Tage vorher: zweiter Reminder
- 7 Tage vorher: dritter Reminder + roter Status im Workspace
- Nach Ablauf: Dokument wird in Bid-Drafts nicht mehr ausgewählt
11Team & RBAC
Tender ist Multi-User-tauglich. Vier Rollen über die Tabelle tender_members verwaltet:
| Rolle | Lesen | Schreiben | Approve | Admin |
|---|---|---|---|---|
| viewer | ✓ | — | — | — |
| editor | ✓ | ✓ | — | — |
| reviewer | ✓ | ✓ | "in_review" | — |
| approver | ✓ | ✓ | "approved" | — |
| admin | ✓ | ✓ | ✓ | ✓ |
Vier-Augen-Prinzip
Vergabe-Compliance erwartet typischerweise getrennte Reviewer/Approver. Der Status-Lifecycle erzwingt das implizit: ein Bid muss durch in_review bevor er approved werden kann, und der Approver kann nicht identisch mit dem Reviewer sein (per Default — kann pro Plugin gelockert werden).
Audit-Log pro User-Action
Jede Status-Änderung, Kommentar-Erstellung, Dokument-Upload wird in tender_revisions geloggt mit user_id + timestamp + diff. Nachvollziehbar im Workspace pro Bid.
12Frist-Management
Submission-Deadline ist die kritischste Größe im Vergabe-Prozess. Verpasste Frist = harter Cut, kein Late-Submit. Der Agent schützt mit mehrschichtigen Reminders.
Reminder-Schedule
- 7 Tage vorher — Email an Plugin-Contact + alle Approver
- 3 Tage vorher — zweite Email + roter Status im Workspace
- 1 Tag vorher — finale Erinnerung, Workspace-Banner
- Frist verpasst — Status auto auf
missed, Outcome-Tracker speichert Memory-Eintrag
ICS-Calendar
Pro Match ist ein ICS-Calendar-File abrufbar via GET /matches/:id/calendar.ics. Abonnierbar in Outlook, Google Calendar, iCal — Frist landet automatisch im persönlichen Kalender mit 7/3/1-Tage-Vor-Reminders.
Bekanntmachungs-Revisionen
Vergabestellen ändern Bekanntmachungen nachträglich (Frist- Verlängerung, Anforderungs-Update, neue Anhänge). Der Diff-Detector erkennt das und triggert eine Re-Analyse — der Workspace markiert das Match mit "REVISION", du bekommst Alert wenn relevante Felder sich geändert haben.
13DSGVO & Compliance
Vergabe-Recht ist regulierter Bereich. Der Tender-Agent ist auf fünf Compliance-Säulen gebaut:
1. BGleichB §47 Abs. 2 — Vergabe-Audit
Strukturierter Audit-Report (siehe §13 unten Audit-Report) dokumentiert pro Tender: warum gematchet, AI-Confidence, Compliance-Findings, User-Actions, Bid-Decisions. Auf GET /audit-report?from=ISO&to=ISO als JSON exportierbar.
2. EU AI Act Art. 52 — KI-Transparenz
- Pro Bid-Section:
auto_generated: true/false - AI-Confidence pro Match-Score in der DB persistiert
- Audit-Log: welcher Prompt wurde gefeuert, welches Modell, wie viele Tokens
- UI zeigt klar: "AI-Anteil dieses Bids: X %"
3. DSGVO Art. 13 / 15 / 17
- Datenquellen-Hinweis in jedem Outbound-Mail-Footer (Daily-Digest, Reminders)
- Self-Service Auskunfts/Lösch-Anfragen via
/gdpr-Form (siehe Stellwerk-Datenschutzerklärung) - Soft-Delete (
deleted_at) auf allen user-data-Tabellen — Lösch-Anfragen sind reversible bis zur tatsächlichen Hard-Deletion - Audit-Log immutable (RLS append-only)
4. Plugin-Isolation
- Postgres Row-Level-Security auf allen mandantengetrennten Tabellen
- Service-Role bypassed (Agent-Server), App-Sessions sehen nur ihren Plugin-Scope
- Cross-Plugin-Memory gibt es nicht — was Plugin A lernt, sieht Plugin B nie
5. Audit-Report-Format
Strukturiertes JSON mit folgendem Inhalt:
- Aggregat-Stats (gescannt/gematchet/disqualifiziert, gewonnen/verloren, conversion rates)
- Match-Liste mit Score-Komponenten + AI-Decision-Summary
- Bid-Liste mit Reviewer + Approver + LLM-Tokens-Used
- Compliance-Findings nach severity
- Documents-on-File zum Stichtag
PDF-Rendering (Layout für Audit-Vorlage) kommt mit ersten Behörden-Kunden — Format ist vergabe-Audit-tauglich.
14Sub-Processors
Diese Liste ist Teil der AVV (Auftragsverarbeitungs-Vereinbarung) und auf der Datenschutzerklärung zentral gepflegt. Stand v2026-04:
| Sub-Processor | Zweck | Region |
|---|---|---|
| Supabase | Postgres-DB + Auth + Storage | EU (Frankfurt) |
| Anthropic | LLM-API (Claude) | USA |
| Resend | Email-Provider (Daily-Digest, Reminders) | EU (Frankfurt) |
| Vercel | Frontend-Hosting (Marketing + Workspace) | EU (Frankfurt) |
| Stripe | Payment-Processor | EU (Irland) |
| Cloudflare | DNS + CDN | Global |
Anthropic-Datentransfer USA: SCCs (Standard-Vertragsklauseln) + EU-US Data Privacy Framework. Bei strikten Behörden-Compliance- Anforderungen (BSI C5, ISO 27001) ist Self-Hosted-Option verfügbar — siehe Enterprise-Tarif.
15Kosten-Transparenz
Jeder externe Service-Call (LLM, PDF-Parse, Email-Send) wird in agent_usage_log getrackt mit estimated_cost_micros (1 USD = 1.000.000 Micros). Im Workspace pro Plugin pro Tag aggregiert sichtbar.
Kosten-Brecher
| Operation | Typische Kosten |
|---|---|
| Match-Score (Heuristik) | 0 € — kein LLM |
| Match-Score (LLM-Tier später) | ~0,01 € pro Match |
| Tender-Analyzer pro PDF | 0,10-0,50 € |
| Bid-Draft (Pro-Tier, Sonnet) | 0,50-2,00 € |
| Bid-Draft (Business-Tier, Opus) | 2,00-8,00 € |
| Cost-Calc-Suggest | 0 € — kein LLM |
| Daily-Digest-Email (Resend) | 0,001 € pro Empfänger |
Budget-Guard
Pro Plugin lässt sich ein Tages-Budget setzen (daily_budget_eur). Beim Überschreiten: Auto-Pause aller AI-Operationen + Alert an Plugin-Contact. Verhindert Bill-Shock bei Bug oder Falsch-Konfiguration.
Export
Settings → Cost-Tracking → CSV-Export pro Monat. Spalten: created_at, plugin_id, provider, model, task, input_tokens, output_tokens, estimated_cost_micros, ref_type, ref_id.
16API
Alle Workspace-Funktionen sind via REST-API erreichbar. Auth über Per-Account-API-Keys mit Plugin-Scoping.
Wichtigste Endpoints
| Endpoint | Zweck |
|---|---|
GET /api/tender/:pluginId/matches | Match-Liste mit Filtern (status, min_score, limit) |
GET /api/tender/:pluginId/matches/:id | Match-Detail inkl. Tender + Requirements |
POST /api/tender/:pluginId/scan | Manueller Scan-Trigger (idempotent) |
POST /api/tender/:pluginId/matches/:id/bid/draft | Bid-Draft generieren |
POST /api/tender/:pluginId/matches/:id/calculation/suggest | Cost-Calc-Vorschlag (Pro+) |
POST /api/tender/:pluginId/matches/:id/compliance/check | Compliance-Findings auf Match laufen lassen |
GET /api/tender/:pluginId/documents | Document-Manager-Liste |
POST /api/tender/:pluginId/documents | Document-Upsert |
GET /api/tender/:pluginId/audit-report?from=ISO&to=ISO | Audit-Report-Export (JSON) |
GET /api/tender/:pluginId/operations/status | Plugin-weiter Operations-Status |
Webhooks
Aktuell auf Anfrage (Enterprise). Geplant für Public-API:
tender.matched— neuer Match auf einem Plugintender.bid.drafted— Bid-Draft fertigtender.deadline.approaching— 7/3/1-Tage-Triggertender.outcome.recorded— won/lost/missed
Versionierung
Aktuell intern (kein versionierter Public-Pfad). Mit Public-API- Release: /v1/...-Prefix + Stabilitäts-Zusage + 90-Tage-Deprecation-Window für Breaking-Changes.
17Support & SLA
Support-Niveau abhängig vom Tarif:
| Tarif | Channel | Response-Time | SLA |
|---|---|---|---|
| Starter | ≤ 48h Werktags | — | |
| Professional | Slack-Channel + Email | ≤ 24h Werktags | — |
| Business | Slack + Dedicated CSM | ≤ 8h Werktags | 99,5 % Uptime |
| Enterprise | Direct + 24/7 Notfall | ≤ 2h kritisch | 99,9 % + Pönalen |
Pilot-Kunden
Während der Pilot-Phase: direkter Slack-Channel zu den Foundern, Response typisch < 4h. Roadmap-Mitsprache — Pilot-Wünsche fließen direkt in Q2/Q3-2026-Sprints.
Status-Page
status.stellwerkagents.com (kommt mit Production-Launch). Bis dahin: Issues per Slack kommuniziert.
18Preise & Pilot
Aktuell Pilot-Phase mit den ersten 10 Kunden. Sobald die voll sind, gelten die regulären Tarife. Pilot-Slot- Anfrage über /kontakt.
Pilot-Programm
- 50 % Rabatt auf erste 3 Monate
- Setup kostenlos (Wert ~2.000 €)
- Bid-Garantie: 0 erstellte Bids in 90 Tagen = volle Rückerstattung
- Direkter Slack-Channel zu den Foundern
- Mitgestaltung am Produkt-Roadmap
- Limitiert bis 30.06.2026
Reguläre Tarife
| Plan | Tender / Mo | CPV-Codes | Regionen | Preis |
|---|---|---|---|---|
| Starter | 50 | 5 | 1 (DE oder ein EU-Land) | 499 € |
| Professional | 200 | 25 | DE + 3 EU-Länder | 1.299 € |
| Business | 500 | Unlimited | Custom | 2.799 € |
| Enterprise | Unlimited | Unlimited | Self-Hosted-Option | ab 5.000 € |
Alle Preise zzgl. MwSt. und LLM-Verbrauch (typisch 10-50 € pro 100 analysierte Tender). Detaillierte Pricing-Seite.
Bundle mit Outreach
Tender + Outreach auf einem Plugin: ~25 % Rabatt auf die Summe. Ab 699 €/Mo (Starter-Bundle). Memory teilt sich cross-modul, Cross- Reporting im Workspace. Siehe stellwerkagents.com/preise.
19Exit & Portabilität
Kündigen ist trivial — wir bauen kein Lock-in.
Daten-Export
- Vollständiger Daten-Export pro Plugin auf Anfrage (JSON + CSV)
- Beinhaltet: alle Matches, Bids, Documents, Cost-Rates, Templates, Memory-Einträge
- DSGVO Art. 20 (Datenportabilität) — kostenfrei, innerhalb 14 Tagen
- Scriptbar via API für laufenden Sync (Enterprise)
Lösch-Anfrage
- Self-Service via
/gdpr-Form auf der Stellwerk-Site - Confirm-Mail mit signiertem Token (verhindert Email-Hijacking)
- Soft-Delete sofort, Hard-Delete nach 30 Tagen Karenz
- Audit-Log bleibt 6 Monate (DSGVO-Aufbewahrung), dann anonymisiert
Self-Hosting
Enterprise: Docker-Image + Postgres + S3-kompatibler Storage, Setup-Pauschale + monatliche Lizenz. Quellcode-Lesezugriff für Audit. Eigene LLM-Keys (BYOK) — du zahlst Anthropic/OpenAI direkt.
20FAQ
Reicht der Pilot-Plan für ernsthaften Use?
Für Branchen mit überschaubarem Tender-Volumen (z.B. nischige IT-Dienstleistungen, regional bauplanend): ja. Für volumenreiche Branchen (Bauleistungen, Standard-IT, Reinigung): du wirst schnell ans Limit kommen, Pro-Tier passt dann besser.
Macht der Agent Bids für mich fertig zum Submit?
Nein — bewusst nicht. Drafts sind 80 % fertig, finaler Pass + Submit bleibt bei dir. Vergabe-Recht ist zu sensibel für Auto- Submission, plus Bid-Inhalt ist strategisch.
Wie geht ihr mit privaten Vergaben um?
Aktuell nicht — wir scannen nur öffentliche Portale (TED-EU, Bund-Vergabe, DTAD, DTVP, eVergabe). Custom-Connector für proprietäre Quellen (z.B. interne Lieferanten-Plattform eines Konzerns) ist Enterprise-Thema.
Was passiert wenn ich einen Tender finde der nicht in einer eurer Quellen ist?
Manuelles Anlegen via API möglich, Workspace-UI dafür kommt. Match-Pipeline + Bid-Drafter funktionieren identisch.
Sind die LLM-Texte im Bid AI-Act-konform gekennzeichnet?
Ja — pro Section ist auto_generated: true/false persistiert, im Audit-Log nachvollziehbar. Wie du das gegenüber der Vergabestelle kommunizierst (z.B. "AI-unterstützt redaktionell überarbeitet") ist deine Wahl.
Können wir den Agent on-premise hosten?
Enterprise-Option: ja. Docker-Image + Postgres + S3-kompatibler Storage. Setup-Pauschale + monatliche Lizenz, kein Cloud-Lock-In. BYOK für LLMs (eigene Anthropic/OpenAI-Keys).
Wie viele LLM-Tokens kostet ein durchschnittlicher Tender?
Analyzer: 10k-30k input + 2k-5k output Tokens pro PDF. Bei Sonnet ($3/M input, $15/M output) ergibt das ~0,10-0,50 € pro Tender. Bid-Draft: zusätzlich 5k-15k input + 5k-10k output = ~0,30-1,00 € (Sonnet) oder 1,50-5,00 € (Opus für Business-Tier).
Was wenn die Vergabestelle Anforderungen ändert nach Bekanntmachung?
Diff-Detector erkennt Revisionen und löst Re-Analyse aus. Du bekommst Workspace-Alert + Email mit Diff-Übersicht. Bid-Draft wird automatisch markiert "REVIEW NEEDED — Anforderung X hat sich geändert".
Funktioniert das auch für VOL/UVgO-Vergaben unterhalb der Schwellenwerte?
Ja, über Bund-Vergabe + DTAD-Quellen. TED-EU listet nur Vergaben oberhalb der EU-Schwellen. Niederschwellige Vergaben (e-Vergabe, Direkt-Aufträge) werden teilweise nicht öffentlich ausgeschrieben — die fängst du auf anderem Weg ein.
Wir bieten in mehreren Branchen — wie löse ich das?
Wir empfehlen ein Plugin pro Branche, getrennte CPV-Sets, getrennte Memory-Korpora. Die Tarife sind genau dafür gestaffelt (1/3/10 Plugins). Bundle-Tarif macht Multi-Plugin attraktiv. Für Agenturen die Vergabe-Beratung für mehrere Endkunden machen: jeder Endkunde = ein Plugin.
21Downloads
- Diese Dokumentation als PDF (Print-View)
- AVV (Auftragsverarbeitungs-Vereinbarung) — auf Anfrage über /kontakt
- TOMs (Technische und organisatorische Maßnahmen) — auf Anfrage
- CPV-Beispiel-Configs für gängige Branchen — kommt bald
- GitHub-Repo (Stellwerk-Plattform) — Quellcode-Lesezugriff für Pilot-Kunden