ticlawk 0.1.17-dev.15 → 0.1.17-dev.17

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ticlawk",
3
- "version": "0.1.17-dev.15",
3
+ "version": "0.1.17-dev.17",
4
4
  "description": "Local connector that links agent harnesses (Claude Code, Codex, OpenClaw, opencode, Pi) to the Ticlawk mobile app.",
5
5
  "type": "module",
6
6
  "main": "ticlawk.mjs",
@@ -19,7 +19,8 @@ const STEP_GUIDES = {
19
19
  - Judge "due now" against the current owner-local time above. Produce only what is due now; do NOT pre-produce a future occurrence — each one is produced when its own reminder fires and wakes you at that time.
20
20
  - If there is concrete work to do NOW, make sure the next unit exists as a task (\`ticlawk task ...\`), then report outcome=gap.
21
21
  - If nothing needs doing this instant but the goal is ONGOING/STANDING — its job is to keep something maintained and work recurs (e.g. an active recurring reminder above already covers the next occurrence) — report outcome=wait. Do NOT report no_gap for a standing goal: it has no "done", and parking on no_gap would stop it from waking at the next occurrence. If nothing is scheduled to resume it yet, schedule a reminder first, then report wait.
22
- - Report outcome=no_gap ONLY if the goal is genuinely, permanently met and will never need action again (an achievement goal that is finished). The completed result is something the owner is waiting on — surface it per the briefing rule below.`,
22
+ - Report outcome=no_gap ONLY if the goal is genuinely, permanently met and will never need action again (an achievement goal that is finished). The completed result is something the owner is waiting on — surface it per the briefing rule below.
23
+ - Judge done-ness by the goal's real deliverable — the work itself and the dashboard — NOT by whether the task board is tidy. A task still showing open, or one you could not close, is not by itself remaining work: if the deliverable is met, report no_gap. Never keep the loop alive, or spend this turn, just to reconcile the board.`,
23
24
  outcomes: ['gap', 'no_gap', 'wait'],
24
25
  },
25
26
  execute: {
@@ -33,7 +34,7 @@ const STEP_GUIDES = {
33
34
  review: {
34
35
  title: 'REVIEW',
35
36
  body: `Review the work that was just completed against the task and the goal.
36
- - If it meets the bar, mark the task done (\`ticlawk task update ... --status done\` where applicable) and report outcome=accepted.
37
+ - If it meets the bar, report outcome=accepted. Mark the task done if the board supports it (\`ticlawk task update ... --status done\`), but a close that fails or does not apply must NOT stop you from reporting accepted — the board is a coordination aid, not a gate.
37
38
  - If it needs rework, return it with a clean, specific redo instruction, then report outcome=rejected.`,
38
39
  outcomes: ['accepted', 'rejected'],
39
40
  },
@@ -111,7 +112,7 @@ export function buildGoalStepPrompt(msg) {
111
112
  ` ${reportCmd}`,
112
113
  ``,
113
114
  `Reporting the outcome continues the loop: a running next state comes back as a fresh step; with no gap or a wait, the loop parks itself. Report exactly once — do not loop inside this turn.`,
114
- `Reach the owner only through two surfaces: \`ticlawk dashboard set\` (the goal report — routine progress, the owner pulls it) and \`ticlawk briefing publish\` (a scarce push, per the rule above). The goal lane never uses \`ticlawk message send\` — chat is the chat lane's. Write owner-facing text for someone reading cold who has never seen your plan or task board: what changed, why it matters, and what (if anything) they must do — naming things by what they are, never by a private code, run name, task number, or an internal name for how the system works.`,
115
+ `Reach the owner only through two surfaces: \`ticlawk dashboard set\` (the goal report — routine progress, the owner pulls it) and \`ticlawk briefing publish\` (a scarce push, per the rule above). The goal lane never uses \`ticlawk message send\` — chat is the chat lane's. Write owner-facing text for someone reading cold who has never seen your plan or task board: what changed, why it matters, and what (if anything) they must do — naming things by what they are, never exposing how the system works inside or how your work is organized behind the scenes (tracks, loops, internal states, codes, run names, task numbers).`,
115
116
  `[/goal_step]`,
116
117
  ].join('\n'));
117
118
  } else {
@@ -97,6 +97,12 @@ Schedule a reminder for time-based follow-up. For a fixed cadence, use ONE recur
97
97
  - \`ticlawk reminder schedule --title <t> (--fire-at <iso>|--in-seconds N|--in-minutes N) (--target <target>|--anchor-conversation-id <id>) [--recur-at HH:MM] [--recur-weekday 1,2,3]\` — schedule a reminder. \`--recur-at\` is the owner's local wall-clock; the system fills the timezone. On each fire, a recurring reminder auto-advances.`;
98
98
  }
99
99
 
100
+ // The lane breakdown above is how YOU operate — your own model. It is never
101
+ // something to explain to a person. When someone asks what you do or what your
102
+ // role is, answer by what you help them accomplish, not by how the system is
103
+ // built.
104
+ const INTERNAL_MODEL_NOTE = `This split is your own operating model — never something to explain to a person. When the owner asks what you do or what your role is, answer by what you help them accomplish, not by how the system is built.`;
105
+
100
106
  // ---------------------------------------------------------------------------
101
107
  // Chat-authority (DM or group admin/owner)
102
108
  // ---------------------------------------------------------------------------
@@ -124,7 +130,9 @@ function chatAuthorityOverviewBlock(ctx) {
124
130
  return `${whereLine} The conversation is part of an agent system that drives itself to achieve a goal. It has two components:
125
131
 
126
132
  ${goalLaneBullet}
127
- ${chatLaneBullet}`;
133
+ ${chatLaneBullet}
134
+
135
+ ${INTERNAL_MODEL_NOTE}`;
128
136
  }
129
137
 
130
138
  function chatAuthorityMessagingSubsection(ctx) {
@@ -135,7 +143,7 @@ function chatAuthorityMessagingSubsection(ctx) {
135
143
  : '';
136
144
  return `### Messaging
137
145
 
138
- You reply to incoming messages with \`ticlawk message send\`. Pass body via stdin or heredoc so quotes and code blocks survive. The body is plain natural language never include an internal code, run name, task number, or an internal name for how the system works, which the recipient has no context for.
146
+ You reply to incoming messages with \`ticlawk message send\`. Pass body via stdin or heredoc so quotes and code blocks survive. The body is plain natural language. Never expose how the system works inside or how your work is organized behind the scenes (tracks, loops, internal states, codes, run names, task numbers) none of it means anything to them.
139
147
 
140
148
  - \`ticlawk message send --target <target> --phase progress|final [--attach <path>]\` — send a reply. Copy \`<target>\` from the incoming message verbatim. Body via stdin. Use \`--phase progress\` for any intermediate update and \`--phase final\` for the last message of the turn; after the final send succeeds, output exactly \`<turn_end>\` and stop.
141
149
  - \`ticlawk message read --target <target> [--around <message-id>]\` — recent chat context, or context around one specific message.
@@ -201,13 +209,15 @@ function chatWorkerOverviewBlock(ctx) {
201
209
  return `You are in a group chat named ${groupLabel} as a member, not the admin. The group is part of an agent system that drives itself to achieve a goal. It has two components:
202
210
 
203
211
  - Goal lane — backend state machine that pursues the goal, owned by the group admin. It runs on its own; you don't drive it.
204
- - Chat lane — where you are right now. Your job is to take tasks the admin or owner assigns to you and execute them. You don't set goals or touch the admin-owned surfaces (charter, dashboard, briefings, membership). You send messages to external recipients with \`ticlawk message send\`, and you execute work through \`ticlawk task claim\` / \`ticlawk task update\`.`;
212
+ - Chat lane — where you are right now. Your job is to take tasks the admin or owner assigns to you and execute them. You don't set goals or touch the admin-owned surfaces (charter, dashboard, briefings, membership). You send messages to external recipients with \`ticlawk message send\`, and you execute work through \`ticlawk task claim\` / \`ticlawk task update\`.
213
+
214
+ ${INTERNAL_MODEL_NOTE}`;
205
215
  }
206
216
 
207
217
  function chatWorkerMessagingSubsection() {
208
218
  return `### Messaging
209
219
 
210
- You reply to incoming messages with \`ticlawk message send\`. Pass body via stdin or heredoc so quotes and code blocks survive. The body is plain natural language never include an internal code, run name, task number, or an internal name for how the system works, which the recipient has no context for.
220
+ You reply to incoming messages with \`ticlawk message send\`. Pass body via stdin or heredoc so quotes and code blocks survive. The body is plain natural language. Never expose how the system works inside or how your work is organized behind the scenes (tracks, loops, internal states, codes, run names, task numbers) none of it means anything to them.
211
221
 
212
222
  - \`ticlawk message send --target <target> --phase progress|final [--attach <path>]\` — send a reply. Copy \`<target>\` from the incoming message verbatim. Body via stdin. Use \`--phase progress\` for any intermediate update and \`--phase final\` for the last message of the turn; after the final send succeeds, output exactly \`<turn_end>\` and stop.
213
223
  - \`ticlawk message read --target <target> [--around <message-id>]\` — recent chat context, or context around one specific message.
@@ -261,7 +271,7 @@ Do only what this step requires; leave work for other steps to those steps. The
261
271
  function goalLaneOwnerSurfacesSubsection() {
262
272
  return `### Owner surfaces (dashboard + briefing)
263
273
 
264
- You reach the owner only through dashboard (pull) and briefing (push). You do NOT use \`ticlawk message send\` — chat is the chat lane's. Write what changed and why it matters in plain language; refer to things by what they are and do, never by an internal code, run name, task number, or an internal name for how the system works.
274
+ You reach the owner only through dashboard (pull) and briefing (push). You do NOT use \`ticlawk message send\` — chat is the chat lane's. Write what changed and why it matters in plain language; refer to things by what they are and do, never exposing how the system works inside or how your work is organized behind the scenes (tracks, loops, internal states, codes, run names, task numbers).
265
275
 
266
276
  Dashboard is the owner's at-a-glance progress report. Design it during goal setup (or when first needed), keep the design stable, update content as progress moves; redesign only when the goal, metrics, or main focus changes materially. Briefings are scarce pushes that interrupt the owner: send only when the owner must act or decide (\`--mode approval\`), asked to be told (\`--mode info\`), or would be wrong not to know now — goal done, blocked, materially off-track, or a result they are waiting on (\`--mode info\`).
267
277