Dashboard
Overview of all {{agents.length}} agents
Total Agents
{{agents.length}}
Active
{{statusCount('idle')}}
Running
{{statusCount('running')}}
Errors
{{statusCount('error')}}
Server Resources
CPU
{{ systemStats.cpu_pct ?? '—' }}%Auslastung
RAM
{{ systemStats.ram_pct ?? '—' }}%{{ systemStats.ram_used_gb ?? '—' }} / {{ systemStats.ram_total_gb ?? '—' }} GB
Speicher
{{ systemStats.disk_pct ?? '—' }}%{{ systemStats.disk_used_gb ?? '—' }} / {{ systemStats.disk_total_gb ?? '—' }} GB
All Agents
{{agent.name}}
{{agent.title}}
Research Papers
Paper library & analysis notes
{{ researchEditPaper ? 'Edit Paper' : 'Add Paper' }}
{{ researchSelectedPaper.title }}
{{ researchSelectedPaper.status }}{{ researchSelectedPaper.authors }}
Abstract
{{ researchSelectedPaper.abstract }}
Notes & Analysis
{{ note.content }}
{{ timeAgo(note.created_at) }}
No notes yet. Add your analysis above.
No papers yet
Click "Add Paper" to start your research library
{{ paper.title }}
{{ paper.status }}{{ paper.authors }}
{{ paper.abstract }}
Organization Chart
Drag to pan · Scroll to zoom · Double-click to fit
Settings
Manage your profile
Profile Picture
{{settingsMsg}}
Display Name
Change Password
{{settingsPwMsg}}
Username: {{settingsProfile.username}} · Role: {{settingsProfile.role}} · Member since {{settingsProfile.created_at ? new Date(settingsProfile.created_at * 1000).toLocaleDateString() : 'N/A'}}
KI-Modell & Provider
Welches KI-Modell dein Assistent nutzt
{{ providerOptionMeta[providerStatus.active_option]?.name || 'Unbekannt' }}
{{ providerStatus.model || '—' }}
Kein eigener Account nötig
Atlas Proxy
Kostenlos — wird von Atlas bereitgestellt
OAuth Login (Browser-Anmeldung)
Claude Pro/Max
OAuth Login · Anthropic Subscription
ChatGPT Plus/Pro
OAuth Login · OpenAI Subscription
Nous Portal
OAuth Login · Nous Subscription
Eigener API Key
Anthropic API Key
Direkte API · Eigener Key
OpenAI API Key
Direkte API · Eigener Key
OpenRouter
100+ Modelle · Eigener Key
Custom Endpoint
Eigene URL + optionaler Key
Business Model Canvas
Entwickle und verfeinere dein Geschäftsmodell
01
Key Partners
Wer sind unsere wichtigsten Partner?
{{ item.text }}
02
Key Activities
Was sind unsere wichtigsten Tätigkeiten?
{{ item.text }}
03
Value Proposition
Welchen Mehrwert schaffen wir?
{{ item.text }}
Beschreibung
04
Customer Relationships
Welche Beziehungen pflegen wir?
{{ item.text }}
05
Customer Segments
Für wen schaffen wir Mehrwert?
{{ item.text }}
06
Key Resources
Welche Ressourcen brauchen wir?
{{ item.text }}
07
Channels
Wie erreichen wir Kunden?
{{ item.text }}
08
Cost Structure
Was sind unsere wichtigsten Kosten?
{{ item.text }}
09
Revenue Streams
Wofür zahlen Kunden?
{{ item.text }}
Doppelklick zum Bearbeiten · Hover für Löschen · Autosave
Costs & Token Usage
Across all {{costsData?.totals?.agent_count || 0}} agents
Total Tokens
{{formatTokensBig(costsData.totals.total_tokens)}}
↑ {{formatTokensBig(costsData.totals.input_tokens)}} in · ↓ {{formatTokensBig(costsData.totals.output_tokens)}} out
Cache Read
{{formatTokensBig(costsData.totals.cache_read_tokens)}}
⚡ gespartes Reprocessing
Sessions
{{costsData.totals.session_count}}
{{costsData.totals.agent_count}} Agents
Est. Cost
${{costsData.totals.cost_usd > 0 ? costsData.totals.cost_usd.toFixed(2) : '0.00'}}
via OpenRouter Preise
Token-Verlauf ({{costsDays}} Tage)
{{costsHover.day}}
Input: {{formatTokensBig(costsHover.input_tokens || 0)}}
Output: {{formatTokensBig(costsHover.output_tokens || 0)}}
Cache: {{formatTokensBig(costsHover.cache_read_tokens || 0)}}
Total: {{formatTokensBig((costsHover.input_tokens||0) + (costsHover.output_tokens||0) + (costsHover.cache_read_tokens||0))}}
💬 {{costsHover.sessions}} Sessions
👤 {{costsHover.user_messages}} User-Fragen
Kosten nach Modell
{{m.model.replace('anthropic/','').replace('openai/','')}}
{{m.sessions}} sessions · {{formatTokensBig(m.input_tokens + m.output_tokens)}} tok
Token-Verbrauch pro Agent
Top Sessions nach Token-Verbrauch
| Session | Agent | Input | Output | Total | Cost | Datum |
|---|---|---|---|---|---|---|
| {{s.title || 'Untitled'}} | {{s.agent}} | {{formatTokensBig(s.input_tokens)}} | {{formatTokensBig(s.output_tokens)}} | {{formatTokensBig(s.input_tokens + s.output_tokens)}} | ${{s.cost_usd > 0 ? s.cost_usd.toFixed(3) : '—'}} | {{new Date(s.started_at * 1000).toLocaleDateString('de-DE')}} |
📊 Effizienz-Analyse
Wie sich Token-Verbrauch, Caching und Kosten über Zeit entwickeln
⚡ Cache Hit Rate
{{costsData.efficiency_trend[costsData.efficiency_trend.length-1].cache_hit_rate.toFixed(1)}}%
{{(() => { const first = costsData.efficiency_trend[0].cache_hit_rate; const last = costsData.efficiency_trend[costsData.efficiency_trend.length-1].cache_hit_rate; const diff = last - first; return (diff >= 0 ? '↑ +' : '↓ ') + diff.toFixed(1) + '% seit Start'; })()}}
🔧 Tools/Session
{{costsData.efficiency_trend[costsData.efficiency_trend.length-1].tools_per_session.toFixed(1)}}
Ø letzte {{costsDays}} Tage: {{(costsData.efficiency_trend.reduce((s,d) => s + d.tools_per_session, 0) / costsData.efficiency_trend.length).toFixed(1)}}
💰 Cost/Session
${{costsData.efficiency_trend[costsData.efficiency_trend.length-1].cost_per_session.toFixed(3)}}
Ø: ${{(costsData.efficiency_trend.reduce((s,d) => s + d.cost_per_session, 0) / costsData.efficiency_trend.length).toFixed(3)}}
📝 Output/Tool
{{formatTokensBig(costsData.efficiency_trend[costsData.efficiency_trend.length-1].output_per_tool)}}
Token pro Tool-Call
🎯 Cost/Task
${{costsData.efficiency_trend[costsData.efficiency_trend.length-1].cost_per_task?.toFixed(3) || '0'}}
Ø: ${{(costsData.efficiency_trend.reduce((s,d) => s + (d.cost_per_task||0), 0) / costsData.efficiency_trend.length).toFixed(3)}}
💾 Cache R/W
{{costsData.efficiency_trend[costsData.efficiency_trend.length-1].cache_read_ratio?.toFixed(1) || 0}}%
Read-Anteil am Cache
📊 Tokens/Task
{{formatTokensBig(costsData.efficiency_trend[costsData.efficiency_trend.length-1].tokens_per_task || 0)}}
Ø: {{formatTokensBig(Math.round(costsData.efficiency_trend.reduce((s,d) => s + (d.tokens_per_task||0), 0) / costsData.efficiency_trend.length))}}
Tägliche Kosten
OpenRouter-Preise · Input + Output + Cache
Kosten pro User-Frage
Wie viel kostet eine einzelne Frage im Durchschnitt?
Cache Read vs Write
Read = gespartes Reprocessing · Write = neue Cache-Einträge
Cache Hit Rate Trend
Anteil Cache-Reads an gesamten Input-Tokens · höher = effizienter
Tool-Calls pro Session
Steigt = mehr Aufgaben pro Session
Kosten pro Session
Sinkt = effizienter durch Caching
Tägliche Metriken
| Datum | Sessions | Tools | Tools/Sess | Output | Cache Read | Cache% | Cost | $/Sess |
|---|---|---|---|---|---|---|---|---|
| {{d.day}} | {{d.sessions}} | {{d.tool_calls}} | {{d.tools_per_session.toFixed(1)}} | {{formatTokensBig(d.output_tokens)}} | {{formatTokensBig(d.cache_read_tokens)}} | {{d.cache_hit_rate.toFixed(1)}}% | ${{d.cost_usd.toFixed(2)}} | ${{d.cost_per_session.toFixed(3)}} |
⏰ Cron Jobs
Automatisierte Tasks verwalten und erstellen
Neuen Cron Job erstellen
{{ sk.description }}
Keine Cron Jobs vorhanden
Klicke "Neuer Job" um einen zu erstellen
{{ job.prompt }}
📖 Schedule Referenz
Format: Minute Stunde Tag Monat Wochentag (UTC) · Oder einfache Intervalle wie "30m", "every 2h"
Project Management
Goals, Projects und Tasks für deine Agenten
Goals
0Noch keine Goals
Definiere übergeordnete Ziele
Projects
0Noch keine Projects
Gruppiere Tasks in Projekte
Tasks
0Noch keine Tasks
Weise Agenten konkrete Aufgaben zu
Admin Settings
Manage users, access control and container stats
Container Stats
CPU · RAM · Netzwerk · Disk — Echtzeit
| User | Status | CPU | RAM | Netzwerk | Disk | PIDs |
|---|---|---|---|---|---|---|
|
{{s.display_name || s.username}}
{{s.container_name}}
|
{{s.status || 'unknown'}} |
{{s.cpu_perc}}%
|
{{s.mem_usage}} / {{s.mem_limit}}
{{s.mem_perc}}%
|
{{s.net_io}} — | {{s.block_io}} — | {{s.pids}} — |
Users ({{adminUsers.length}})
| User | Role | Container | Created | Last Login | Actions |
|---|---|---|---|---|---|
|
{{(u.display_name || u.username || '?')[0].toUpperCase()}}
{{u.display_name || u.username}} @{{u.username}} |
Host
{{ u.container_status || 'Not provisioned' }}
⚠ {{u.container_error}} |
{{u.created_at ? new Date(u.created_at * 1000).toLocaleDateString() : '—'}} | {{u.last_login ? timeAgo(u.last_login) : 'Never'}} | You |
Invite Tokens
| Token | Role | Status | Expires | Actions |
|---|---|---|---|---|
{{inv.token.substring(0, 12)}}...
|
{{inv.role}} | Used by {{inv.used_by}} Expired Active | {{inv.expires_at ? new Date(inv.expires_at * 1000).toLocaleDateString() : 'Never'}} |
Create Invite
Invite Link created!
{{newInviteLink}}
Proxy Usage
Token-Verbrauch pro Customer · Daily Limit · Sperren
| User | Heute | Daily Limit | Gesamt | Status | Aktionen |
|---|---|---|---|---|---|
| {{s.username}} |
{{(s.used_today || 0).toLocaleString()}} Tokens
{{s.today_requests || 0}} Requests
|
{{(s.daily_limit || 0).toLocaleString()}}
|
{{(s.alltime_input_tokens + s.alltime_output_tokens).toLocaleString()}} Tokens {{s.alltime_requests || 0}} Requests |
🚫 Gesperrt ✓ Aktiv |
Delete User
Are you sure you want to delete {{deleteUserTarget.display_name || deleteUserTarget.username}}? This cannot be undone.
Create User
{{createUserMsg}}
{{selectedAgent.name}}
{{selectedAgent.title}}
❌ {{deleteError}}
Sessions
{{agentDetail?.sessions?.length || 0}}📭
No sessions{{s.title || 'Untitled session'}}
{{s.children.length}}{{child.title || 'Sub-session'}}
Neue Konversation
Wähle ein Modell, um mit {{selectedAgent?.name}} zu chatten
💬
No messages in this session
You {{formatTime(group.user.created_at)}}
{{selectedAgent?.name || 'Assistant'}} {{formatTime(group.final.created_at)}}
{{ group.final.error }}
{{typeof msg.content === 'object' ? JSON.stringify(msg.content, null, 2) : msg.content}}
{{selectedAgent?.name || 'Assistant'}}
{{compactStatus}}
{{messageQueue[activeSessionId].length}} Nachricht{{messageQueue[activeSessionId].length > 1 ? 'en' : ''}} in Warteschlange
{{chatError}}
Datei wird hochgeladen...
Wie Hermes den Prompt bei jedem Run zusammenbaut — unabhängig vom Trigger
Atlas CC Chat
Atlas Command Center
SSE → hermes CLI
Paperclip Issue
Paperclip Scheduler
hermes_local Adapter
Heartbeat
Paperclip Timer
runtimeConfig.heartbeat
Hermes CLI gestartet
hermes -p {{ selectedAgent?.name?.toLowerCase() || 'agent' }} chat -q "…"
Cached System Prompt
Einmal gebaut beim Session-Start — für die gesamte Session eingefroren
promptTemplate
Paperclip DB
nur Paperclip-Trigger
✏️
{{ pfData.heartbeat_prompt.content ? pfData.heartbeat_prompt.content.slice(0,60)+'…' : 'Leer — kein Paperclip-Basis-Prompt konfiguriert' }}
SOUL.md
Hermes FS
immer
✏️
{{ pfData.layers.soul.present ? pfData.layers.soul.content?.slice(0,60)+'…' : 'Nicht vorhanden — Hermes nutzt DEFAULT_AGENT_IDENTITY' }}
Tool-aware guidance
Hermes intern
immer
🔒 nicht editierbar
Memory-Hinweise, Tool-Enforcement, Skills-Nudges — hardcoded in prompt_builder.py
MEMORY.md
Hermes FS
immer wenn befüllt
✏️
{{ pfData.layers.memory.present ? pfData.layers.memory.content?.slice(0,60)+'…' : 'Leer' }}
USER.md
Hermes FS
immer wenn befüllt
✏️
{{ pfData.layers.user_memory.present ? pfData.layers.user_memory.content?.slice(0,60)+'…' : 'Leer' }}
Skills Index
Hermes FS
immer
🔒 via skill-Tool
{{ pfSkillsExpanded ? '▲' : '▼' }} {{ pfData.totals.skills_count }} Kategorien
DESCRIPTION.md je Skill-Kategorie aus ~/.hermes/skills/
AGENTS.md
Paperclip FS
nur Paperclip-Trigger
🔒 nicht editierbar
Working-Directory Kontext, Task-Anweisungen, .cursorrules — liegt im Paperclip-Arbeitsverzeichnis
Layers 0–6 werden beim Session-Start eingefroren. Änderungen via Bearbeiten wirken erst ab der nächsten Session.
Ephemeral Layers
run_agent.py → build_api_messages()Conversation History
Hermes SQLite
immer
🔒 state.db
sessions + messages tables — wächst mit jedem Turn, komprimiert bei Threshold
Eingabe — je nach Trigger
💬
Deine Nachricht
Atlas Command Center
variabel
📋
Issue-Inhalt
Paperclip DB
~200–500t
💓
Heartbeat Task
Paperclip runtimeConfig
~50–200t
🤖 Claude API (Anthropic)
Modell: {{ pfData.model }} · verarbeitet Gesamtprompt, streamt Antwort
💬
SSE-Stream
Atlas Command Center
Chat-Tab
📝
Comment + Status
Paperclip API
via curl im Terminal
📊
Heartbeat Log
Paperclip DB
+ ggf. Memory-Update
Error Log
{{agentDetail.errorLog}}
✅
No errors logged
💓
Heartbeat-Daten nicht verfügbar
(Nur für Paperclip-Agenten)
Heartbeat
{{ heartbeatData.heartbeat.enabled ? 'Aktiv' : 'Inaktiv' }}Letzter Lauf: {{ timeAgo(new Date(heartbeatData.last_heartbeat_at).getTime() / 1000) }}
Noch kein Heartbeat-Lauf
{{ heartbeatSaveMsg.text }}
Heartbeat Prompt
{{ heartbeatData.prompt_template || '(kein Prompt konfiguriert)' }}
Letzte Runs (max. 20)
Fehler: {{ run.error }}
{{ run.stdout_excerpt }}
Kein Output-Excerpt verfügbar
🔧
Keine Skills für diesen Agent gefunden
{{ cat }}
{{ skill.name }}
{{ skill.description || 'Keine Beschreibung verfügbar' }}
{{ agentSkills.length }} Skills insgesamt