1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Cluster Mode
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Cluster mode lets multiple machines share a single navegador graph over Redis. Use it when your team runs large ingestion jobs, want shared context across agents and CI, or need partitioned work processing.
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Prerequisites
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Redis 7+ (or a managed Redis service — Upstash, Redis Cloud, etc.)
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `pip install "navegador[redis]"`
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Setup
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### 1. Initialize cluster mode
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Point navegador at your Redis instance and run init:
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador init --cluster --redis redis://your-redis-host:6379
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This writes cluster config to `navegador.toml`:
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```toml
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[cluster]
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
enabled = true
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
redis_url = "redis://your-redis-host:6379"
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
graph_name = "navegador"
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
node_id = "worker-1" # auto-generated; override with --node-id
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### 2. Verify connectivity
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster status
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Output:
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Cluster: connected
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Redis: redis://your-redis-host:6379
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Graph: navegador (47,231 nodes, 189,043 edges)
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Workers: 3 online (worker-1, worker-2, ci-runner-7)
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Queue: 0 tasks pending
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Shared graph
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
All cluster members read from and write to the same FalkorDB graph stored in Redis. Any ingestion or annotation from any node is immediately visible to all other nodes.
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
56
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
57
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# on any machine in the cluster
58
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador ingest ./src
59
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
60
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# on any other machine — sees the result immediately
61
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador explain AuthService
62
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
63
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
64
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Local snapshots
65
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
66
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
To work offline or reduce Redis round-trips, snapshot the graph to a local SQLite file:
67
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
68
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
69
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# pull a snapshot from the shared graph
70
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster snapshot --pull .navegador/local.db
71
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
72
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# use the snapshot for queries
73
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador --db .navegador/local.db explain AuthService
74
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
75
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# push local changes back to the shared graph
76
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster snapshot --push .navegador/local.db
77
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
78
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
79
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Snapshots are point-in-time copies. They do not auto-sync. Use `--pull` to refresh and `--push` to merge back.
80
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
81
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
82
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
83
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Task queue
84
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
85
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The cluster task queue distributes ingestion and analysis jobs across workers. Instead of running `navegador ingest` directly, submit a task:
86
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
87
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
88
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# submit an ingestion task
89
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster enqueue ingest ./src --clear
90
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
91
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# submit an analysis task
92
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster enqueue analyze impact validate_token
93
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
94
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# list pending and active tasks
95
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster queue
96
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
97
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
98
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Workers pick up tasks from the queue automatically. See [work partitioning](#work-partitioning) for multi-worker ingestion.
99
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Starting a worker
101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster worker start
104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The worker polls the queue and processes tasks. Run one worker per machine.
107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# run in background
110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster worker start --daemon
111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
112
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# stop the worker
113
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster worker stop
114
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
115
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
116
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Work partitioning
119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
For large monorepos, split ingestion across multiple workers:
121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# partition a directory across N workers
124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster partition ./src --workers 4
125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# each worker then runs its assigned slice
127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster worker start --partition 0 --of 4 # worker 0
128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster worker start --partition 1 --of 4 # worker 1
129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# ...
130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Partitioning splits the file list across workers by file count. All workers write to the same shared graph. The final graph is the union of all partitions.
133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### In CI
135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```yaml
137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# .github/workflows/ingest.yml
138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
jobs:
139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ingest:
140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
strategy:
141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
matrix:
142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
partition: [0, 1, 2, 3]
143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
steps:
144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- run: navegador cluster worker start --partition ${{ matrix.partition }} --of 4 --run-once
145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`--run-once` processes the current queue and exits rather than running as a daemon.
148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Sessions
152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Sessions let multiple agents coordinate on the same task without interfering with each other.
154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# start a session (returns a session ID)
157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
SESSION=$(navegador cluster session start --name "feature/auth-refactor")
158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
echo "Session: $SESSION"
159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# run commands scoped to the session
161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador --session $SESSION ingest ./src/auth
162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador --session $SESSION explain AuthService
163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# end the session
165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster session end $SESSION
166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Sessions create a namespaced view of the graph. Writes within a session are visible to other session members but isolated from the main graph until committed.
169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# commit session changes to the main graph
172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster session commit $SESSION
173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# discard session changes
175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster session discard $SESSION
176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Locking
181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
For writes that must not overlap (e.g., `--clear` ingest), navegador acquires a distributed lock:
183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador ingest ./src --clear
186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# automatically acquires the graph write lock; other writers block until it releases
187
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
188
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
189
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
You can also acquire locks explicitly:
190
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
191
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
192
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# acquire a named lock
193
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
LOCK=$(navegador cluster lock acquire "ingest-lock" --ttl 300)
194
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
195
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# ... run your operations ...
196
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
197
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# release the lock
198
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster lock release $LOCK
199
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
200
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
201
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Locks have a TTL (seconds) and release automatically if the holder crashes.
202
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
203
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
204
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
205
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Messaging
206
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
207
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Workers and agents can exchange messages via the cluster bus:
208
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
209
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
210
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# publish a message to a channel
211
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster publish "ingest.complete" '{"repo": "myorg/myrepo", "nodes": 12450}'
212
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
213
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# subscribe to a channel (blocks; prints messages as they arrive)
214
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster subscribe "ingest.complete"
215
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
216
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
217
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Useful for triggering downstream steps (e.g., notify agents that a fresh ingest is ready) without polling.
218
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
219
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
220
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
221
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Observability
222
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
223
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Cluster metrics
224
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
225
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
226
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster metrics
227
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
228
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
229
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Output:
230
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
231
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
232
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Graph
233
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Nodes: 47,231
234
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Edges: 189,043
235
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Last ingest: 2026-03-23T14:22:11Z (worker-2)
236
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
237
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Workers (3 online)
238
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
worker-1 idle last seen 4s ago
239
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
worker-2 idle last seen 2s ago
240
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ci-runner-7 processing task: ingest ./src/payments
241
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
242
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Queue
243
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Pending: 0
244
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Active: 1
245
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Completed: 847 (last 24h)
246
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Failed: 2 (last 24h)
247
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
248
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
249
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Logs
250
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
251
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Workers emit structured JSON logs. Stream them:
252
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
253
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
254
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster logs --follow
255
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster logs --worker worker-2 --since 1h
256
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
257
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
258
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Health check
259
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
260
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
261
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador cluster health
262
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# exits 0 if healthy, 1 if degraded, 2 if unavailable
263
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
264
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
265
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Suitable for use in load balancer health checks and PagerDuty integrations.
266
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
267
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
268
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
269
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Configuration reference
270
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
271
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
All cluster settings can be set in `navegador.toml` or as environment variables:
272
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
273
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Setting | Env var | Default | Description |
274
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|---|
275
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `redis_url` | `NAVEGADOR_REDIS_URL` | `redis://localhost:6379` | Redis connection URL |
276
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `graph_name` | `NAVEGADOR_GRAPH_NAME` | `navegador` | FalkorDB graph name |
277
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `node_id` | `NAVEGADOR_NODE_ID` | auto | Unique identifier for this worker |
278
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `lock_ttl` | `NAVEGADOR_LOCK_TTL` | `300` | Default lock TTL in seconds |
279
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `worker_poll_interval` | `NAVEGADOR_POLL_INTERVAL` | `2` | Queue poll interval in seconds |
280
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `snapshot_dir` | `NAVEGADOR_SNAPSHOT_DIR` | `.navegador/snapshots` | Local snapshot directory |
281
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!