@knowsuchagency/fulcrum 3.5.1 → 3.5.2
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/bin/fulcrum.js +3 -3
- package/package.json +1 -1
- package/server/index.js +64 -17
package/bin/fulcrum.js
CHANGED
|
@@ -46421,7 +46421,7 @@ async function runMcpServer(urlOverride, portOverride) {
|
|
|
46421
46421
|
const client = new FulcrumClient(urlOverride, portOverride);
|
|
46422
46422
|
const server = new McpServer({
|
|
46423
46423
|
name: "fulcrum",
|
|
46424
|
-
version: "3.5.
|
|
46424
|
+
version: "3.5.2"
|
|
46425
46425
|
});
|
|
46426
46426
|
registerTools(server, client);
|
|
46427
46427
|
const transport = new StdioServerTransport;
|
|
@@ -48770,7 +48770,7 @@ var marketplace_default = `{
|
|
|
48770
48770
|
"name": "fulcrum",
|
|
48771
48771
|
"source": "./",
|
|
48772
48772
|
"description": "Task orchestration for Claude Code",
|
|
48773
|
-
"version": "3.5.
|
|
48773
|
+
"version": "3.5.2",
|
|
48774
48774
|
"skills": [
|
|
48775
48775
|
"./skills/fulcrum"
|
|
48776
48776
|
],
|
|
@@ -49974,7 +49974,7 @@ function compareVersions(v1, v2) {
|
|
|
49974
49974
|
var package_default = {
|
|
49975
49975
|
name: "@knowsuchagency/fulcrum",
|
|
49976
49976
|
private: true,
|
|
49977
|
-
version: "3.5.
|
|
49977
|
+
version: "3.5.2",
|
|
49978
49978
|
description: "Harness Attention. Orchestrate Agents. Ship.",
|
|
49979
49979
|
license: "PolyForm-Perimeter-1.0.0",
|
|
49980
49980
|
type: "module",
|
package/package.json
CHANGED
package/server/index.js
CHANGED
|
@@ -1136599,7 +1136599,7 @@ ${formattingGuide}`;
|
|
|
1136599
1136599
|
function getObserveOnlySystemPrompt(channelType, context) {
|
|
1136600
1136600
|
return `## Observe-Only Mode
|
|
1136601
1136601
|
|
|
1136602
|
-
You are the user's observer
|
|
1136602
|
+
You are the user's observer. Only create a task when the user must take a specific action or fulfill a commitment they might otherwise forget. Default to storing a memory or doing nothing \u2014 only escalate to a task when doing nothing would cause the user to miss something important. A frivolous task is worse than no task: it wastes the user's time and erodes trust.
|
|
1136603
1136603
|
|
|
1136604
1136604
|
**Channel**: ${context.channel}
|
|
1136605
1136605
|
**From**: ${context.sender}${context.senderName ? ` (${context.senderName})` : ""}
|
|
@@ -1136634,12 +1136634,36 @@ ${context.metadata?.isGroup ? `**Group Chat**: yes` : ""}
|
|
|
1136634
1136634
|
|
|
1136635
1136635
|
Silently analyze this message and take the appropriate action:
|
|
1136636
1136636
|
|
|
1136637
|
-
1. **
|
|
1136638
|
-
2. **Updates about existing matters** (
|
|
1136637
|
+
1. **The user must take a specific action or respond** (someone asks them to do something, they need to fulfill a commitment, a genuine deadline they must meet) \u2192 Use \`list_tasks\` to check for duplicates, then \`create_task\` with a clear title, description, relevant tags, and dueDate if mentioned. Tag with \`from:${context.channel}\`. After creating a task, use \`send_notification\` to alert the user.
|
|
1136638
|
+
2. **Updates about existing matters** (new details on a known topic) \u2192 Use \`list_tasks\` to find the related task, then \`update_task\` or \`add_task_link\` as appropriate.
|
|
1136639
1136639
|
3. **Important persistent observations** (learning someone's name, recurring topics, key relationships) \u2192 \`memory_store\` with tag \`persistent\`
|
|
1136640
|
-
4. **
|
|
1136640
|
+
4. **Everything else** (automated notifications, FYI messages, status updates, casual chat, spam) \u2192 Do nothing
|
|
1136641
1136641
|
|
|
1136642
|
-
|
|
1136642
|
+
### Do NOT create tasks for:
|
|
1136643
|
+
- Automated notifications (shipping updates, RSVP notifications, social media alerts, CI/CD results)
|
|
1136644
|
+
- FYI/informational messages that don't require user action
|
|
1136645
|
+
- Event reminders for events the user is merely attending
|
|
1136646
|
+
- Status updates and confirmations (order confirmations, booking confirmations)
|
|
1136647
|
+
- Newsletters, promotional emails, marketing content
|
|
1136648
|
+
|
|
1136649
|
+
### Examples
|
|
1136650
|
+
|
|
1136651
|
+
**CREATE a task:**
|
|
1136652
|
+
- WhatsApp message: "Can you send me that document?" \u2192 "Send document to Alice"
|
|
1136653
|
+
- Email asking for details: "Can you confirm the budget?" \u2192 "Reply to Bob with project budget details"
|
|
1136654
|
+
- Proposal needing review: "Here's the proposal, let me know your thoughts" \u2192 "Review and respond to proposal from Carol"
|
|
1136655
|
+
- Follow-up request: "Let's schedule a call next week" \u2192 "Schedule call with Dave"
|
|
1136656
|
+
|
|
1136657
|
+
**Do NOT create a task:**
|
|
1136658
|
+
- Meetup RSVP notification: "3 new RSVPs for your event" \u2192 do nothing (automated FYI)
|
|
1136659
|
+
- Shipping update: "Your package is out for delivery" \u2192 do nothing (automated FYI)
|
|
1136660
|
+
- Order confirmation: "Your order #1234 has been confirmed" \u2192 do nothing (automated FYI)
|
|
1136661
|
+
- Newsletter or marketing email \u2192 do nothing
|
|
1136662
|
+
|
|
1136663
|
+
### Decision test
|
|
1136664
|
+
Before creating a task, ask: "Is the user being asked to DO something specific, or would they miss a commitment without this?" If no, do nothing.
|
|
1136665
|
+
|
|
1136666
|
+
When creating tasks, write the title as a clear action item (e.g., "Send invoice to Alice" not "Email from Alice about invoice"). Include the sender and channel context in the description.
|
|
1136643
1136667
|
|
|
1136644
1136668
|
**Always use \`memory_store\`** for non-task observations \u2014 never write to MEMORY.md directly. The hourly sweep reviews stored memories and promotes important patterns to the memory file.
|
|
1136645
1136669
|
Include the source channel as the \`source\` field (e.g., "channel:${context.channel}").
|
|
@@ -1150255,7 +1150279,7 @@ ${contextualMessage}`;
|
|
|
1150255
1150279
|
yield { type: "error", data: { message: errorMsg } };
|
|
1150256
1150280
|
}
|
|
1150257
1150281
|
}
|
|
1150258
|
-
var OPENCODE_DEFAULT_PORT = 4096, opencodeClient = null, OBSERVER_SYSTEM_PROMPT = `You are the user's observer
|
|
1150282
|
+
var OPENCODE_DEFAULT_PORT = 4096, opencodeClient = null, OBSERVER_SYSTEM_PROMPT = `You are the user's observer. Only create a task when the user must take a specific action or fulfill a commitment they might otherwise forget. Default to storing a memory or doing nothing \u2014 only escalate to a task when doing nothing would cause the user to miss something important. A frivolous task is worse than no task: it wastes the user's time and erodes trust.
|
|
1150259
1150283
|
|
|
1150260
1150284
|
IMPORTANT: You have NO tools. Instead, respond with a JSON object describing what actions to take.
|
|
1150261
1150285
|
|
|
@@ -1150283,31 +1150307,54 @@ If the message contains nothing worth tracking (casual chat, greetings, spam, et
|
|
|
1150283
1150307
|
|
|
1150284
1150308
|
## Action types
|
|
1150285
1150309
|
|
|
1150286
|
-
### create_task (
|
|
1150287
|
-
Use for:
|
|
1150310
|
+
### create_task (only for genuine action items)
|
|
1150311
|
+
Use for: someone specifically asks the user to do something, the user must fulfill a commitment, a genuine deadline the user must meet.
|
|
1150312
|
+
Do NOT use for: automated notifications, FYI messages, event reminders, status updates, confirmations.
|
|
1150288
1150313
|
Fields: title (required, imperative action item), description, tags (array), dueDate (YYYY-MM-DD if mentioned).
|
|
1150289
|
-
Write titles as clear action items (e.g., "
|
|
1150314
|
+
Write titles as clear action items (e.g., "Send invoice to Alice" not "Email from Alice about invoice").
|
|
1150290
1150315
|
|
|
1150291
1150316
|
### store_memory (for non-task observations)
|
|
1150292
|
-
Use for: learning someone's name, recurring patterns, key relationships, context updates.
|
|
1150317
|
+
Use for: learning someone's name, recurring patterns, key relationships, context updates, noteworthy information from notifications.
|
|
1150293
1150318
|
Fields: content (required), tags (array), source (e.g., "channel:whatsapp").
|
|
1150294
1150319
|
|
|
1150295
1150320
|
## Guidelines
|
|
1150296
1150321
|
|
|
1150297
|
-
Create a task
|
|
1150298
|
-
-
|
|
1150299
|
-
-
|
|
1150300
|
-
-
|
|
1150322
|
+
Create a task ONLY when:
|
|
1150323
|
+
- Someone specifically asks the user to do something ("Can you send me X?", "Please review Y")
|
|
1150324
|
+
- The user made a commitment they might forget (promised to call someone, agreed to deliver something)
|
|
1150325
|
+
- A genuine deadline the user must personally meet (tax filing, contract deadline)
|
|
1150301
1150326
|
|
|
1150302
1150327
|
Store a memory for:
|
|
1150303
1150328
|
- Contact details, names, relationships
|
|
1150304
1150329
|
- Project context or status updates
|
|
1150305
1150330
|
- Patterns worth remembering
|
|
1150331
|
+
- Noteworthy information from notifications (without creating a task)
|
|
1150306
1150332
|
|
|
1150307
1150333
|
Do nothing for:
|
|
1150334
|
+
- Automated notifications (shipping updates, RSVP alerts, CI/CD results, social media)
|
|
1150335
|
+
- FYI/informational messages that don't require user action
|
|
1150336
|
+
- Event reminders for events already on the calendar
|
|
1150337
|
+
- Status updates and confirmations (order confirmations, booking confirmations)
|
|
1150338
|
+
- Newsletters, promotional emails, marketing content
|
|
1150308
1150339
|
- Casual greetings or small talk
|
|
1150309
|
-
-
|
|
1150310
|
-
|
|
1150340
|
+
- Messages you don't understand
|
|
1150341
|
+
|
|
1150342
|
+
## Examples
|
|
1150343
|
+
|
|
1150344
|
+
CREATE a task:
|
|
1150345
|
+
- WhatsApp: "Can you send me that document?" \u2192 title: "Send document to Alice"
|
|
1150346
|
+
- Email: "Can you confirm the budget for the project?" \u2192 title: "Reply to Bob with project budget details"
|
|
1150347
|
+
- Email: "Here's the proposal, let me know your thoughts" \u2192 title: "Review and respond to proposal from Carol"
|
|
1150348
|
+
- WhatsApp: "Let's schedule a call next week" \u2192 title: "Schedule call with Dave"
|
|
1150349
|
+
|
|
1150350
|
+
Do NOT create a task:
|
|
1150351
|
+
- Meetup RSVP notification: "3 new RSVPs for your event" \u2192 do nothing (automated FYI)
|
|
1150352
|
+
- Shipping update: "Your package is out for delivery" \u2192 do nothing (automated FYI)
|
|
1150353
|
+
- Order confirmation: "Your order #1234 has been confirmed" \u2192 do nothing (automated FYI)
|
|
1150354
|
+
- Newsletter or marketing email \u2192 do nothing
|
|
1150355
|
+
|
|
1150356
|
+
## Decision test
|
|
1150357
|
+
Before creating a task, ask: "Is the user being asked to DO something specific, or would they miss a commitment without this?" If no, do nothing.`;
|
|
1150311
1150358
|
var init_opencode_channel_service = __esm(() => {
|
|
1150312
1150359
|
init_dist10();
|
|
1150313
1150360
|
init_logger3();
|
|
@@ -1255022,7 +1255069,7 @@ mcpRoutes.all("/", async (c) => {
|
|
|
1255022
1255069
|
});
|
|
1255023
1255070
|
const server2 = new McpServer({
|
|
1255024
1255071
|
name: "fulcrum",
|
|
1255025
|
-
version: "3.5.
|
|
1255072
|
+
version: "3.5.2"
|
|
1255026
1255073
|
});
|
|
1255027
1255074
|
const client3 = new FulcrumClient(`http://localhost:${port}`);
|
|
1255028
1255075
|
registerTools(server2, client3);
|