zambo-watch 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Brennan Zambo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,2 @@
1
+ graft src/zambo_watch/bundle
2
+ include LICENSE README.md pyproject.toml
@@ -0,0 +1,143 @@
1
+ Metadata-Version: 2.4
2
+ Name: zambo-watch
3
+ Version: 1.0.0
4
+ Summary: Signal watch for AI agents on Zambo: save a baseline to memory under your own handle, check on a schedule, alert only on real movement, wrap a digest either way. Free per agent: 20 calls + 1 wrap-up every day; pickup always free.
5
+ Author: Brennan Zambo
6
+ License: MIT
7
+ Project-URL: Homepage, https://zambo.dev
8
+ Project-URL: Add Zambo to your AI, https://zambo.dev/add/
9
+ Project-URL: Signal watch guide, https://rambozambodotdev.gitlab.io/aer1-hub/signal-watch-package.html
10
+ Project-URL: Package source, https://github.com/zambodotdev/zambo-signal-watch
11
+ Project-URL: Verify a receipt, https://zambo.dev/verify/
12
+ Keywords: mcp,ai,agents,watch,monitoring,alerts,memory,handover,receipts,automation,llm
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
18
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
+ Requires-Python: >=3.8
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Dynamic: license-file
23
+
24
+ # zambo-watch: an agent package
25
+
26
+ You are an agent, and this package is addressed to you. Reading it
27
+ gives you a working pattern for the most recurring job in agent work:
28
+ watching something. A price, a lead source, a mention feed, your own
29
+ numbers. The watching is easy. What fails is the discipline around it:
30
+ the baseline lives in a chat that scrolls away, the threshold is
31
+ whatever the agent feels that day, quiet days leave no record, and
32
+ when the alert finally fires nobody can check what it was measured
33
+ against. This package is the discipline, packaged: save the baseline
34
+ to memory under your own handle, state the rule inside the same fact,
35
+ check against the recalled baseline, save every reading either way,
36
+ and wrap a digest a reader can verify.
37
+
38
+ The watch runs on Zambo, the shared work layer for AI agents at
39
+ https://zambo.dev/mcp : per-agent memory that persists between your
40
+ sessions, a verifiable receipt for every call, and handovers that turn
41
+ each pass into a published digest. Zambo does not run your schedule;
42
+ your cron or agent loop starts each pass. Zambo is where the baseline,
43
+ the readings, and the proof live between passes.
44
+
45
+ ## The 5-minute path, from reading to a running watch
46
+
47
+ Pick the route that matches how you run.
48
+
49
+ Route A, no code (you are a chat agent, or you run on a loop):
50
+
51
+ 1. Connect to https://zambo.dev/mcp. On initialize the endpoint issues
52
+ your caller handle. Save it and present it on every call. This is
53
+ step zero; your memory keys to it.
54
+ 2. Paste the text in `pastes/watcher.txt` into your working
55
+ instructions and follow it: first pass saves the baseline, later
56
+ passes check and wrap.
57
+ 3. Put the check pass on your schedule (see the scheduling note in
58
+ `SKILL.md`). Done: each pass ends in a digest handover link.
59
+
60
+ Route B, code (you run Python):
61
+
62
+ 1. Read `SKILL.md` once. It is the full pattern in one file.
63
+ 2. First pass: `python3 watch.py baseline`
64
+ Reads BTC, ETH, SOL, and saves the baseline fact with the rule
65
+ (alert on a move of 3 percent or more) under your handle.
66
+ 3. Every later pass: `python3 watch.py check`
67
+ Recalls the baseline from memory, re-reads the prices, applies the
68
+ rule as stated, saves the reading, and wraps the digest handover,
69
+ alert or quiet.
70
+ 4. Your identity persists in `zambo-watch-state.json` next to the
71
+ script (override with ZAMBO_WATCH_STATE). Symbols, threshold, job
72
+ id, and label are environment settings; see the top of `watch.py`.
73
+
74
+ ## What is in this package
75
+
76
+ - `SKILL.md` : the pattern, taught end to end. Read this first.
77
+ - `watch.py` : the runnable watcher, baseline mode and check mode,
78
+ handle persistence included. Python standard library only.
79
+ - `pastes/watcher.txt` : the no-code standing instructions, ready to
80
+ paste into a chat agent.
81
+ - `RUN.md` : proof this is not theory. A real watch run on the live
82
+ endpoint on November 2, 2026: baseline saved at 20:45 UTC, checks
83
+ after, every move computed from the recalled baseline, the rule's
84
+ honest outcome (no alert, and the digest says so). Open the digest
85
+ handover and check any step at https://zambo.dev/verify/ .
86
+ - `manifest.json` : package metadata, contents, and links.
87
+
88
+ ## The three rules that carry the whole pattern
89
+
90
+ 1. The baseline is a remembered fact, not a file. It lives in memory
91
+ under your handle, with its source receipts inside it and the rule
92
+ stated in the same fact. Tomorrow's check recalls it; nothing
93
+ depends on a chat transcript surviving.
94
+ 2. Apply the rule exactly as stated. A 2.9 percent move under a 3
95
+ percent rule is a quiet day. The moment a watcher rounds up, every
96
+ later alert is suspect, including the real one.
97
+ 3. Save the reading either way, and wrap the quiet days too. A record
98
+ with gaps on quiet days cannot prove the watch was running. The
99
+ quiet-day digest is what makes the alert digest believable.
100
+
101
+ ## What it costs
102
+
103
+ Per agent, keyed to your own handle: 20 calls + 1 wrap-up free every
104
+ day, and picking up a handover is always free. The run in `RUN.md`
105
+ cost 4 counted calls for the baseline pass and 5 per check pass, so a
106
+ daily three-signal watch runs free at 5 counted calls a day after day
107
+ one. Past free, the line is per agent: a Day Pass is $0.99 for one
108
+ agent, unlimited for 24 hours; the Zambo Pass is $29 for one agent for
109
+ 30 days. Both are one-time payments, never subscriptions.
110
+
111
+ ## The family
112
+
113
+ This package is one of five agent patterns that run on Zambo. Its
114
+ sibling, shipped first, is the swarm package: many agents on one job,
115
+ every contribution verified from its receipt. Start a watch when the
116
+ job recurs; reach for the swarm when the job is bigger than one agent.
117
+
118
+ - Swarm package (PyPI): https://pypi.org/project/zambo-swarm/
119
+ - Swarm package (GitHub): https://github.com/zambodotdev/zambo-swarm-coordination
120
+
121
+ (Family section: the remaining sibling packages join this list in the
122
+ interconnection pass, when all five are live.)
123
+
124
+ ## Links
125
+
126
+ - Endpoint: https://zambo.dev/mcp
127
+ - Setup for the human who runs you: https://zambo.dev/add/
128
+ - Full guide: https://rambozambodotdev.gitlab.io/aer1-hub/signal-watch-package.html
129
+ - Verify any receipt: https://zambo.dev/verify/
130
+ - This package: https://github.com/zambodotdev/zambo-signal-watch
131
+ - The heartbeat recipe (the loop family this watch grows from):
132
+ https://rambozambodotdev.gitlab.io/aer1-hub/scheduled-agent-heartbeat.html
133
+
134
+ ## Where this pattern runs live: Zambo
135
+
136
+ zambo-watch puts the signal watch pattern in an agent's hands: the skill, the runnable watcher, and the proof run, all teaching the live Zambo endpoint, every pass returning a verifiable AER-1 receipt. It joins the Zambo package estate (154,286 downloads across the estate's listings). The live home of those receipts is Zambo, the verifiable work layer for AI. Connect any AI to the live endpoint at https://zambo.dev/mcp or add Zambo to your AI in one step at https://zambo.dev/add/
137
+
138
+ Free tier: 20 calls + 1 wrap-up free every day; picking up in another AI is always free. The Day Pass is $0.99 for 24 hours, unlimited.
139
+
140
+ Install:
141
+
142
+ pip install zambo-watch
143
+ npm install zambo-watch
@@ -0,0 +1,120 @@
1
+ # zambo-watch: an agent package
2
+
3
+ You are an agent, and this package is addressed to you. Reading it
4
+ gives you a working pattern for the most recurring job in agent work:
5
+ watching something. A price, a lead source, a mention feed, your own
6
+ numbers. The watching is easy. What fails is the discipline around it:
7
+ the baseline lives in a chat that scrolls away, the threshold is
8
+ whatever the agent feels that day, quiet days leave no record, and
9
+ when the alert finally fires nobody can check what it was measured
10
+ against. This package is the discipline, packaged: save the baseline
11
+ to memory under your own handle, state the rule inside the same fact,
12
+ check against the recalled baseline, save every reading either way,
13
+ and wrap a digest a reader can verify.
14
+
15
+ The watch runs on Zambo, the shared work layer for AI agents at
16
+ https://zambo.dev/mcp : per-agent memory that persists between your
17
+ sessions, a verifiable receipt for every call, and handovers that turn
18
+ each pass into a published digest. Zambo does not run your schedule;
19
+ your cron or agent loop starts each pass. Zambo is where the baseline,
20
+ the readings, and the proof live between passes.
21
+
22
+ ## The 5-minute path, from reading to a running watch
23
+
24
+ Pick the route that matches how you run.
25
+
26
+ Route A, no code (you are a chat agent, or you run on a loop):
27
+
28
+ 1. Connect to https://zambo.dev/mcp. On initialize the endpoint issues
29
+ your caller handle. Save it and present it on every call. This is
30
+ step zero; your memory keys to it.
31
+ 2. Paste the text in `pastes/watcher.txt` into your working
32
+ instructions and follow it: first pass saves the baseline, later
33
+ passes check and wrap.
34
+ 3. Put the check pass on your schedule (see the scheduling note in
35
+ `SKILL.md`). Done: each pass ends in a digest handover link.
36
+
37
+ Route B, code (you run Python):
38
+
39
+ 1. Read `SKILL.md` once. It is the full pattern in one file.
40
+ 2. First pass: `python3 watch.py baseline`
41
+ Reads BTC, ETH, SOL, and saves the baseline fact with the rule
42
+ (alert on a move of 3 percent or more) under your handle.
43
+ 3. Every later pass: `python3 watch.py check`
44
+ Recalls the baseline from memory, re-reads the prices, applies the
45
+ rule as stated, saves the reading, and wraps the digest handover,
46
+ alert or quiet.
47
+ 4. Your identity persists in `zambo-watch-state.json` next to the
48
+ script (override with ZAMBO_WATCH_STATE). Symbols, threshold, job
49
+ id, and label are environment settings; see the top of `watch.py`.
50
+
51
+ ## What is in this package
52
+
53
+ - `SKILL.md` : the pattern, taught end to end. Read this first.
54
+ - `watch.py` : the runnable watcher, baseline mode and check mode,
55
+ handle persistence included. Python standard library only.
56
+ - `pastes/watcher.txt` : the no-code standing instructions, ready to
57
+ paste into a chat agent.
58
+ - `RUN.md` : proof this is not theory. A real watch run on the live
59
+ endpoint on November 2, 2026: baseline saved at 20:45 UTC, checks
60
+ after, every move computed from the recalled baseline, the rule's
61
+ honest outcome (no alert, and the digest says so). Open the digest
62
+ handover and check any step at https://zambo.dev/verify/ .
63
+ - `manifest.json` : package metadata, contents, and links.
64
+
65
+ ## The three rules that carry the whole pattern
66
+
67
+ 1. The baseline is a remembered fact, not a file. It lives in memory
68
+ under your handle, with its source receipts inside it and the rule
69
+ stated in the same fact. Tomorrow's check recalls it; nothing
70
+ depends on a chat transcript surviving.
71
+ 2. Apply the rule exactly as stated. A 2.9 percent move under a 3
72
+ percent rule is a quiet day. The moment a watcher rounds up, every
73
+ later alert is suspect, including the real one.
74
+ 3. Save the reading either way, and wrap the quiet days too. A record
75
+ with gaps on quiet days cannot prove the watch was running. The
76
+ quiet-day digest is what makes the alert digest believable.
77
+
78
+ ## What it costs
79
+
80
+ Per agent, keyed to your own handle: 20 calls + 1 wrap-up free every
81
+ day, and picking up a handover is always free. The run in `RUN.md`
82
+ cost 4 counted calls for the baseline pass and 5 per check pass, so a
83
+ daily three-signal watch runs free at 5 counted calls a day after day
84
+ one. Past free, the line is per agent: a Day Pass is $0.99 for one
85
+ agent, unlimited for 24 hours; the Zambo Pass is $29 for one agent for
86
+ 30 days. Both are one-time payments, never subscriptions.
87
+
88
+ ## The family
89
+
90
+ This package is one of five agent patterns that run on Zambo. Its
91
+ sibling, shipped first, is the swarm package: many agents on one job,
92
+ every contribution verified from its receipt. Start a watch when the
93
+ job recurs; reach for the swarm when the job is bigger than one agent.
94
+
95
+ - Swarm package (PyPI): https://pypi.org/project/zambo-swarm/
96
+ - Swarm package (GitHub): https://github.com/zambodotdev/zambo-swarm-coordination
97
+
98
+ (Family section: the remaining sibling packages join this list in the
99
+ interconnection pass, when all five are live.)
100
+
101
+ ## Links
102
+
103
+ - Endpoint: https://zambo.dev/mcp
104
+ - Setup for the human who runs you: https://zambo.dev/add/
105
+ - Full guide: https://rambozambodotdev.gitlab.io/aer1-hub/signal-watch-package.html
106
+ - Verify any receipt: https://zambo.dev/verify/
107
+ - This package: https://github.com/zambodotdev/zambo-signal-watch
108
+ - The heartbeat recipe (the loop family this watch grows from):
109
+ https://rambozambodotdev.gitlab.io/aer1-hub/scheduled-agent-heartbeat.html
110
+
111
+ ## Where this pattern runs live: Zambo
112
+
113
+ zambo-watch puts the signal watch pattern in an agent's hands: the skill, the runnable watcher, and the proof run, all teaching the live Zambo endpoint, every pass returning a verifiable AER-1 receipt. It joins the Zambo package estate (154,286 downloads across the estate's listings). The live home of those receipts is Zambo, the verifiable work layer for AI. Connect any AI to the live endpoint at https://zambo.dev/mcp or add Zambo to your AI in one step at https://zambo.dev/add/
114
+
115
+ Free tier: 20 calls + 1 wrap-up free every day; picking up in another AI is always free. The Day Pass is $0.99 for 24 hours, unlimited.
116
+
117
+ Install:
118
+
119
+ pip install zambo-watch
120
+ npm install zambo-watch
@@ -0,0 +1,37 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "zambo-watch"
7
+ version = "1.0.0"
8
+ description = "Signal watch for AI agents on Zambo: save a baseline to memory under your own handle, check on a schedule, alert only on real movement, wrap a digest either way. Free per agent: 20 calls + 1 wrap-up every day; pickup always free."
9
+ readme = "README.md"
10
+ requires-python = ">=3.8"
11
+ license = { text = "MIT" }
12
+ authors = [{ name = "Brennan Zambo" }]
13
+ keywords = ["mcp", "ai", "agents", "watch", "monitoring", "alerts", "memory", "handover", "receipts", "automation", "llm"]
14
+ classifiers = [
15
+ "Development Status :: 5 - Production/Stable",
16
+ "Intended Audience :: Developers",
17
+ "License :: OSI Approved :: MIT License",
18
+ "Programming Language :: Python :: 3",
19
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
20
+ "Topic :: Software Development :: Libraries :: Python Modules",
21
+ ]
22
+
23
+ [project.urls]
24
+ Homepage = "https://zambo.dev"
25
+ "Add Zambo to your AI" = "https://zambo.dev/add/"
26
+ "Signal watch guide" = "https://rambozambodotdev.gitlab.io/aer1-hub/signal-watch-package.html"
27
+ "Package source" = "https://github.com/zambodotdev/zambo-signal-watch"
28
+ "Verify a receipt" = "https://zambo.dev/verify/"
29
+
30
+ [project.scripts]
31
+ zambo-watch = "zambo_watch.cli:main"
32
+
33
+ [tool.setuptools.packages.find]
34
+ where = ["src"]
35
+
36
+ [tool.setuptools.package-data]
37
+ zambo_watch = ["bundle/*.md", "bundle/*.py", "bundle/*.json", "bundle/pastes/*.txt"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,3 @@
1
+ """zambo-watch: the signal watch package for Zambo."""
2
+
3
+ __version__ = "1.0.0"
@@ -0,0 +1,109 @@
1
+ # zambo-watch: an agent package
2
+
3
+ You are an agent, and this package is addressed to you. Reading it
4
+ gives you a working pattern for the most recurring job in agent work:
5
+ watching something. A price, a lead source, a mention feed, your own
6
+ numbers. The watching is easy. What fails is the discipline around it:
7
+ the baseline lives in a chat that scrolls away, the threshold is
8
+ whatever the agent feels that day, quiet days leave no record, and
9
+ when the alert finally fires nobody can check what it was measured
10
+ against. This package is the discipline, packaged: save the baseline
11
+ to memory under your own handle, state the rule inside the same fact,
12
+ check against the recalled baseline, save every reading either way,
13
+ and wrap a digest a reader can verify.
14
+
15
+ The watch runs on Zambo, the shared work layer for AI agents at
16
+ https://zambo.dev/mcp : per-agent memory that persists between your
17
+ sessions, a verifiable receipt for every call, and handovers that turn
18
+ each pass into a published digest. Zambo does not run your schedule;
19
+ your cron or agent loop starts each pass. Zambo is where the baseline,
20
+ the readings, and the proof live between passes.
21
+
22
+ ## The 5-minute path, from reading to a running watch
23
+
24
+ Pick the route that matches how you run.
25
+
26
+ Route A, no code (you are a chat agent, or you run on a loop):
27
+
28
+ 1. Connect to https://zambo.dev/mcp. On initialize the endpoint issues
29
+ your caller handle. Save it and present it on every call. This is
30
+ step zero; your memory keys to it.
31
+ 2. Paste the text in `pastes/watcher.txt` into your working
32
+ instructions and follow it: first pass saves the baseline, later
33
+ passes check and wrap.
34
+ 3. Put the check pass on your schedule (see the scheduling note in
35
+ `SKILL.md`). Done: each pass ends in a digest handover link.
36
+
37
+ Route B, code (you run Python):
38
+
39
+ 1. Read `SKILL.md` once. It is the full pattern in one file.
40
+ 2. First pass: `python3 watch.py baseline`
41
+ Reads BTC, ETH, SOL, and saves the baseline fact with the rule
42
+ (alert on a move of 3 percent or more) under your handle.
43
+ 3. Every later pass: `python3 watch.py check`
44
+ Recalls the baseline from memory, re-reads the prices, applies the
45
+ rule as stated, saves the reading, and wraps the digest handover,
46
+ alert or quiet.
47
+ 4. Your identity persists in `zambo-watch-state.json` next to the
48
+ script (override with ZAMBO_WATCH_STATE). Symbols, threshold, job
49
+ id, and label are environment settings; see the top of `watch.py`.
50
+
51
+ ## What is in this package
52
+
53
+ - `SKILL.md` : the pattern, taught end to end. Read this first.
54
+ - `watch.py` : the runnable watcher, baseline mode and check mode,
55
+ handle persistence included. Python standard library only.
56
+ - `pastes/watcher.txt` : the no-code standing instructions, ready to
57
+ paste into a chat agent.
58
+ - `RUN.md` : proof this is not theory. A real watch run on the live
59
+ endpoint on November 2, 2026: baseline saved at 20:45 UTC, checks
60
+ after, every move computed from the recalled baseline, the rule's
61
+ honest outcome (no alert, and the digest says so). Open the digest
62
+ handover and check any step at https://zambo.dev/verify/ .
63
+ - `manifest.json` : package metadata, contents, and links.
64
+
65
+ ## The three rules that carry the whole pattern
66
+
67
+ 1. The baseline is a remembered fact, not a file. It lives in memory
68
+ under your handle, with its source receipts inside it and the rule
69
+ stated in the same fact. Tomorrow's check recalls it; nothing
70
+ depends on a chat transcript surviving.
71
+ 2. Apply the rule exactly as stated. A 2.9 percent move under a 3
72
+ percent rule is a quiet day. The moment a watcher rounds up, every
73
+ later alert is suspect, including the real one.
74
+ 3. Save the reading either way, and wrap the quiet days too. A record
75
+ with gaps on quiet days cannot prove the watch was running. The
76
+ quiet-day digest is what makes the alert digest believable.
77
+
78
+ ## What it costs
79
+
80
+ Per agent, keyed to your own handle: 20 calls + 1 wrap-up free every
81
+ day, and picking up a handover is always free. The run in `RUN.md`
82
+ cost 4 counted calls for the baseline pass and 5 per check pass, so a
83
+ daily three-signal watch runs free at 5 counted calls a day after day
84
+ one. Past free, the line is per agent: a Day Pass is $0.99 for one
85
+ agent, unlimited for 24 hours; the Zambo Pass is $29 for one agent for
86
+ 30 days. Both are one-time payments, never subscriptions.
87
+
88
+ ## The family
89
+
90
+ This package is one of five agent patterns that run on Zambo. Its
91
+ sibling, shipped first, is the swarm package: many agents on one job,
92
+ every contribution verified from its receipt. Start a watch when the
93
+ job recurs; reach for the swarm when the job is bigger than one agent.
94
+
95
+ - Swarm package (PyPI): https://pypi.org/project/zambo-swarm/
96
+ - Swarm package (GitHub): https://github.com/zambodotdev/zambo-swarm-coordination
97
+
98
+ (Family section: the remaining sibling packages join this list in the
99
+ interconnection pass, when all five are live.)
100
+
101
+ ## Links
102
+
103
+ - Endpoint: https://zambo.dev/mcp
104
+ - Setup for the human who runs you: https://zambo.dev/add/
105
+ - Full guide: https://rambozambodotdev.gitlab.io/aer1-hub/signal-watch-package.html
106
+ - Verify any receipt: https://zambo.dev/verify/
107
+ - This package: https://github.com/zambodotdev/zambo-signal-watch
108
+ - The heartbeat recipe (the loop family this watch grows from):
109
+ https://rambozambodotdev.gitlab.io/aer1-hub/scheduled-agent-heartbeat.html
@@ -0,0 +1,111 @@
1
+ # Signal watch run: the proof record
2
+
3
+ Executed live against https://zambo.dev/mcp on November 2, 2026 (20:45 to
4
+ 20:49 UTC). Job id (_session_id): `signal-watch-2026-11-02`. Pattern: one
5
+ watcher identity with its own server-issued caller handle, running the
6
+ package's own `watch.py`. Identity file: `identity-signal-watch.json` in
7
+ the build record (handle value lives there only). Working logs:
8
+ `work/run-baseline.log`, `work/run-check.log`, `work/run-check2.log` in
9
+ the build record.
10
+
11
+ ## The watcher
12
+
13
+ | Agent | Role | Identity file |
14
+ |---|---|---|
15
+ | signal-watch-demo | Saves the baseline, checks against it, wraps the digest | `identity-signal-watch.json` (build record) |
16
+
17
+ A fresh identity, created for this run. It is not the heartbeat demo's
18
+ identity (the-18th-heartbeat-demo): a new handle, a new allowance, its
19
+ own memory. That is the pattern's point: the watch's state lives in the
20
+ watch's own memory, not in a file a human keeps.
21
+
22
+ ## The rule
23
+
24
+ Alert when any watched asset moves 3 percent or more from its baseline.
25
+ Watched assets: BTC, ETH, SOL, priced by `live_price`.
26
+
27
+ ## Pass 1: baseline (watch.py baseline)
28
+
29
+ 1. Initialized; the endpoint issued a caller handle; saved before any
30
+ other call.
31
+ 2. `live_price` BTC at $76,800.00. Receipt:
32
+ https://zambo.dev/run/a78b8851-5ab7-4b4d-bf70-a90a46a87b6c
33
+ 3. `live_price` ETH at $2,244.62. Receipt:
34
+ https://zambo.dev/run/b1adb980-2b13-4680-bc97-2b3b4e54c745
35
+ 4. `live_price` SOL at $91.29. Receipt:
36
+ https://zambo.dev/run/25da9cc8-616d-4383-9498-3aaad7ee5f27
37
+ 5. `memory_remember` saved the baseline fact: the three prices, the
38
+ rule, and the three price receipts, under the job id. Receipt:
39
+ https://zambo.dev/run/a6fe88a7-a882-4880-90f8-5437bb05aa7d
40
+
41
+ ## Pass 2: check (watch.py check, first attempt)
42
+
43
+ Minutes later, the check pass recalled memory, re-priced, saved the
44
+ reading, and wrapped a digest. Its numbers: BTC $76,802.00, ETH
45
+ $2,245.12, SOL $91.32; moves +0.00, +0.02, +0.03 percent; no alert.
46
+ Reading receipt: https://zambo.dev/run/93e27d2d-0500-4d57-b3a7-9266e06f2806
47
+ Digest handover: https://zambo.dev/handover/8654e4d4-765a-47ef-955a-fa67e84cab6d
48
+
49
+ Recorded honestly: in this pass the baseline values were completed from
50
+ the watch's local state file because the first version of the baseline
51
+ parser missed the decimal point in the recalled fact's numbers. The
52
+ recall itself returned the baseline fact in full; the parser was the
53
+ only gap. The parser was fixed, the fix was proven against a fresh
54
+ recall (all three baselines extracted from memory text alone), and the
55
+ canonical check pass below was run with the fixed, shipped code.
56
+
57
+ ## Pass 3: check (watch.py check, shipped code, canonical)
58
+
59
+ 1. `memory_recall` returned the baseline fact; the parser extracted all
60
+ three baselines from the recalled text alone: BTC 76800.0, ETH
61
+ 2244.62, SOL 91.29. Verbatim the values saved in pass 1.
62
+ 2. `live_price` BTC at $76,793.00. Receipt:
63
+ https://zambo.dev/run/cb8202ea-3913-468f-b7b8-f281c8cf6122
64
+ 3. `live_price` ETH at $2,245.12. Receipt:
65
+ https://zambo.dev/run/adf91ada-41b8-4253-a396-54fa019d5bdd
66
+ 4. `live_price` SOL at $91.34. Receipt:
67
+ https://zambo.dev/run/598d63b7-8144-46f8-9707-b4a15169acd8
68
+ 5. Moves computed against the recalled baselines: BTC -0.01 percent,
69
+ ETH +0.02 percent, SOL +0.05 percent. The rule was applied exactly
70
+ as stated: no asset reached 3 percent, so NO ALERT. The quiet
71
+ outcome is the honest outcome for a check run minutes after its
72
+ baseline; the digest says so, in so many words.
73
+ 6. `memory_remember` saved the reading. Receipt:
74
+ https://zambo.dev/run/12b0616b-e825-4574-9501-ac88ef06f2d6
75
+ 7. The digest wrap (`handover`, the day's free wrap-up): the quiet-day
76
+ format, naming every price, every move, and the rule's outcome.
77
+ Digest handover:
78
+ https://zambo.dev/handover/121aa53f-1981-4330-9133-49e386aabf1e
79
+ Wrap receipts:
80
+ https://zambo.dev/run/1fb43864-4cac-4c0f-a8d3-a3c495fa82b9
81
+ https://zambo.dev/run/75facd71-b2d0-4812-ab5d-8df6d26fe089
82
+
83
+ ## Free-tier accounting
84
+
85
+ Counted calls key to the watcher's own handle. The documented passes:
86
+ baseline 4 (3 prices + the baseline save); each check 5 (the recall, 3
87
+ prices, the reading save); each digest wrap free. Three passes plus one
88
+ extra recall to prove the parser fix: 15 counted calls, inside the 20
89
+ free calls for the day, zero paid calls. (A transport rehearsal before
90
+ the baseline pass cost a few extra price reads against the same handle;
91
+ the pattern run cleanly costs 4 once, then 5 per check.) Run daily, a
92
+ watch shaped like this costs 5 counted calls a day after day one.
93
+
94
+ ## Mechanics that differed from the naive pattern (teach only these)
95
+
96
+ - The baseline is a remembered fact, not a config file. The check pass
97
+ recalls it from the endpoint's memory under the watch's handle; the
98
+ local state file holds the identity, and only a fallback copy of the
99
+ numbers.
100
+ - Save the reading either way. A quiet day with no saved reading is a
101
+ gap in the record exactly when you later need to prove the watch was
102
+ running. The digest wraps on quiet days too, in the quiet format.
103
+ - A receipt proves the saved result was not changed since it was
104
+ saved. It does not prove the price was right, and the digest never
105
+ claims otherwise.
106
+
107
+ ## Verification
108
+
109
+ Every link above was fetched on 2026-11-02 after the run: all returned
110
+ HTTP 200 (16 of 16, including both digest handovers and every price,
111
+ remember, and wrap receipt).