Tender Agent

Documentation

Tender Agent

Technische und kaufmännische Referenz — Architektur, CPV-Setup, Match-Scoring, Bid-Drafting, Compliance, Preise.

v2026-04 · Pilot-Phase · Stellwerk-Plattform · tender.stellwerkagents.com

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

LayerStack
HTTP-ServerHono (modular pro Plugin gemounted)
RuntimeNode.js 20+ mit tsx
DatabaseSupabase (Postgres, Frankfurt EU, RLS aktiv)
Vector-Storepgvector in Supabase (Memory pro Plugin)
AI-ProviderAnthropic Claude (3-Tier: Haiku/Sonnet/Opus)
PDF-Extraktionpdf-parse + custom Layout-Heuristik
Email-ProviderResend (Frankfurt EU, Daily-Digest)
Tender-SourcesTED-EU XML, Bund-Vergabe RSS, DTAD/DTVP API
CalendarICS-Generator für Frist-Subscriptions
PaymentStripe (Subscription-Modell)
Marketing-WebNext.js 16 App Router, Vercel
Admin-UIVanilla TS + Vite (Founder-Tooling)
Customer-WorkspaceNext.js auf app.stellwerkagents.com

Die 14 Engines

Jede Engine hat klare Verantwortung, ist isoliert testbar:

EngineVerantwortung
TenderScannerInkrementelle Pulls aus Source-Connectoren mit Cursor-State
TenderAnalyzerPDF/DOCX/ZIP Extraktion, Pflicht-Anforderungen, Risiken
TenderMatcherScore-Berechnung formal/strategic/win-prob × Plugin
TenderBidDrafterAI-Komposition Bid-Sections aus Templates + Anforderungen
TenderCalculatorCost-Calc + Auto-Suggest aus Rates + Heuristik
TenderDocumentManagerEignungsnachweise, Ablauf-Tracking, Bid-Mapping
TenderComplianceEngineRegelbasierte Findings nach severity
TenderRbacTeam-Rollen mit Action-Permissions
TenderQuestionSuggesterAI-Vorschläge für Bieter-Fragen
TenderDigestMailerDaily-Digest + Frist-Reminders + Resend
TenderDeadlineReminder7/3/1-Tage-Trigger + ICS-Calendar
TenderDiffDetectorRevisions in Bekanntmachungen → Re-Analyse
TenderOutcomeTrackerWon/Lost in Memory zum Lernen
TenderAuditReportStrukturierter 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-Pattern

AI-Model-Tiers

3-Tier-Routing zwischen Anthropic-Modellen — spart 40-50 % LLM-Kosten gegenüber "alles Sonnet":

TierModellWofür
Lightclaude-3-5-haikuMatch-Scoring, Intent-Klassifikation, einfache Extraktion
Standardclaude-sonnet-4Anforderungs-Extraktion, Bid-Section-Generierung, Compliance-Check
Heavyclaude-opus-4Komplexe 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

FeldTypBeschreibung
cpv_codesstring[]Mind. 1 × 8-stelliger CPV-Code (siehe §4)
regionsstring[]ISO-Codes (DE, AT, CH) und/oder NUTS (DE21, DE-BY)
volume_min_eurnumberMin. Auftragswert (Default 0)
volume_max_eurnumberMax. Auftragswert (Default 999.999.999)
sourcesstring[]Aktive Source-IDs ("ted-eu", "bund-vergabe", "dtad", …)

Optional-Felder

FeldDefaultBeschreibung
excluded_contracting_authorities[]Vergabestellen die du nicht sehen willst
digest_min_score60Minimum-Score für Daily-Digest (0-100)
digest.enabledtrueDaily-Digest-Mail aktiv?
digest.cron"0 6 * * 1-5"Werktags 06:00 UTC
digest.recipientplugin-contactZiel-Email (Fallback Plugin-Contact)
monthly_match_limitplan-defaultHard-Limit pro Monat (Plan-Tarif derived)
reference_connector_idWelche Quelle liefert Referenz-Projekte (sharepoint, hubspot, …)
reference_filter.cpv_min_overlap1CPV-Codes-Mindest-Übereinstimmung für Referenz-Match
reference_filter.max_age_years5Referenzen 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 + Beratung
  • 72240000 — System-Analyse + -Programmierung
  • 72260000 — Software-bezogene Dienstleistungen
  • 72261000 — Software-Beratung
  • 72262000 — 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

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

IDQuelleAbdeckungUpdate
ted-euTED-EU (Tenders Electronic Daily)EU-weit, ab EU-Schwellenwert (~140k €)Täglich
bund-vergabeservice.bund.de Vergabe-BereichBundesebene, alle WertbereicheTäglich
dtadDeutsches AusschreibungsblattLänder + KommunenTäglich
dtvpDeutsche VergabeplattformBayern + Baden-Württemberg + diverse KommunenTäglich
evergabeeVergabe-Online (Bundesbeschaffung)Bundeswehr, BKA, BMI-nahe VergabenEnterprise

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

DimensionGewichtWas es prüft
formal_fit40 %Pass/Fail-Checks: CPV-Overlap, Region, Volumen-Range, Excluded-Authorities, PQ-Pflicht erfüllbar?
strategic_fit30 %Komplexität, Wettbewerbsdichte, Opportunities, Risiken aus Anforderungs-Text
win_probability30 %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

FeldBeispiel
award_criteria[{ name: "Preis", weight: 40 }, { name: "Qualität", weight: 60 }]
required_certifications["DIN ISO 9001", "ISO 27001", "Branchenzertifikat XYZ"]
requires_prequalificationtrue
references_required_count3
references_max_age_years5
submission_deadline2026-08-15T12:00:00+02:00
submission_format"electronic_via_eVergabe"
contract_duration_months24
risks[{ severity: "high", description: "Penalty-Klausel ungewöhnlich hart" }]
opportunities[{ description: "Verlängerungs-Option auf 48 Monate" }]

Pipeline

  1. Download alle Vergabe-Unterlagen (Scanner liefert URLs)
  2. ZIPs entpacken, PDFs + DOCX zu Text konvertieren
  3. Layout-Heuristik: Inhaltsverzeichnis erkennen, Tabellen aus PDFs extrahieren
  4. Token-Aware-Chunking — relevante Abschnitte werden isoliert (Award-Kriterien-Sektion, Eignungs-Sektion, …)
  5. Sonnet-Call pro Chunk mit strukturierter JSON-Response
  6. Aggregation + Validation gegen Zod-Schema
  7. 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

SectionQuelleAI-Anteil
executive_summaryAI aus Tender-Kontext + Branche100 %
company_introAus Plugin-Templates0 %
referencesDocument-Manager-Match nach CPV-Overlap0 %
methodologyEine Response pro award_criterion (AI)100 %
compliance_statementAI bei PQ-Pflicht/Zertifikaten100 %
price_sectionAus 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 Liste

Templates

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

KindUnitBeispiel
hourly_ratehour"Projektleitung Senior", 145 €/h
daily_rateday"Beratung Junior", 980 €/Tag
material_markuppercent"Standard-Aufschlag", 18 %
travelflat"Reisekosten-Pauschale", 250 €
subcontractorhour"DevOps-Sub", 120 €/h
overheadpercent"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

AufschlagDefault
Overhead15 %
Risiko-Puffer5 %
Marge10 %
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

FeldBeschreibung
kind"eignung" | "referenz" | "zertifikat" | "praequalifikation"
titleAnzeige-Name
doc_numberOptional: Dokument-Nummer (Zertifikats-ID, PQ-Nummer)
issuerAussteller (TÜV, IHK, …)
issued_atAusstellungs-Datum
expires_atAblauf — Alerts 30/14/7 Tage vorher
cpv_scopeCPV-Codes für die das Dokument relevant ist
storage_pathSupabase-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_overlap sein
  • 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:

RolleLesenSchreibenApproveAdmin
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-ProcessorZweckRegion
SupabasePostgres-DB + Auth + StorageEU (Frankfurt)
AnthropicLLM-API (Claude)USA
ResendEmail-Provider (Daily-Digest, Reminders)EU (Frankfurt)
VercelFrontend-Hosting (Marketing + Workspace)EU (Frankfurt)
StripePayment-ProcessorEU (Irland)
CloudflareDNS + CDNGlobal

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

OperationTypische Kosten
Match-Score (Heuristik)0 € — kein LLM
Match-Score (LLM-Tier später)~0,01 € pro Match
Tender-Analyzer pro PDF0,10-0,50 €
Bid-Draft (Pro-Tier, Sonnet)0,50-2,00 €
Bid-Draft (Business-Tier, Opus)2,00-8,00 €
Cost-Calc-Suggest0 € — 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

EndpointZweck
GET /api/tender/:pluginId/matchesMatch-Liste mit Filtern (status, min_score, limit)
GET /api/tender/:pluginId/matches/:idMatch-Detail inkl. Tender + Requirements
POST /api/tender/:pluginId/scanManueller Scan-Trigger (idempotent)
POST /api/tender/:pluginId/matches/:id/bid/draftBid-Draft generieren
POST /api/tender/:pluginId/matches/:id/calculation/suggestCost-Calc-Vorschlag (Pro+)
POST /api/tender/:pluginId/matches/:id/compliance/checkCompliance-Findings auf Match laufen lassen
GET /api/tender/:pluginId/documentsDocument-Manager-Liste
POST /api/tender/:pluginId/documentsDocument-Upsert
GET /api/tender/:pluginId/audit-report?from=ISO&to=ISOAudit-Report-Export (JSON)
GET /api/tender/:pluginId/operations/statusPlugin-weiter Operations-Status

Webhooks

Aktuell auf Anfrage (Enterprise). Geplant für Public-API:

  • tender.matched — neuer Match auf einem Plugin
  • tender.bid.drafted — Bid-Draft fertig
  • tender.deadline.approaching — 7/3/1-Tage-Trigger
  • tender.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:

TarifChannelResponse-TimeSLA
StarterEmail≤ 48h Werktags
ProfessionalSlack-Channel + Email≤ 24h Werktags
BusinessSlack + Dedicated CSM≤ 8h Werktags99,5 % Uptime
EnterpriseDirect + 24/7 Notfall≤ 2h kritisch99,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

PlanTender / MoCPV-CodesRegionenPreis
Starter5051 (DE oder ein EU-Land)499 €
Professional20025DE + 3 EU-Länder1.299 €
Business500UnlimitedCustom2.799 €
EnterpriseUnlimitedUnlimitedSelf-Hosted-Optionab 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

Pilot-Platz anfragen →Features ansehen