diff --git a/TOOLS.md b/TOOLS.md index 2a6c438..1bde312 100644 --- a/TOOLS.md +++ b/TOOLS.md @@ -243,7 +243,6 @@ create_event( | 15:00 mar,joi | 17:00 | project-checkin | #echo-work | Check-in Vending Master | | 18:00 | 20:00 | evening-report | 📧 EMAIL | Raport seară - vezi [FLUX-JOBURI.md](memory/kb/projects/FLUX-JOBURI.md) | | 19:00 | 21:00 | evening-coaching | #echo-self + 📧 | Reflecție seară → memory/kb/coaching/ | -| 20:00 | 22:00 | seara-merit-reminder | #echo-self | Reminder lista "10 lucruri pentru care merit respect" | | 19:00 dum | 21:00 | weekly-planning | #echo-work | Planning săptămânal | | 21:00 | 23:00 | night-execute | #echo-work | Execută task-uri aprobate (run 1) | diff --git a/dashboard/tasks.json b/dashboard/tasks.json index 08f3688..eeecabf 100644 --- a/dashboard/tasks.json +++ b/dashboard/tasks.json @@ -1,5 +1,5 @@ { - "lastUpdated": "2026-02-03T06:31:08.743257Z", + "lastUpdated": "2026-02-03T21:02:31.415016Z", "columns": [ { "id": "backlog", @@ -268,6 +268,20 @@ "description": "", "created": "2026-02-03T06:31:08Z", "priority": "medium" + }, + { + "id": "task-039", + "title": "Raport seară 3 feb trimis pe email", + "description": "", + "created": "2026-02-03T18:01:12Z", + "priority": "medium" + }, + { + "id": "task-040", + "title": "Job night-execute: 2 video-uri YouTube procesate", + "description": "", + "created": "2026-02-03T21:02:31Z", + "priority": "medium" } ] } diff --git a/memory/2026-02-03.md b/memory/2026-02-03.md index 98da77b..962dca4 100644 --- a/memory/2026-02-03.md +++ b/memory/2026-02-03.md @@ -46,6 +46,9 @@ PDF (WhatsApp) → OCR API (~4sec) → SQLite (draft) → Aprobare frontend → - **06:02 UTC:** Job `insights-extract` - verificat insights 2026-02-03.md (deja complet) - **06:02 UTC:** Adăugat tehnică nouă în tehnici-pauza.md: "Pauza de 10 secunde" (Zoltan Vereș) - **06:02 UTC:** Actualizat index KB (87 note) +- **07:01 UTC:** Morning coaching trimis (tema: Umbrele/claritate) +- **12:00 UTC:** Alertă calendar: sesiune 15:00 notificată pe Discord +- **18:01 UTC:** Raport seară trimis - propuneri: cold email, sesiuni, audit securitate ## De făcut - [ ] A1: Sesiune "Dizolvarea lui Nu Merit" (30 min) - de programat diff --git a/memory/approved-tasks.md b/memory/approved-tasks.md index 930159d..3e0a497 100644 --- a/memory/approved-tasks.md +++ b/memory/approved-tasks.md @@ -6,6 +6,10 @@ Job-ul night-execute procesează tot din "Noaptea asta". ## 🌙 Noaptea asta +**Din raport 3 feb seara:** +- [ ] A0: Cold email sistem MINIMAL - scraper leads + template email +- [ ] A3: Audit securitate Clawdbot + **Analiză sistem:** - [x] ANALIZĂ: Sistem import bonuri PDF via Telegram/Discord/WhatsApp → roa2web - ✅ Salvat: memory/kb/projects/analiza-import-bonuri-pdf.md @@ -18,10 +22,10 @@ Job-ul night-execute procesează tot din "Noaptea asta". - ⚠️ YouTube rate-limited (429) - retry mâine **Primit seara:** -- [ ] https://youtu.be/lxfakTpdz1Y - - ⚠️ YouTube rate-limited (429) - retry mâine -- [ ] https://youtu.be/4_2j5wgt_ds - - ⚠️ YouTube rate-limited (429) - retry mâine +- [x] https://youtu.be/lxfakTpdz1Y ✅ 2026-02-03 + - Notă: memory/kb/youtube/2026-02-03_clawdbot-cost-optimization-setup.md +- [x] https://youtu.be/4_2j5wgt_ds ✅ 2026-02-03 + - Notă: memory/kb/youtube/2026-02-03_claude-code-task-system-anti-hype.md **Monica Ion:** - [x] https://www.youtube.com/watch?v=kYF1sPTkuNM (Povestea lui Marc #3) diff --git a/memory/kb/coaching/2026-02-03-seara.md b/memory/kb/coaching/2026-02-03-seara.md new file mode 100644 index 0000000..08da8f3 --- /dev/null +++ b/memory/kb/coaching/2026-02-03-seara.md @@ -0,0 +1,56 @@ +# Gândul de seară - 2026-02-03 + +**Tags:** @growth @coaching #umbre #zoltan-veres #acceptare #marti + +## Mesaj trimis + +[⭕ Echo] **GÂNDUL DE SEARĂ** 🌙 + +--- + +Umbrele sunt vizitatori incomozi. + +Azi ți-am propus să te uiți la una. Poate ai făcut-o, poate nu. Oricum e ok. + +--- + +> *"Umbrele nu pleacă dacă le ignorăm. Dar nici nu trebuie să le rezolvăm - doar să le vedem."* + +--- + +**Un gând pentru seara asta:** + +Umbrele sunt ca invitații nepoftiți la o petrecere. Poți să-i ignori, să fugi de ei, sau... să le dai un scaun în colț. + +Nu trebuie să stai de vorbă cu ei. Doar să recunoști că sunt acolo. + +--- + +**Dacă ai răspuns la una din întrebări:** +Ce ai descoperit? A fost ceva surprinzător? + +**Dacă nu ai apucat:** +Ce te-a oprit? Timpul? Sau poate... era prea aproape de ceva real? + +Ambele răspunsuri sunt informație utilă. + +--- + +Umbrele consumă energie să le ținem ascunse. +Când le acceptăm, devenim mai ușori. + +Noapte bună! 🌙 + +## Status provocare + +Provocarea zilei (prov-2026-02-03) despre umbrele: **nu a fost bifată**. +Mesajul de seară întreabă empatic ce l-a oprit, fără judecată. + +## Surse folosite + +- Provocarea de dimineață: umbrele (Zoltan Vereș) +- [Zoltan Vereș - Umbrele Workshop](files.html#memory/kb/youtube/2026-02-02_zoltan-veres-umbrele-workshop-complet.md) + +## Context + +Marti seară. Marius nu a bifat provocarea despre umbrele - e o temă profundă și poate incomodă. Am ales să fiu empatic și să las spațiu pentru reflecție fără presiune. diff --git a/memory/kb/index.json b/memory/kb/index.json index 93708b3..3067ad5 100644 --- a/memory/kb/index.json +++ b/memory/kb/index.json @@ -13,6 +13,30 @@ "video": "https://www.youtube.com/watch?v=vtAg2LLCJvs", "tldr": "*Content discovery automat - 3 Feb 2026, 02:00*" }, + { + "file": "notes-data/coaching/2026-02-03-seara.md", + "title": "Gândul de seară - 2026-02-03", + "date": "2026-02-03", + "tags": [ + "umbre", + "zoltan-veres", + "acceptare", + "marti" + ], + "domains": [ + "growth", + "health" + ], + "types": [ + "coaching", + "reflectie" + ], + "category": "coaching", + "project": null, + "subdir": null, + "video": "", + "tldr": "Marti seară. Marius nu a bifat provocarea despre umbrele - e o temă profundă și poate incomodă. Am ales să fiu empatic și să las spațiu pentru reflecție fără presiune." + }, { "file": "notes-data/coaching/2026-02-03_morning.md", "title": "Coaching Dimineață - 3 Februarie 2026", @@ -128,6 +152,25 @@ "video": "", "tldr": "Exercițiu de vizualizare care leagă o acțiune pentru care vrei motivație de o stare de plăcere intensă din trecut. Folosește tehnica \"fissurii în ecran\" pentru a transfera emoțional motivația." }, + { + "file": "notes-data/youtube/2026-02-03_clawdbot-cost-optimization-setup.md", + "title": "Set up ClawdBot so you save THOUSANDS of dollars", + "date": "2026-02-03", + "tags": [ + "clawdbot", + "optimization", + "costs" + ], + "domains": [ + "work" + ], + "types": [], + "category": "youtube", + "project": null, + "subdir": null, + "video": "", + "tldr": "Ghid practic pentru optimizarea costurilor în Clawdbot prin alegerea modelelor potrivite pentru fiecare use case. Conceptul cheie: **Brain** (modelul de conversație) vs **Muscles** (modelele pentru to..." + }, { "file": "notes-data/youtube/2026-02-03_openclaw-72-hours-full-breakdown.md", "title": "OpenClaw: The 72 Hours That Broke Everything", @@ -160,9 +203,13 @@ }, { "file": "notes-data/youtube/2026-02-03_claude-code-task-system-anti-hype.md", - "title": "Claude Code Task System: Multi-Agent Orchestration", + "title": "Claude Code Task System: ANTI-HYPE Agentic Coding", "date": "2026-02-03", - "tags": [], + "tags": [ + "claude-code", + "agents", + "orchestration" + ], "domains": [ "work" ], @@ -171,7 +218,7 @@ "project": null, "subdir": null, "video": "", - "tldr": "Sistemul de task-uri din Claude Code permite orchestrarea echipelor de agenți care lucrează în paralel, cu dependențe între task-uri și validare automată. Anti-hype: nu e despre tool-uri fancy, ci des..." + "tldr": "Sistemul de task-uri din Claude Code permite crearea de **echipe de agenți** care lucrează coordonat. Nu e vorba de mai mulți agenți = mai bine, ci de **agenți organizați** care comunică pentru un sco..." }, { "file": "notes-data/youtube/2026-02-03_unlimited-leads-claude-code-cold-email.md", @@ -1251,8 +1298,8 @@ "title": "Proiect: Vending Master - Integrare Website → ROA", "date": "2026-01-30", "tags": [ - "integrare", - "vending-master" + "vending-master", + "integrare" ], "domains": [ "work" @@ -1717,23 +1764,23 @@ } ], "stats": { - "total": 94, + "total": 96, "by_domain": { - "work": 26, - "health": 16, - "growth": 33, + "work": 27, + "health": 17, + "growth": 34, "sprijin": 27, "scout": 2 }, "by_category": { - "coaching": 8, + "coaching": 9, "emails": 1, "health": 1, "insights": 8, "projects": 25, "reflectii": 3, "retete": 1, - "youtube": 38, + "youtube": 39, "memory": 8, "conversations": 1 } diff --git a/memory/kb/youtube/2026-02-03_claude-code-task-system-anti-hype.md b/memory/kb/youtube/2026-02-03_claude-code-task-system-anti-hype.md index ff96d22..c76b8d5 100644 --- a/memory/kb/youtube/2026-02-03_claude-code-task-system-anti-hype.md +++ b/memory/kb/youtube/2026-02-03_claude-code-task-system-anti-hype.md @@ -1,203 +1,108 @@ -# Claude Code Task System: Multi-Agent Orchestration +# Claude Code Task System: ANTI-HYPE Agentic Coding -**Video:** [Claude Code Task System: ANTI-HYPE Agentic Coding (Advanced)](https://youtu.be/4_2j5wgt_ds) -**Autor:** (Tactical Agentic Coding) -**Durată:** ~30 min -**Tags:** @work @tech @coding +**Sursă:** https://youtu.be/4_2j5wgt_ds +**Data:** 2026-02-03 +**Tags:** @work, #claude-code, #agents, #orchestration --- ## TL;DR -Sistemul de task-uri din Claude Code permite orchestrarea echipelor de agenți care lucrează în paralel, cu dependențe între task-uri și validare automată. Anti-hype: nu e despre tool-uri fancy, ci despre înțelegerea fundamentelor (context, model, prompt, tools) și construirea de sisteme reproductibile. +Sistemul de task-uri din Claude Code permite crearea de **echipe de agenți** care lucrează coordonat. Nu e vorba de mai mulți agenți = mai bine, ci de **agenți organizați** care comunică pentru un scop comun. Include hooks pentru self-validation și templating pentru prompts reutilizabile. --- ## Concepte cheie -### Task System = Orchestrare Multi-Agent +### 1. Task System Components +- **Self-validation** - agenții își verifică propria muncă cu scripturi dedicate +- **Agent orchestration** - coordonare între mai mulți agenți +- **Templating** - prompts reutilizabile și standardizate -**Diferența față de generația anterioară:** -- **Vechi:** To-do list simplu, sub-agenți ad-hoc fără comunicare -- **Nou:** Task-uri cu dependențe, blocări, și comunicare între agenți +### 2. Tipuri de agenți +- **Builder Agent** - construiește/implementează cod +- **Validator Agent** - verifică dacă implementarea e corectă +- Lucrează în tandem: builder creează, validator confirmă -**Tools disponibile:** -| Tool | Scop | -|------|------| -| `task_create` | Creează task nou | -| `task_get` | Citește detalii task | -| `task_list` | Listează toate task-urile | -| `task_update` | Actualizează/comunică status | - -**Key insight:** Sub-agenții și agentul principal comunică prin `task_update` - aceasta e "magic"-ul. - -### Arhitectura: Builder + Validator - -**Minimum viable team:** -1. **Builder Agent** - construiește, face task-ul -2. **Validator Agent** - verifică că builder-ul a făcut corect - -**De ce 2 agenți:** -- 2x compute = 2x încredere în rezultat -- Fiecare agent are context window focusat pe UN lucru -- Builder se auto-validează + Validator verifică overall - -**Self-validation în Builder:** +### 3. Self-Validation Hooks ```yaml hooks: - post_tool_use: - - on: write, edit - - if: file ends .py - - run: ruff, mypy # linters + stop: + - validate_new_file: "path/to/expected/file.md" + - validate_file_contains: "specific content" ``` +- Pe hook-ul `stop`, agentul verifică că: + - A creat fișierul așteptat + - Fișierul conține conținutul specificat +- **Rezultat:** Certitudine că task-ul s-a completat corect -### Template Meta-Prompt - -**Definiție:** Un prompt care generează alt prompt într-un format specific și validat. - -**Componente (3):** -1. **Self-validation** - hooks care verifică că output-ul e corect -2. **Agent orchestration** - instrucțiuni pentru construirea echipei -3. **Templating** - format specific pentru plan/output - -**Exemplu workflow:** -1. User → Meta-prompt "plan with team" -2. Meta-prompt → Generează plan cu echipă -3. Stop hook → Validează că fișierul există și conține secțiunile cerute -4. Kick off → Agenții încep lucrul în paralel -5. Agenții finalizează → Ping înapoi la orchestrator -6. Orchestrator → Raportează rezultat - -### Flux Multi-Agent - -``` -┌─────────────────────────────────────────┐ -│ ORCHESTRATOR AGENT │ -│ (primary, face planning) │ -└─────────────────┬───────────────────────┘ - │ task_create (multiple) - ▼ -┌─────────────────────────────────────────┐ -│ TASK LIST │ -│ [1] Build hook A (parallel) │ -│ [2] Build hook B (parallel) │ -│ [3] Build hook C (parallel) │ -│ [4] Validate A (depends: 1) │ -│ [5] Validate B (depends: 2) │ -│ [6] Update README (depends: 4,5,6) │ -└─────────────────┬───────────────────────┘ - │ sub-agents work - ▼ -┌────────┐ ┌────────┐ ┌────────┐ -│Builder1│ │Builder2│ │Builder3│ -└───┬────┘ └───┬────┘ └───┬────┘ - │ │ │ - └────┬─────┴─────┬────┘ - │ task_update (done!) - ▼ -┌─────────────────────────────────────────┐ -│ Orchestrator primește events și │ -│ deblochează următoarele task-uri │ -└─────────────────────────────────────────┘ -``` +### 4. Team Task List +- Fiecare task are un **owner** (agent specific) +- Task-urile au **dependency blockers** - ordinea de execuție +- Task-urile fără dependențe rulează în **paralel** --- -## Anti-Hype: Fundamentele +## Workflow practic -**Core 4 al Agentic Coding:** -1. **Context** - ce știe agentul -2. **Model** - ce LLM folosești -3. **Prompt** - cum îi spui ce să facă -4. **Tools** - ce poate face - -**Greșeala comună:** Oamenii folosesc Moltbot/Clawdbot fără să înțeleagă ce se întâmplă sub capotă. - -**Soluția:** Învață primitivele, apoi folosește tool-uri avansate. - -> "Don't work on the application anymore. Work on the agents that build the application for you." - -### Evoluția Agentic Engineering +### Plan with Team (Meta-prompt) +1. Creează un plan structurat cu echipă +2. Fiecare task e asignat unui agent specific +3. Definește dependențele între task-uri +4. Agenții rulează în paralel unde e posibil +### Execuție ``` -1. Base Agent (un singur agent) - ↓ -2. Context & Prompt Engineering (mai bun) - ↓ -3. Multi-Agent (mai mulți agenți) - ↓ -4. Specialized Agents (customizați) - ↓ -5. Orchestrator Agent (conduce echipa) +/plan → generează task list cu owners +/bu → kick off building ``` +- Sub-agenții raportează progresul (text-to-speech în video) +- Fiecare sub-agent summarizează munca la final (stop hook) --- -## Aplicare practică +## 💡 Aplicare pentru setup-ul meu -### Când să folosești Task System? +**Relevant pentru Marius și proiectele ROA:** -**DA:** -- Task-uri complexe care pot fi paralelizate -- Când ai nevoie de validare la fiecare pas -- Proiecte cu multe fișiere/componente -- Update-uri documentație + cod simultan +1. **Pentru task-uri complexe** - pot folosi sessions_spawn cu task-uri specifice +2. **Self-validation** - ideea de hooks care verifică output-ul e aplicabilă: + - Script care verifică dacă fișierul s-a creat + - Script care validează conținutul +3. **Orchestrare** - când am task-uri mari, le pot descompune în sub-task-uri cu dependențe -**NU neapărat:** -- Task-uri simple, one-shot -- Când nu ai nevoie de validare -- Când overhead-ul de orchestrare > beneficiu - -### Cum să construiești echipa - -1. **Identifică task-urile** care pot rula în paralel -2. **Definește dependențe** (ce depinde de ce) -3. **Creează 2 tipuri de agenți:** builder + validator -4. **Adaugă self-validation** în builder (linters, type checkers) -5. **Template-uiește** într-un meta-prompt reutilizabil - -### Exemplu: Update codebase vechi - -**Task list generat:** -1. Build session_end hook (parallel) -2. Build permission_request hook (parallel) -3. Build setup hook (parallel) -4. Validate session_end (depends: 1) -5. Validate permission_request (depends: 2) -6. Validate setup (depends: 3) -7. Update README (depends: 4,5,6) - -**Rezultat:** 2 minute, toate fișierele actualizate, logs generate, documentație completă. +**Exemplu concret:** +- Task: "Actualizează documentația proiectului X" +- Sub-tasks: + 1. Citește codul actual (builder) + 2. Generează documentație (builder) + 3. Verifică completitudinea (validator) + 4. Verifică acuratețea (validator) --- -## Conexiuni cu munca noastră +## Diferența față de Clawdbot/Moltbot -1. **Clawdbot folosește Claude Code** - putem aplica aceste tehnici -2. **Vending Master:** Ar putea beneficia de multi-agent pentru UI + backend + docs -3. **Overnight coding:** În loc de un agent, orchestrează echipă -4. **Validare automată:** Adaugă self-validation în task-urile de coding +> "I'm not talking about the very powerful but very dangerous maltbot or previously cloudbot." + +- Claude Code Task System = tool pentru ingineri, control fin +- Clawdbot/Moltbot = autonomie mai mare, risc mai mare +- Task system = mai organizat, mai predictibil --- ## Citate cheie -> "More agents, more autonomy, and more compute doesn't always mean better outcomes. What we want is more ORGANIZED agents that can COMMUNICATE together." +> "More agents, more autonomy, and more compute doesn't always mean better outcomes. What we want is more organized agents that can communicate together to work toward a common goal." -> "The more agents you have with focused context windows doing one specific thing, the better." - -> "There's going to be a big gap between engineers that turn their brain off and engineers that keep learning." +> "Not only is our agent planning out work, building a team, it's also setting up the tasks and the order that the tasks need to operate in." --- ## Resurse menționate - -- Claude Code Hooks Mastery (repo) -- Tactical Agentic Coding (curs) -- Agentic Horizon (curs avansat) -- Ralph Wickham technique +- Repo: `cloud-code-hooks-mastery` (GitHub) +- Documentație hooks: https://docs.anthropic.com/claude-code --- -*Procesat: 2026-02-03* -*Sursă: https://youtu.be/4_2j5wgt_ds* +*Notă procesată de Echo pentru knowledge base* diff --git a/memory/kb/youtube/2026-02-03_clawdbot-cost-optimization-setup.md b/memory/kb/youtube/2026-02-03_clawdbot-cost-optimization-setup.md new file mode 100644 index 0000000..ea421d6 --- /dev/null +++ b/memory/kb/youtube/2026-02-03_clawdbot-cost-optimization-setup.md @@ -0,0 +1,75 @@ +# Set up ClawdBot so you save THOUSANDS of dollars + +**Sursă:** https://youtu.be/lxfakTpdz1Y +**Data:** 2026-02-03 +**Tags:** @work, #clawdbot, #optimization, #costs + +--- + +## TL;DR + +Ghid practic pentru optimizarea costurilor în Clawdbot prin alegerea modelelor potrivite pentru fiecare use case. Conceptul cheie: **Brain** (modelul de conversație) vs **Muscles** (modelele pentru tools/acțiuni). Poți economisi $50+/lună doar optimizând heartbeat-ul! + +--- + +## Concepte cheie + +### Brain vs Muscles +- **Brain** = modelul cu care conversezi, ia decizii, alege ce tool să folosească +- **Muscles** = modelele pentru fiecare acțiune specifică (coding, search, etc.) +- Trebuie optimizate separat pentru cost vs performanță + +### Modelele recomandate + +| Use Case | Best Performance | Best Cost Savings | +|----------|------------------|-------------------| +| **Brain (conversație)** | Opus 4.5 | Kimmy K2.5 | +| **Heartbeat** | - | Haiku (obligatoriu!) | +| **Coding** | Codex GPT 5.2 Extra High | - | + +--- + +## ⚡ Quick Wins pentru economii + +### 1. Optimizează Heartbeat (URGENT) +**Problema:** Heartbeat-ul folosește modelul brain by default. Cu Opus = ~$2/zi = $54/lună pierdut! + +**Soluția:** +- Schimbă modelul heartbeat pe **Haiku** → 10 cenți/zi +- Extinde intervalul de la 10 min la **1 oră** → 1 cent/zi +- **Economie: ~$50/lună instantaneu** + +### 2. Brain Model +- **Budget unlimited:** Opus 4.5 - cel mai inteligent și personabil +- **Cost-conscious:** Kimmy K2.5 - aproape la fel de bun, fracțiune din preț +- Kimmy are promoții frecvente (o lună aproape gratis) + +### 3. Coding Model +- Clawdbot face "vibe coding" - brain-ul controlează un CLI +- Pentru calitate maximă: Codex GPT 5.2 Extra High +- Poți cere direct în chat: "Please use codex GPT 5.2 extra high" + +--- + +## 💡 Aplicare pentru setup-ul meu (Echo) + +**Relevant pentru Marius:** +- Verifică ce model folosește heartbeat-ul actual +- Heartbeat la 10 min poate fi excesiv dacă nu ai acțiuni frecvente +- Principiul 80/20: heartbeat optimization = mare economie cu zero pierdere funcționalitate + +**De investigat:** +- Care e modelul default pentru heartbeat în config actuală? +- Poate fi extins intervalul heartbeat în Clawdbot? + +--- + +## Citate memorabile + +> "You do not need to be using Opus for your heartbeat. You should be using Haiku." + +> "The brain is what you're talking with... the muscles are every use case the brain calls on." + +--- + +*Notă procesată de Echo pentru knowledge base* diff --git a/tools/process_bon.py b/tools/process_bon.py index 77f4c88..18162e6 100644 --- a/tools/process_bon.py +++ b/tools/process_bon.py @@ -17,6 +17,7 @@ Fluxul: """ import sys +import os import json import time import argparse @@ -26,17 +27,21 @@ from decimal import Decimal import requests import oracledb +from dotenv import load_dotenv + +# Load .env from parent directory +load_dotenv(Path(__file__).parent.parent / ".env") # === CONFIG === API_BASE = "http://10.0.20.171:8000" API_USER = "MARIUS M" -API_PASS = "123" +API_PASS = os.getenv("ROA_API_PASSWORD", "") SERVER_ID = "central" COMPANY_ID = 110 # MARIUSM AUTO ORACLE_CONFIG = { "user": "MARIUSM_AUTO", - "password": "ROMFASTSOFT", + "password": os.getenv("ORACLE_PASSWORD", ""), "dsn": "10.0.20.121:1521/ROA" }