2026-01-03 05:07:45 +01:00
# Journal Tools
2026-06-16 23:18:55 +02:00
There is **no** `roboco_journal_*` tool. Journaling is a single content tool on the `roboco-do` MCP server: `note` . The `scope` argument selects the entry kind; structured fields are filled per scope.
2026-01-03 05:07:45 +01:00
2026-06-05 17:20:36 +02:00
```python
note (
text : str , # always: one-paragraph summary
scope : str = "note" , # note | decision | reflect | learning | struggle
task_id : str | None = None , # auto-filled from your active task if omitted
title : str | None = None ,
# decision-scope fields:
context : str = "" ,
options = None , # list of {name, pros, cons} (a single dict is ok)
chosen : str = "" ,
rationale : str = "" ,
consequences = None , # list of strings (a single string is ok)
# reflect-scope fields:
what_done : str = "" ,
what_learned : str = "" ,
what_struggled : str = "" ,
next_steps = None , # list of strings (a single string is ok)
)
```
2026-06-16 23:18:55 +02:00
`text` is always required. Missing narrative fields default to a visible placeholder rather than being rejected — the note is always recorded.
2026-06-05 17:20:36 +02:00
## Scopes
| Scope | Use For | Structured fields |
|-------|---------|-------------------|
| `note` | General entry | (just `text` ) |
| `decision` | Decision log | `context` , `options` , `chosen` , `rationale` , `consequences` |
| `reflect` | Task reflection | `what_done` , `what_learned` , `what_struggled` , `next_steps` |
| `learning` | Learning capture | (just `text` ) |
| `struggle` | Problem / blocker | (just `text` ) |
2026-01-03 05:07:45 +01:00
## General Entry
```python
2026-06-05 17:20:36 +02:00
note (
text = "SCAN is better than KEYS for large datasets" ,
scope = "learning" ,
title = "Redis SCAN vs KEYS" ,
task_id = task_id ,
)
2026-01-03 05:07:45 +01:00
```
## Decision Log
```python
2026-06-05 17:20:36 +02:00
note (
text = "Chose Redis for session storage over PostgreSQL." ,
scope = "decision" ,
title = "Session storage choice" ,
context = "Need fast session lookups" ,
options = [
{ "name" : "PostgreSQL" , "pros" : "durable" , "cons" : "slower reads" },
{ "name" : "Redis" , "pros" : "sub-ms reads" , "cons" : "ephemeral" },
],
chosen = "Redis" ,
rationale = "Sub-ms reads, ephemeral data" ,
consequences = [ "Session loss on Redis restart is acceptable" ],
)
2026-01-03 05:07:45 +01:00
```
## Learning
```python
2026-06-05 17:20:36 +02:00
note (
text = "asyncio.gather for parallel calls — reduced latency 50%" ,
scope = "learning" ,
title = "Parallel async calls" ,
)
2026-01-03 05:07:45 +01:00
```
2026-06-05 17:20:36 +02:00
## Struggle (Problem / Blocker)
2026-01-03 05:07:45 +01:00
```python
2026-06-05 17:20:36 +02:00
note (
text = (
"Tests failing intermittently — tried timeout increase and retry "
"logic; root cause was a race condition in setup."
),
scope = "struggle" ,
task_id = task_id ,
)
2026-01-03 05:07:45 +01:00
```
2026-06-05 17:20:36 +02:00
## Reflection
2026-06-16 23:18:55 +02:00
Use a `reflect` -scope note before submitting to QA — it gives QA the "why" behind the diff.
2026-01-03 05:07:45 +01:00
```python
2026-06-05 17:20:36 +02:00
note (
text = "Implemented rate limiting with a Redis-backed sliding window." ,
scope = "reflect" ,
task_id = task_id ,
what_done = "Implemented rate limiting" ,
what_learned = "Lua scripts give atomicity for the counter increment" ,
what_struggled = "Testing concurrency deterministically" ,
next_steps = [ "Add a load test for the 100-req boundary" ],
)
2026-01-03 05:07:45 +01:00
```
## Reading Journals
2026-06-16 23:18:55 +02:00
Journals are written by `note` and surface through the knowledge base — there is no separate journal-read tool. Search past notes (yours and your team's, where permitted) via the `roboco-optimal` MCP server:
2026-06-05 17:20:36 +02:00
2026-01-03 05:07:45 +01:00
```python
2026-06-05 17:20:36 +02:00
# Semantic search over indexed notes/decisions/learnings
roboco_kb_search ( query = "rate limiting" , index_types = [ "journals" , "decisions" ])
2026-01-03 05:07:45 +01:00
2026-06-05 17:20:36 +02:00
# Conversational lookup with follow-up context
roboco_ask_mentor ( question = "What did we decide about session storage?" )
2026-01-03 05:07:45 +01:00
```