Glosarium
Entitas inti
Bagian berjudul “Entitas inti”Agen: Pekerja AI dengan identitas, peran, skill, dan adapter. Tergolong tepat pada satu ruang kerja. Aktor utama dalam sistem.
Adapter: Runner yang menjalankan satu giliran agen. Dua yang disertakan: Control Center (built-in) — harness dalam proses yang berbicara ke penyedia model — dan Claude Code melalui claude -p. Cursor, Codex, Anthropic, OpenAI, dan sisanya adalah penyedia pada adapter bawaan, bukan CLI terpisah. Lihat Kelola adapter dan model.
Ruang kerja: Penyewa isolasi tingkat teratas. Mengelompokkan agen, repo, space, tiket, memori, dan pipeline. Isolasinya struktural, bukan konvensional: setiap ruang kerja memiliki berkas SQLite sendiri (<dataDir>/<workspaceId>/workspace.db), sehingga pembacaan lintas ruang kerja tidak dapat dikompilasi. Setiap rute di dalam aplikasi diberi awalan /workspaces/:workspaceId — lihat peta rute.
Forge: Host kode — GitHub, GitLab, atau Bitbucket Cloud. Forge adalah properti setiap repo, dibaca dari remote origin-nya saat pendaftaran, dan ia memilih adapter API serta kredensial repo tersebut. Satu ruang kerja dapat memuat repo pada ketiganya; permukaan agregasi (kotak masuk, antrean PR) menyebar ke setiap forge yang terwakili lalu menggabungkan hasilnya, dengan mengisolasi kegagalan sehingga forge yang tidak terjangkau tidak pernah mengosongkan yang lain. Forge berbeda dalam hal yang didukungnya — lihat tabel kemampuan di Hubungkan host kode.
Repo: Repositori Git yang terdaftar di dalam satu ruang kerja. Bercakupan ruang kerja — checkout yang sama yang terdaftar di dua ruang kerja adalah dua baris independen dengan dua id; identitas repo lintas ruang kerja ditentukan oleh jalur sistem berkas, tidak pernah oleh id. Pendaftaran mensyaratkan work tree git yang remote origin-nya menunjuk ke forge yang didukung. Setiap repo membawa forge itu (github / gitlab / bitbucket), yang memilih adapter API dan kredensial yang dipakai untuknya.
Repo terisolasi: Worktree bercakupan ruang kerja dari repo yang terdaftar. Copy-on-write melalui rift di mana native itu tersedia; git worktree di Windows. Disediakan per space — setiap percakapan di space itu berbagi satu checkout — sehingga agen tidak pernah mengubah sumbernya.
Space: Kontainer kolaborasi bercakupan ruang kerja dengan peserta manusia dan agen, Mode yang dipersistenkan, status penyediaan, dan SpaceKind (topic / agentPeer / system / pr / slack) yang menentukan bagaimana ia dibagi menjadi bagian, dibisukan, diberi lencana, dan di-garbage-collect. Ia memiliki worktree terisolasi yang dibagikan oleh percakapan-percakapannya (copy-on-write melalui rift; git worktree di Windows).
Percakapan: Satu aliran pesan di dalam sebuah Space, dengan id, riwayat, dan konteks run agennya sendiri. Percakapan di dalam satu space sederajat dan datar — tidak ada aliran utama atau “main”. Masing-masing terbuka sebagai tab editor; status belum dibaca sebuah space diagregasi dari semuanya.
Thread: Percakapan yang anchorMessageId-nya diatur: ditambatkan ke satu pesan percakapan saudara di Space yang sama, dengan konteks agen baru yang di-seed oleh pesan jangkar itu. Sedalam satu tingkat — thread tidak pernah ditambatkan ke thread.
Tiket: Agregat unit kerja. Netral terhadap vendor: local secara default, dengan adapter sinkronisasi untuk Linear, GitHub Issues, Jira Cloud, dan ClickUp — meskipun tidak ada permukaan di dalam aplikasi yang membuat koneksi sinkronisasi. Mendukung hierarki, tautan, dan delegasi. Penugasan ke agen mencatat kepemilikan dan tidak mengirim apa pun; penugasan ke tim adalah pengecualian (TeamRoutingService mengirim pemimpinnya).
Pipeline: Alur kerja berbasis DAG yang merangkai langkah-langkah (pengiriman agen, skrip, kondisional). Didefinisikan oleh templat; dieksekusi sebagai run.
Objek nilai
Bagian berjudul “Objek nilai”AgentRole: Peran terenumerasi (CEO, coder, reviewer, QA, designer, security, devops, PM, general). Menentukan persona, akses memori, dan hierarki.
AgentSkills: Himpunan pengenal skill yang tidak peka huruf besar-kecil yang menyuntikkan konteks relevan ke prompt pada saat pengiriman.
Sumber skill: Repositori GitHub yang terdaftar per ruang kerja sebagai katalog skill. Tidak tepercaya secara desain: metadata repo hanya untuk tampilan dan setiap pemasangan melewati gerbang pemindaian fail-closed sebelum konten apa pun mencapai disk atau prompt. Lihat instal dan kelola skill.
skills-lock.json: Manifest per ruang kerja berisi skill yang terpasang: untuk masing-masing, repositori sumbernya, jalur di dalam repo, commit tempat ia dipatok, dan hash konten gabungan. Pemasangan, pembaruan, dan penghapusan menjaganya tetap mutakhir; verify_skills memeriksanya terhadap disk.
Gateway run agen: Endpoint loopback di cc_server yang menerapkan kebijakan aksi di dalam sandbox agen. Setiap push GitHub yang dilakukan agen dialihkan ke sana, diperiksa terhadap aturan Push ke remote, dan diteruskan dengan token tulis yang tidak pernah dipegang agen; perintah Bash milik Claude Code diperiksa melalui hook di endpoint yang sama. Lihat Sandbox dan keamanan.
Mode: chat, plan, review, atau orchestrate. Disimpan per space, sehingga satu agen dapat berada dalam mode berbeda di space berbeda; setiap percakapan di satu space berbagi mode itu. Menggerbangi prompt sistem, aturan tulis sandbox, dan daftar izin alat MCP. Composer hanya menawarkan chat, plan, dan orchestrate; chat diberi label “Agen”.
SandboxBackend: microvm (VM tertutup — satu-satunya backend dengan batas kernel, diterapkan pada terminal interaktif), native (Seatbelt di macOS, bubblewrap di Linux dan WSL2), atau none. Diprobe sekali saat boot; native diterapkan pada pengiriman agen bila tersedia, membungkus CLI Claude Code dan alat bash harness. Windows tidak memiliki backend native dan Linux membutuhkan bwrap plus socat, sehingga run di sana tidak terbungkus; --sandbox off memilih keluar secara sengaja.
Rig: Mesin sekali pakai yang dikendalikan agen secara real time — browser atau desktop Linux tertutup, emulator Android atau Simulator iOS yang dikelola host, atau terminal tertutup. Dipantau langsung melalui jalur resolusi penuhnya sendiri, dengan pengambilalihan yang ditegakkan di sisi server. Bercakupan satu percakapan sehingga tab manusia dan panggilan browser_use / computer_use / mobile_use / ios_use milik agen menuju satu mesin default yang sama. Lihat Rigs dan lingkungan terisolasi.
Lingkungan terisolasi: Batas rig berbasis VM yang lebih kuat — batas kernel, disk overlay sekali pakai, gerbang jaringan yang menolak secara default, dan broker kredensial. Rig Android dan iOS bersifat sekali pakai tetapi memakai jaringan yang dikelola host dan tidak mengklaim batas ini. Mengendalikan rig apa pun memakai kelas pagar pengaman enclosureControl.
RunCost: Rekap token/biaya (token masukan, token keluaran, perkiraan biaya dalam sen) untuk satu run agen.
WakeReason: Alasan agen dikirim. Enam nilai: pesan pengguna, penugasan tiket, pengiriman ulang pemulihan setelah kegagalan, tiket anak selesai, detak lanjutan terjadwal, dan langkah pipeline.
SandboxPort: Mengelola siklus hidup sandbox (probe, launch, events, exec, destroy).
CredentialBrokerPort: Menerbitkan kredensial bercakupan untuk peluncuran sandbox — hanya-baca untuk lingkungan agen, tulis hanya untuk jalur push di sisi server — lalu mencabutnya saat pembongkaran.
GitRepoInspectorPort: Mengekstrak metadata (owner, repo, branch) dari jalur repo Git lokal.
EmbeddingPort: Menghasilkan vektor embedding teks bernorma satuan untuk pencarian semantik.
NotificationPort: Menampilkan notifikasi desktop native dengan menghormati gerbang kategori/rute.
TicketProviderPort: Batas netral vendor ke backend tiket (create, get, list, update, transition, assign).
PipelineEnginePort: Memulai run pipeline dari sebuah templat, memisahkan pemanggil dari mesin konkretnya.
Layanan domain
Bagian berjudul “Layanan domain”AgentDispatchService: Meluncurkan run agen: menyediakan repo terisolasi, menyusun prompt, membuat log run, dan mengembalikan aliran peristiwa langsung.
TicketWorkflowService: Mesin siklus hidup tiket domain murni dengan titik pengunci mutasi berkonkurensi optimistis dan penegakan isolasi ruang kerja. Graf transisi yang ditegakkannya hanya mengikat agen dan otomatisasi; perubahan UI yang digerakkan pengguna meneruskan force: true dan melewatinya. Tidak ada pengirim tiket untuk penerima tugas berupa agen — AgentDispatchService yang memiliki pengiriman, dan menugaskan tiket ke agen tidak memulai run apa pun. Menugaskan tiket ke tim adalah pengecualian (TeamRoutingService mengirim pemimpinnya).
PipelineEngine: Mengorkestrasi eksekusi run: memulai run, menjadwalkan langkah, mempersistenkan status, menangani router/join/continue-on-fail, dan melanjutkan run yang sedang berjalan setelah mulai ulang.
PipelineTriggerDispatcher: Berlangganan peristiwa domain dan otomatis memulai run pipeline yang cocok untuk pemicu yang aktif.
MemoryAccessPolicy: Meresolusi dan menegakkan izin memori peran agen pada domain.
HarnessCostCalculator: Menghitung pemakaian token harness bawaan menjadi RunCost dari katalog models.dev. Pengiriman mempersistenkan rekap itu ke log run.
BudgetEnforcementService: Menghitung pengeluaran bulanan per agen dan blokir pra-pengiriman (checkInvocationBlock). Blokir itu hanya dikonsultasikan oleh rekonsiliator pemulihan (OrphanRunReaper, StrandedTicketReconciler), tidak pernah oleh pengiriman pengguna atau agen yang biasa.
BudgetGovernanceService: Mengevaluasi pengeluaran bulanan per agen setelah setiap run — ambang lunak mencatat insiden peringatan; habisnya anggaran mencatat insiden keras dan mengubah siklus hidup agen menjadi paused.
Peristiwa
Bagian berjudul “Peristiwa”DomainEventBus: Bus publish/subscribe siaran dalam proses untuk komunikasi antarfitur. Peristiwa bertipe; pelanggan mengonsumsi aliran on<T>().
DomainEvent: Antarmuka dasar. Setiap peristiwa memiliki occurredAt. Kategori utama: ruang kerja/agen, PR/tinjauan, perpesanan, tiket, pipeline, rapat/kalender, identitas, rig, observabilitas.
Rapat dan kalender
Bagian berjudul “Rapat dan kalender”Rapat: Sesi rapat yang direkam dan ditranskripsikan secara lokal. Menangkap mikrofon dan audio sistem, mentranskripsikan di perangkat dengan model ASR yang dapat dipilih (Parakeet TDT v3 secara default; Parakeet TDT v2, Whisper large-v3-turbo, dan Whisper base.en adalah alternatifnya), memisahkan pembicara, dan merangkumnya menjadi catatan, item tindakan, dan keputusan. Model ASR yang dipilih dipasang paksa saat boot dan operasi perekaman baru menyala setelah satu kali mulai ulang. Bercakupan ruang kerja; tetap berada di mesin.
MeetingSegment: Satu jendela audio yang ditranskripsikan, ditandai pembicara (me/them) dengan label pemisahan pembicara dan offset milidetik.
MeetingActionItem / MeetingDecision: Keluaran terstruktur yang diekstrak oleh pipeline ringkasan dan disimpan sebagai baris tersendiri. Item tindakan dapat ditautkan ke sebuah tiket.
CalendarEvent: Entri Google Calendar yang disinkronkan, bercakupan satu ruang kerja dan akun yang terhubung. Berbeda dari Rapat: event adalah komitmen terjadwal; Rapat adalah sesi yang direkam. Ditautkan satu-ke-satu melalui MeetingCalendarLink.
CalendarAccount: Akun Google yang terhubung, per ruang kerja dan email. Token penyegar OAuth disimpan di sisi server sebagai kunci google_* di <dataDir>/secrets.json dan tidak pernah mencapai klien; alur kode perangkat selesai di server. Flag authExpiredAt menggerakkan banner penyambungan ulang.
Istilah arsitektur
Bagian berjudul “Istilah arsitektur”Clean Architecture: Aturan dependensi: Presentation → Application/Providers → Domain ← Infrastructure. Domain tidak memiliki satu pun impor infrastruktur.
Port dan adapter: Domain mendefinisikan antarmuka abstrak (port); infrastruktur menyediakan implementasi konkret (adapter). Composition root menyatukan keduanya.
Kernel bersama: Entitas, objek nilai, port, dan layanan core/domain/ yang dibagikan ke 3+ fitur.
Feature-first: Kode diorganisasi berdasarkan domain bisnis (agen, pipeline, perpesanan) alih-alih berdasarkan lapisan teknis.
Multiplayer, identitas, dan kecepatan
Bagian berjudul “Multiplayer, identitas, dan kecepatan”Principal: Nilai tersegel yang menyatukan manusia dan agen sebagai satu abstraksi aktor — UserPrincipal(userId) atau AgentPrincipal(agentId). Setiap pesan, tiket, tinjauan, rencana, dan log run diatribusikan melalui sebuah Principal.
Pengguna: Identitas manusia, disimpan di global.db dan karenanya global di semua ruang kerja. Principal yang membuat sebuah ruang kerja menjadi pemiliknya — distempel pada Workspace.ownerUserId bersama baris keanggotaan berperan owner dalam operasi yang sama. Yang lain bergabung melalui undangan atau SSO.
WorkspaceMember / WorkspaceRole: Baris keanggotaan yang mengikat seorang Pengguna ke sebuah Ruang kerja pada sebuah peran (owner / admin / member / viewer / guest). Keanggotaan — bukan kunci pemasangan — adalah batas aksesnya. Pemberian izin per repo mencegah keanggotaan melampaui hak istimewa forge.
ParticipantPresence: Kesadaran efemeral untuk sebuah Principal (status, lokus, kursor, sedang mengetik, status langsung agen dan biaya berjalan). Tidak pernah dipersistenkan; dihubungkan lewat server; difilter berdasarkan pemberian izin repo sebelum disebarkan.
Mode ikuti: Klik sebuah avatar untuk mengikuti viewport-nya sampai Anda bertindak, lalu lepaskan. Berfungsi untuk manusia maupun agen (“menonton agen bekerja”).
Pengatur otonomi: Kontrol per space dan per agen — propose-only / act-with-approval / act-freely — diimplementasikan sebagai profil bernama di atas penyimpanan pagar pengaman tindakan.
ActionClass: Himpunan tertutup berisi 13 kelas efek (fileDelete, gitPush, prCreate, networkEgress, processSpawn, enclosureControl, …). Setiap alat yang memutasi mendeklarasikan kelasnya; mesin pagar pengaman meresolusi allow / prompt / deny per cakupan (space > agen > ruang kerja > preset mode > default bawaan).
WriteLedger / kunci idempotensi: Setiap mutasi membawa kunci idempotensi yang dibuat klien (UUIDv7, per tindakan logis). Ledger bercakupan ruang kerja menghilangkan duplikasi sebelum handler berjalan; pengulangan mengembalikan hasil asli yang identik byte demi byte. Membuat penyambungan ulang dan multi-klien aman secara desain.
Kotak masuk “Needs me”: Antrean lintas pilar dengan aturan ketat — sebuah item muncul hanya jika ia memblokir sesuatu (agen, penggabungan, sinkronisasi) atau secara eksplisit meminta operator.
Plan Studio: Permukaan perencanaan interaktif — rencana DAG bertipe yang dapat diedit dengan biaya, waktu, dan risiko per langkah, serta persetujuan sebagian.
Komputasi tinjauan: Komputasi tinjauan PR di sisi server (kohort yang diturunkan dari graf, diagram bertipe, diff visual, diff kontrak API, gerbang multi-sumbu) yang disajikan melalui review_studio.* dan dilipat ke dalam tab Tinjau.
Space tinjauan: Space pendukung tunggal sebuah PR (mode review, kind pr), dibuat secara idempoten dan ditautkan ke PR oleh sebuah ReviewSpaceAssociation. Setiap peninjau mengarsipkan temuannya di sana, dan itulah yang membuat temuan mereka sebanding; worktree terisolasinya memiliki PR yang di-checkout pada head-nya.
Node tinjauan: Satuan terstruktur dari temuan tinjauan AI: kind (bug, suggestion, recommendation, question, ticket), prioritas P0–P3, triple triase kategori/severitas/usaha, jangkar berkas dan baris, saran perbaikan opsional, dan skor keyakinan. Diarsipkan dengan add_review_node; putusannya dihitung dari node, bukan dari prosa.
Siap konsensus: Status node tinjauan yang hanya tercapai ketika peninjau rekan mengonfirmasi sebuah temuan — agen tidak dapat mengonfirmasi temuannya sendiri. Tombol Publikasikan ke GitHub pada tab Tinjau mengirim setiap temuan terbuka yang tersisa (selection: all_open); alat MCP publish_review_to_github masih secara default hanya mengirim temuan yang dikonfirmasi rekan.
Tingkat tinjauan: Kebijakan ruang kerja (light, balanced, thorough) yang mengatur peninjau mana yang disebar (hanya engineer; +qa+architect; +security+perf) dan di mana temuan di bawah ambang dirender. Tidak pernah menghapus temuan.
Sumbu tinjauan: Salah satu dari lima jalur penilaian per tinjauan: correctness, security, dan testGap diambil dari temuan peninjau; visual dan apiContract deterministik. Sumbu bergerbang dilipat ke dalam putusan dan hanya dapat membuatnya lebih berat — gerbang partial atau unavailable menahan putusan alih-alih meloloskannya.
Putusan tinjauan: ship, hold, atau block. Setiap temuan P0 dengan keyakinan ≥ 0.7 memblokir; P0 lain atau P1 mana pun menahan; selain itu ship. Sumbu bergerbang yang gagal memaksa block dan tidak dapat dikalahkan suara oleh temuan.
Fleet dan eval
Bagian berjudul “Fleet dan eval”cc_worker: Biner eksekutor fleet Dart murni tanpa antarmuka. Berpasangan dengan cc_server, mendeklarasikan kemampuan host-nya, menarik pekerjaan yang disewakan, mengeksekusinya, dan mengalirkan peristiwa proses kembali. Tidak memegang status persisten sama sekali — satu server otoritatif, N anggota badan yang lugu.
JobSpec: Spesifikasi bertipe untuk segala hal yang dapat dieksekusi (run agen, langkah pipeline, indeks kode, render golden, benchmark, batch eval).
Suite eval: Definisi evaluasi bercakupan ruang kerja (prompt, agen dan mode sasaran, penilai). Lima suite pemula di-seed saat ruang kerja dibuat; Observabilitas → Kualitas mencantumkannya.
Deployment dan klien
Bagian berjudul “Deployment dan klien”Arsitektur klien tipis: Tidak ada klien yang membuka basis data; proses cc_server tanpa antarmuka memiliki data dan menyajikannya melalui RPC WebSocket. Setiap klien (desktop, web, ponsel) adalah perender di atas satu koneksi RPC itu.
cc_server: Biner server tanpa antarmuka (Dart murni, tanpa mesin Flutter). Memiliki basis data Drift/SQLite, menyajikan repo-RPC melalui WebSocket, dan menjalankan layanan latar belakang (pipeline, MCP, rekonsiliator).
ServerConnectionMode: Cara desktop menjangkau servernya — local (menjalankan cc_server di mesin ini, default) atau remote (menghubungi yang di tempat lain). Klien web selalu remote.
RemoteRpcClient: Klien JSON-RPC agnostik transport yang dipakai setiap klien tipis untuk berbicara dengan servernya — melalui WSS, loopback, atau relay dengan perantara.
Cakupan ruang kerja per panggilan: Server tidak menyimpan status — tidak ada pengikatan ruang kerja per sesi, sehingga beberapa klien pada satu server tidak pernah berbagi “ruang kerja saat ini”. Setiap repo/call dan sub/subscribe bercakupan ruang kerja harus membawa workspace_id di argumennya; id yang hilang atau tidak terdaftar ditolak sebelum basis data mana pun dibuka. Aksesnya kemudian digerbangi oleh keanggotaan dan peran ruang kerja, bukan oleh sesi.
cc_remote: Klien tipis ponsel — PWA web Flutter yang mengendalikan fleet dari jarak jauh melalui relay dengan perantara, dengan kebijakan alat yang menolak secara default.
cc_signaling_server: Broker relay WebSocket tanpa status yang menghosting ruang bergerbang undangan — relay sederhana yang hanya meneruskan frame tersegel ujung ke ujung, tidak memegang data aplikasi, dan tidak pernah melihat PSK pemasangan.