Files
DBAdmin/brain/raw/articles/Budowanie osobistego systemu operacyjnego CTO z wykorzystaniem kodu Claude'a.md
T
Paweł Domański dd27530650 Update 5 notes
2026-06-16 09:01:34 +02:00

20 KiB

title, source, author, published, created, description, tags, Status
title source author published created description tags Status
Budowanie osobistego systemu operacyjnego CTO z wykorzystaniem kodu Claude'a https://obie.medium.com/building-a-personal-cto-operating-system-with-claude-code-b3fb9c4933c7
Obie Fernandez
2026-01-25 2026-06-11 Jak wykorzystuję AI jako asystent wykonawczy, zarządzając 10 inżynierami, kodującą statki i jednocześnie pracując na poziomie C-level.
clippings
Active

Jak wykorzystuję AI jako asystent wykonawczy, zarządzając 10 inżynierami, kodującą statki i jednocześnie pracując na poziomie C-level.

T Kilka tygodni temu zacząłem nową rolę jako CTO na pełen etat w ZAR. Pierwszą rzeczą, jaką zrobiłem, było utworzenie nowego folderu na laptopie, uruchomienie Claude Code i zadanie dość prostego komunikatu:

Create me a markdown-based system where I can regularly run you,
Claude Code, that lets me be the best world-class CTO possible. 
I'm planning to use you as my personal executive assistant and
CTO expert coad. Document everything in a series of folders as
you see fit. We're in plan mode, feel free to interview me if you
have any questions about this job.

Nie projektowałem struktury folderów z wyprzedzeniem. Nie szukałem podpowiedzi ani szablonów do takich rzeczy. Po prostu zaufałem bardzo zdolnemu modelu Opus 4.5, żeby to rozgryźć. Ten wpis dokumentuje to, czego się do tej pory nauczyłem, dla każdego, kto chce zbudować coś podobnego.

Praktyczne efekty po trzech tygodniach

Najpierw pozwól, że wyjaśnię*, dlaczego* możesz chcieć spróbować tego rozwiązania:

  • Przygotowanie do spotkania: Jestem przygotowany na każde spotkanie. Codziennie. Pełny kontekst o uczestnikach, odpowiednia historia, proponowane punkty do rozmowy.
  • Jasność priorytetów: W każdej chwili, bez względu na to, jak bardzo jestem rozproszona czy zestresowana, mogę zaufać Claude'owi, że pomoże mi się uspokoić i zdecydować, na czym powinnam się skupić dalej.
  • Historia decyzji: Gdy ktoś w końcu zapyta o wcześniejszą decyzję, będę miał pełny kontekst. Nie jest to mgliste wspomnienie. Rozważałem rzeczywiste alternatywy, dlaczego wybrałem to, co zrobiłem, i kto był zaangażowany.
  • Wykonanie bez przełączania kontekstu: publikowanie na Slacku, aktualizacja kalendarzy, tworzenie pomysłów na wpisy na bloga, śledzenie zadań... Wszystko to rozmowne w naturalnej formie.

Miałem wcześniej asystentów wykonawczych. Dobre. Ten system jest lepszy. Nigdy niczego nie zapomina, nigdy nie trzeba go wprowadzać w bieżąco i działa w tempie rozmowy. Czy wspomniałem, że jest zawsze dostępny?

Jak wykorzystuję go do zarządzania codziennością

Zawsze mam otwartą przynajmniej jedną sesję Claude Code w tym katalogu. Podczas równoległych etapów pracy (przygotowanie do wielu spotkań, badanie kandydatów, pisanie dokumentów) otwieram dodatkowe zakładki z równoległymi sesjami. Właśnie sprawdziłem i obecnie mam 9 równocześnie otwartych sesji Claude Code w osobnych zakładkach w jednym oknie terminala poświęconym tylko mojemu asystentowi.

Mimo że jestem bardzo szybkim typerzem, staram się jak najbardziej zmusić się do używania głosu (Wispr Flow) przy czymkolwiek dłuższym niż jedno zdanie. Strumień świadomości działa świetnie.

Krótkie prompty nie muszą być nawet pełnymi myślami. "Poranna synchronizacja", "Next 1:1", "Post summary of this to Slack". Claude całkiem dobrze rozumie, co mam na myśli z kontekstu.

Poranna rutyna

Jedną z pierwszych korzyści było rozpoczęcie dnia pracy od słowa "dzień dobry", na co Claude odpowiada następującymi krokami:

  1. Czyta mój cotygodniowy dokument tematyczny
  2. Sprawdza oczekujące na zadania
  3. Pobiera moje rzeczywiste dane dane w kalendarzu
  4. Ustala, co wymaga mojej natychmiastowej uwagi.

Zajmuje mi około 30 sekund, żeby dokładnie zorientować się, jak wygląda mój dzień.

W końcu zacząłem się zastanawiać, co Claude wymyśli, jeśli ustandaryzuję swoją poranną rutynę jako umiejętność.

To jest prompt, który napisał, wyzwalany poleceniem ukośnika w następujący sposób:/morning

# Morning Briefing

Run the morning sync workflow:

1. Read the weekly focus from \`priorities/weekly-focus.md\`
2. Check \`meetings/actions/\` for any pending action items
3. Check today's calendar using Google Calendar MCP tools (GOOGLECALENDAR_EVENTS_LIST with today's timeMin/timeMax in UTC)
4. Summarize:
   - What's the focus today based on weekly priorities
   - What meetings are scheduled for today
   - Any pending action items that need attention
   - Any blockers or items requiring immediate attention

Keep the briefing concise and actionable.

Przetwarzanie transkrypcji spotkań

W pracy używamy Gemini do transkrypcji prawie wszystkich spotkań. Na początku kopiowałem transkrypcje do konsoli. W końcu udało mi się uruchomić integrację MCP z moim Google Suite (patrz poniżej jak) i udało mi się zautomatyzować ten proces.

Kilka razy dziennie wywołuję niestandardową umiejętność o nazwie i Claude automatycznie:/meetsync

  • Tworzy notatki ze spotkań w odpowiednim folderze
  • Ekstrakcja przedmiotów akcji z właścicielami
  • Aktualizuje skład drużyny o wszystko, czego nowe się dowiemy o ludziach
  • Aktualizuje inne istotne pliki kontekstowe

Nie zastanawiam się, gdzie trafiają transkrypty. Zajmuje się samym archiwizacją i organizacją. Oczywiście, nie napisałem też niestandardowej umiejętności, napisał ją sam Claude:

# Meeting Sync Command

Sync unprocessed meeting transcripts from Google Calendar/Gemini
into the zarcto knowledge system.

## Instructions

Execute the following workflow:

### Step 1: Get Recent Meetings from Google Calendar

Use the Rube MCP to query Google Calendar for meetings from the 
last 48 hours that have Gemini notes attachments:

1. Call \`RUBE_SEARCH_TOOLS\` with use_case "list calendar events with
   attachments"
2. Call \`GOOGLECALENDAR_EVENTS_LIST\` for the primary calendar with:
   - timeMin: 48 hours ago (RFC3339 format)
   - timeMax: now (RFC3339 format)
   - singleEvents: true
   - orderBy: startTime
   - timeZone: Europe/Amsterdam

3. Filter results to only meetings that have:
   - \`attachments\` array containing items with \`title\` containing "Gemini"
      or "Notes by Gemini"
   - \`eventType\` of "default" (exclude working locations, etc.)

### Step 2: Find Unprocessed Meetings

1. Read the list of existing files in \`meetings/notes/\` directory
2. For each calendar meeting with Gemini notes:
   - Extract the date (YYYY-MM-DD) and generate expected filename pattern
   - Check if a corresponding note already exists
   - If no note exists, add to "unprocessed" list

### Step 3: Fetch Transcript Content

For each unprocessed meeting:

1. Extract the Google Doc ID from the attachment fileUrl or fileId
2. Use \`GOOGLEDOCS_GET_DOCUMENT_BY_ID\` to fetch the document
3. Extract plain text from the document body using the standard
   extraction pattern:
   \`\`\`
   body.content  paragraph.elements  textRun.content
   \`\`\`

### Step 4: Process Each Transcript

For each fetched transcript, follow the standard "Process Meeting
Transcript" workflow from CLAUDE.md:

1. **Create meeting note** in \`meetings/notes/YYYY-MM-DD-topic.md\`:
   - Use the meeting summary/title to derive the topic slug
   - Include key discussion points, decisions, and context
   - Format similar to existing notes (see examples in the directory)

2. **Create action items** in \`meetings/actions/YYYY-MM-DD-topic.md\`:
   - Extract actionable items from the transcript
   - Group by person responsible
   - Use checkbox format: \`- [ ] Action item\`

3. **Update team roster** (\`team/roster.md\`):
   - Add any new information learned about team members
   - Update skills, interests, or context if relevant

4. **Update recruiting pipeline** (\`recruiting/pipeline.md\`):
   - Only if meeting involved candidate discussions

5. **Update other context files** as appropriate:
   - \`context/architecture.md\` for technical decisions
   - \`priorities/weekly-focus.md\` if priorities discussed
   - \`decisions/\` if significant decisions made

### Step 5: Present Summary

After processing all meetings, present a summary:

\`\`\`
## Meeting Sync Complete

**Processed**: X meetings
**Skipped** (already processed): Y meetings
**Failed** (permission denied, etc.): Z meetings

### Newly Processed:
1. YYYY-MM-DD Topic Name
   - Created: meetings/notes/YYYY-MM-DD-topic.md
   - Actions: X items for Y people
   - Updates: [list any other files updated]

2. ...

### Action Items Created:
- Person A: X items
- Person B: Y items

### Notable Updates:
- [Any significant context file changes]
\`\`\`

## Error Handling

- If Google Calendar or Docs connection fails, prompt user to reconnect via Rube
- If a specific document has permission issues, note it and continue with others
- If no unprocessed meetings found, report "All meetings already synced"

## Notes

- Default lookback is 48 hours; user can specify different range with argument
- Only processes meetings where Obie is an attendee
- Skips external meetings without Gemini notes

Przygotowanie 1:1

Oto moje polecenie tworzenia notatek z indywidualnych spotkań. Jeszcze raz, to napisał Claude, nie ja. Odtwarzam te umiejętności tylko w celach ilustracyjnych, nie po to, żebyś mógł je skopiować./prep

# 1:1 Preparation

Prepare for a 1:1 meeting with $ARGUMENTS.

## Instructions

1. **Read team member info** from \`team/roster.md\`
   - Extract their current context, recent work, concerns, goals

2. **Read recent 1:1 notes** from \`team/one-on-ones/[name].md\`
   - Review last 2-3 conversations
   - Note any follow-up items from previous meetings

3. **Check pending action items** in \`meetings/actions/\`
   - Find any action items assigned to them or involving them
   - Note status of items from previous 1:1s

4. **Suggest topics to cover**:
   - Follow-up on previous action items
   - Current blockers or challenges
   - Career development and growth
   - Feedback (both directions)
   - Team dynamics or concerns
   - Any patterns noticed from recent work

5. **Format the output**:
   \`\`\`
   # 1:1 Prep: [Name]

   ## Context
   [Brief summary of their role, current focus, recent wins/challenges]

   ## Last 1:1 Highlights
   [Key points from most recent conversation]

   ## Pending Items
   - [ ] Item 1 from previous 1:1
   - [ ] Item 2 related to them

   ## Suggested Topics
   1. Topic 1 (with context)
   2. Topic 2 (with context)
   3. Topic 3 (with context)

   ## Notes to Remember
   [Anything specific to bring up or be mindful of]
   \`\`\`

Keep it concise and actionable. Focus on what matters most right now.

Korzystając z tego polecenia, zaczynam każde spotkanie jeden na jeden z pełnym kontekstem naszych wcześniejszych rozmów i ewentualnych spraw.

Decyzje dotyczące logowania

Kiedy podejmuję decyzję, mówię "loguj decyzję o X" lub wywołuję. Claude omawia ze mną kontekst i opcje, tworzy uporządkowany zapis decyzji i linkuje do odpowiedniego kontekstu./decide

Trzy miesiące później, gdy ktoś zapyta "dlaczego przeszliśmy z X na Y?", będę miał pełne uzasadnienie udokumentowane. Nie tylko decyzja, ale także rozważane alternatywy i powody, dla których je odrzuciliśmy.

# Log Decision

Capture the following important decision with context, alternatives, 
and rationale:

$ARGUMENTS

## Instructions

1. **Understand the decision context**
   - Ask clarifying questions if the decision topic is vague
   - Understand what problem this decision solves
   - Identify who was involved in making this decision

2. **Explore alternatives**
   - What other options were considered?
   - Why were they rejected?
   - What tradeoffs were evaluated?

3. **Read the decision template** from \`decisions/_template.md\`

4. **Check for related decisions** in \`decisions/\`
   - Search for similar past decisions
   - Note if this reverses or builds on previous decisions
   - Link to relevant prior decisions

5. **Create the decision record**:
   - Use filename format: \`decisions/YYYY-MM-DD-slug.md\`
   - Follow the template structure
   - Include:
     - Date and context
     - Problem/need
     - Decision made
     - Alternatives considered
     - Rationale and tradeoffs
     - Consequences (expected)
     - People involved
     - Related decisions or context files

6. **Link to relevant context**:
   - Reference architecture docs if technical
   - Reference project briefs if project-specific
   - Reference team discussions if relevant

7. **Confirm with Obie** before writing the file
   - Show him the draft
   - Get approval on completeness
   - Then write the file

Keep it concise but complete. Future you (or future team members)
should be able to understand why this decision was made without 
additional context.

Publikowanie na Slacku i innych narzędziach

Muszę zaktualizować kanał inżynierski o istotnym PR lub decyzji. Mówię "wrzuć to do #engineering na Slacku" i przekazuję wiadomość. To publikuje. Gotowe.

Komunikowałem się ze wszystkimi moimi podwładnymi przez Slacka, prosząc ich o ustalenie cyklicznych spotkań 1:1 z moim linkiem do umawiania spotkań. Podobnie jest z Twitterem. To samo dotyczy zaproszeń do kalendarza. To samo dotyczy każdej usługi, którą podłączyłem przez integrację Rube MCP.

Jak wspomniano wyżej, integracja Rube MCP jest świetna do tego typu rzeczy, bez nadmiernego obciążania kontekstu.

Techniczne przygotowania

Struktura katalogu

Oto, co stworzył Claude, żeby pokazać, że jest to kompleksowe. Nigdy tu nie wchodzę i celowo nie próbowałem tego zaprojektować sam.

context/           # Company, team, architecture docs
decisions/         # Decision records with rationale
drafts/            # Work in progress documents
journal/           # Weekly reflections
meetings/
  actions/         # Action items with owners
  notes/           # Meeting transcripts and summaries
playbooks/         # Recurring process documentation
priorities/        # Weekly focus, 90-day plans
projects/          # Project briefs and status
recruiting/        # Pipeline, candidates
reference/         # Mental models, frameworks
team/
  one-on-ones/     # Individual 1:1 histories
  roster.md        # Team member details

Naprawdę nigdy nie myślę o tej strukturze. Claude wie, dokąd to zmierza. Po prostu z nim rozmawiam. W dniu, gdy zawartość zacznie być zbyt duża lub będzie się zagłębiać, poproszę Claude'a, żeby ją zoptymalizował. Do tego czasu wszystko w porządku.

Integracja z MCP

Integracja z Rube MCP jest niezbędna. Daje Claude'owi dostęp do:

  • Kalendarz Google (czytanie i tworzenie wydarzeń)
  • Slack (publikowanie wiadomości, czytanie kanałów)
  • Twitter/X (aktualizacje publikowania)
  • Liniowe (zarządzanie projektami i problemami)
  • Gmail i inne usługi

To oznacza, że mogę powiedzieć "co mam jutro w kalendarzu?" albo "wrzuć to na Slacka" bez przełączania kontekstu. To właśnie integracja zamienia ten system z systemu notatek w prawdziwego asystenta wykonawczego.

Kontrola wersji

Wszystko jest w prywatnym repozytorium Git. Haki automatycznie synchronizują się. Daje mi to:

  • Pełna historia wszystkich zmian
  • Robisz kopię zapasową bez zastanowienia
  • Możliwość odniesienia się do czegokolwiek z dowolnego momentu

Wszyscy w ZAR są w trakcie wdrażania i korzystania z tego systemu. Radziłem osobom nietechnicznym, żeby uruchamiali to na prywatnym Google Drive zamiast uczyć się Githuba i repozytoriów.

Rzeczywiste przykłady

Rekrutacja: Wklejam CV kandydata lub jego profil na LinkedIn. Claude aktualizuje pipeline rekrutacyjne, proponuje pytania na rozmowie kwalifikacyjnej oparte na lukach w zespole i przygotowuje mnie do rozmowy kwalifikacyjnej.

Śledzenie wydajności: Jeśli muszę przejrzeć historię inżyniera, mogę powiedzieć "przeprowadź mnie przez historię z [imię]". Claude wyciąga notatki indywidualne, pokazuje wzorce w rozmowach, odnosi się do udokumentowanych obaw lub sukcesów.

Planowanie: "Jakie trzy najważniejsze czynniki blokują produktywność w tej chwili?" Claude czyta notatki z ostatnich spotkań, sprawdza oczekujące punkty działania, przegląda status liniowy i dostrzega rzeczywiste wąskie gardła.

Komunikacja: "Opublikuj aktualizację dotyczącą przyjęcia przez Stephena naszej oferty #leadership na Slacku." Gotowe. Brak zmiany kontekstu.

Liczby po trzech tygodniach

Nie znałem tych liczb, dopóki nie poprosiłem Claude'a o ich obliczenia do tego wpisu na blogu. Całkiem imponujące statystyki, jeśli mogę tak powiedzieć.

  • 82 notatki ze spotkań przetworzone i złożone
  • 47 spotkań w styczniu (2+ dziennie)
  • 18 udokumentowanych spotkań 1:1 z pełnym kontekstem i dalszymi działaniami
  • 35 plików śledzących zadania akcji z właścicielami i statusem
  • 23 członków zespołu śledzonych z 264 linijkami szczegółowego kontekstu
  • 9 dokumentów kontekstowych zachowanych
  • Łącznie przechwycono 11 579 linii wiedzy instytucjonalnej

A jednocześnie kod wysyłkowy. Jednocześnie działając na poziomie C-P razem z CEO i CPO.

Dlaczego to działa lepiej niż inne systemy

Większość systemów zarządzania wiedzą zawodzi, ponieważ ich utrzymanie to druga praca. Trzeba pamiętać, żeby aktualizować rzeczy. Musisz wszystko zorganizować. Musisz myśleć o systemie, a nie o swojej rzeczywistej pracy.

Ten system działa, bo nigdy o nim nie myślę. Myślę o swojej pracy, a system uchwyca ją jako efekt uboczny naturalnej rozmowy.

Porównaj to z Notion, gdzie ciągle zastanawiasz się "czy to powinna być strona, baza danych?" albo "do której przestrzeni roboczej to należy?" albo reorganizujesz, bo taksonomia wybrana sześć miesięcy temu już nie pasuje.

W takim podejściu implementacja jest niewidoczna. Po prostu rozmawiam z Claude'em i on wszystko załatwia.

Jak zacząć

  1. Zacznij prosto: otwórz kod Claude w świeżym katalogu. Powiedz mu, czego potrzebujesz. Niech sam odkryje strukturę. Użyj mojego powyższego promptu, coś w stylu: "Zbuduj system operacyjny oparty na markdown, który sprawi, że będę działał jak światowej klasy [twoja rola]."
  2. Używaj go przez tydzień: zobacz, co działa, a co nie. Claude się dostosuje.
  3. Umieść to w kontroli wersji: prywatne repozytorium Git, jeśli jesteś techniczny. W przeciwnym razie umieść go w folderze, który się synchronizuje (Google Drive, iCloud, Dropbox).
  4. Połącz swoje narzędzia: Ustaw integracje MCP dla kalendarza, narzędzi komunikacyjnych i zarządzania projektami. To właśnie zmienia ją z notatek w prawdziwego asystenta.
  5. Zrób kilka sesji: Jedna sesja jest dobra. Trzy równoległe sesje pracy równoległej to moment, kiedy czujesz przewagę.
  6. Gdy zauważysz, że robisz to samo kilka razy, poproś Claude'a, żeby napisał jakąś umiejętność. W ten sposób uzyskujesz skumulowaną produktywność.

System z czasem staje się mądrzejszy. Każda rozmowa dodaje kontekstu. Każda decyzja tworzy punkt odniesienia. Każda aktualizacja drużyny buduje bogatszy obraz.

Co dalej

Obecnie jestem ograniczony do okna terminala. Głos przez Wispr Flow już sprawia, że wszystko wydaje się bardziej naturalne. Trajektoria zmierza ku ciągłej rozmowie przez cały dzień, a nie "używaniu narzędzia".

Chciałbym dać Claude'owi możliwość wyświetlania wyników na moim pulpicie w formie tekstu bogatego. Zasadniczo dlatego, że jeśli generuje coś na przykład notatki ze spotkań 1:1, potrzebuję, żeby się pojawiały i były dostępne, zamiast przewijać się poza bieżący kontekst terminala. To zmniejszyłoby moją potrzebę ciągłego otwierania nowych sesji.

Bardzo chciałbym też móc komunikować się z moim asystentem przez wiadomości tekstowe i czat głosowy, gdy nie jestem przy komputerze. Eksperymentuję z Clawdbot, aby dowiedzieć się więcej o tym, jak poradzić sobie z tym konkretnym wyzwaniem. Jest bardzo możliwe, że w końcu przeniosę cały ten system na instancję Clawdbota!

Podsumowując, jestem pewien, że modele będą się nadal rozwijać dzięki lepszemu rozumowaniu, lepszej pamięci i lepszemu wykorzystaniu narzędzi. Więc system, który mam teraz, będzie tylko bardziej zaawansowany. Będę tu publikować aktualizacje, gdy opracuję nowe techniki i przełomy.