Skip to content

Commit e5a982e

Browse files
authored
docs: PicoClaw fact-check tool order before a factual reply (#22)
search then get then audit. throttled is not absence. 2dph is the gate, not the agent loop.
1 parent 6b680bd commit e5a982e

4 files changed

Lines changed: 39 additions & 1 deletion

File tree

‎AGENTS.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ Read first: [PLAN](PLAN.md) → [docs](docs/).
1515
- `info` root = descriptive/narrative leafs, searchable, never asserted as fact.
1616
- Search is deduction: `facts` → `info` → `web-search` (second independent
1717
source). An answer is `confirmed` only if it comes off the facts root.
18+
- Fact-check every *claim* (facts → info → live → web), not every edit or
19+
syntax tweak. PicoClaw: `search` then `get` then `audit` before a factual
20+
reply (`skills/picoclaw/SKILL.md`). `throttled` is not a negative finding.
1821

1922
## Hard rules
2023

‎PLAN.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ detective method: **a fact needs ≥2 independent sources or it is
5151
2dph/
5252
PLAN.md / AGENTS.md
5353
docs/ published docs (this conversation → docs/ as md)
54-
skills/ in-project skills (web-search, postgres, brain, diataxis-docs)
54+
skills/ in-project skills (web-search, postgres, brain, picoclaw, diataxis-docs)
5555
bin/
5656
facts/extract.go audit.go crm.go # D14 shebang; Python implementation
5757
kb/index Python write path (called by bin/brain/index.go)

‎bin/tools/test_skills.py‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,13 @@ def test_brain_skill_lists_generated_tools(self) -> None:
3737
self.assertIn("tools.md", skill)
3838
for name in ("search", "get", "stats", "audit"):
3939
self.assertIn(f"`{name}`", tools)
40+
41+
def test_picoclaw_lists_tool_order(self) -> None:
42+
skill = (ROOT / "skills" / "picoclaw" / "SKILL.md").read_text()
43+
agents = (ROOT / "AGENTS.md").read_text()
44+
self.assertIn("**`search`**", skill)
45+
self.assertIn("**`get`**", skill)
46+
self.assertIn("**`audit`**", skill)
47+
self.assertIn("throttled", skill.lower())
48+
self.assertIn("not a negative finding", agents)
49+
self.assertIn("Fact-check every", agents)

‎skills/picoclaw/SKILL.md‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
name: picoclaw
3+
description: >-
4+
2dph is the memory/fact gate, not the agent loop. Use when wiring PicoClaw
5+
or any MCP client: call brain search/get/audit before a factual reply.
6+
throttled is not a negative finding.
7+
---
8+
9+
# PicoClaw — fact-check before assert
10+
11+
PicoClaw (or any agent) speaks MCP at `POST /mcp` on `bin/brain/serve.go`.
12+
2dph does not run the agent loop. Compose profile for a live agent is issue #9.
13+
14+
## Tool order (before a factual reply)
15+
16+
1. **`search`** — facts root first, then info. The `web` block is a second
17+
source when there is no facts hit. Status `throttled` / `skipped` /
18+
`refused` is **not** evidence of absence.
19+
2. **`get`** — full leaf body only when a hit `id` is needed.
20+
3. **`audit`** — if recall or confidence looks wrong.
21+
22+
Then answer. Confirmed only from facts (≥2 independent sources). Anything
23+
else is `(not confirmed)`. Missing graph ≠ “does not exist”.
24+
25+
Generated tool list: [../brain/tools.md](../brain/tools.md).

0 commit comments

Comments
 (0)