@nestr/mcp 0.1.45 → 0.1.47
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/README.md +42 -2
- package/build/analytics/ga4.js +2 -5
- package/build/analytics/ga4.js.map +1 -1
- package/build/api/client.d.ts +22 -3
- package/build/api/client.d.ts.map +1 -1
- package/build/api/client.js +58 -6
- package/build/api/client.js.map +1 -1
- package/build/http.d.ts.map +1 -1
- package/build/http.js +94 -40
- package/build/http.js.map +1 -1
- package/build/oauth/storage.d.ts +8 -0
- package/build/oauth/storage.d.ts.map +1 -1
- package/build/oauth/storage.js +65 -0
- package/build/oauth/storage.js.map +1 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +103 -221
- package/build/server.js.map +1 -1
- package/build/skills/doing-work.d.ts +10 -0
- package/build/skills/doing-work.d.ts.map +1 -0
- package/build/skills/doing-work.js +257 -0
- package/build/skills/doing-work.js.map +1 -0
- package/build/skills/tension-processing.d.ts.map +1 -1
- package/build/skills/tension-processing.js +88 -12
- package/build/skills/tension-processing.js.map +1 -1
- package/build/tools/index.d.ts +874 -65
- package/build/tools/index.d.ts.map +1 -1
- package/build/tools/index.js +241 -44
- package/build/tools/index.js.map +1 -1
- package/package.json +7 -5
- package/web/favicon.png +0 -0
- package/web/index.html +1 -1
package/build/server.js
CHANGED
|
@@ -9,6 +9,7 @@ import { toolDefinitions, handleToolCall } from "./tools/index.js";
|
|
|
9
9
|
import { getCompletableListHtml, appResources } from "./apps/index.js";
|
|
10
10
|
import { WORKSPACE_SETUP_INSTRUCTIONS } from "./skills/workspace-setup.js";
|
|
11
11
|
import { TENSION_PROCESSING_INSTRUCTIONS } from "./skills/tension-processing.js";
|
|
12
|
+
import { DOING_WORK_INSTRUCTIONS } from "./skills/doing-work.js";
|
|
12
13
|
import * as mcpcat from "mcpcat";
|
|
13
14
|
// Server instructions provide context to AI assistants about what Nestr is and how to use it
|
|
14
15
|
const SERVER_INSTRUCTIONS = `
|
|
@@ -255,17 +256,28 @@ When in doubt with \`custom\`, explain concepts in plain language rather than as
|
|
|
255
256
|
- **Nest**: The universal building block - can be a task, project, role, circle, meeting, or any work item
|
|
256
257
|
- **Circle**: A self-governing team with defined purpose, roles, and accountabilities (Holacracy/Sociocracy concept)
|
|
257
258
|
- **Role**: A set of responsibilities (accountabilities) and decision rights (domains) that a person energizes
|
|
258
|
-
- **Label**: Tags that define what type of nest something is (e.g., "project", "
|
|
259
|
+
- **Label**: Tags that define what type of nest something is (e.g., "project", "role", "meeting", "anchor-circle"). A nest without system labels is a todo/action — no "todo" label exists or is needed.
|
|
259
260
|
|
|
260
261
|
## Content Format
|
|
261
262
|
|
|
262
263
|
Nestr uses different formats for different fields:
|
|
263
264
|
|
|
264
265
|
- **\`title\`**: Plain text only. HTML tags are stripped. Keep titles concise.
|
|
265
|
-
- **\`purpose
|
|
266
|
-
-
|
|
266
|
+
- **\`purpose\`**: The aspirational future state this nest is working towards. **Most important for workspaces, circles, and roles** — it defines the north star and context boundary for the organization, circle, or role. Everything within that container should serve its purpose. For other nests (tasks, projects, etc.), prefer \`description\` or \`fields\` for detailed information — but purpose can be set if it serves the user. Supports HTML.
|
|
267
|
+
- **\`description\`**: The primary field for detailed information about a nest. Use for project details, task context, acceptance criteria, Definition of Done, and any persistent information about the nest. Supports HTML.
|
|
268
|
+
- **\`fields\`**: Structured data defined by labels (e.g., \`fields['project.status']\`, \`fields['metric.frequency']\`). Use for structured, label-specific information.
|
|
269
|
+
- **Comment \`body\`**: HTML supported (same tags as above, including base64 images). Use \`@username\` for mentions. **Use comments for progress updates**, status changes, and conversation — not purpose or description.
|
|
267
270
|
- **\`data\`**: Generic key-value store. Also used internally by Nestr and other integrations — **never overwrite or remove existing keys**. When adding your own data, namespace it under \`mcp.\` (e.g., \`{ "mcp.lastSync": "2025-01-01" }\`) to avoid conflicts. Not rendered in UI.
|
|
268
271
|
|
|
272
|
+
**Where to put information:**
|
|
273
|
+
| Information type | Field to use |
|
|
274
|
+
|-----------------|-------------|
|
|
275
|
+
| North star / aspirational future state | \`purpose\` (primarily workspaces, circles, roles) |
|
|
276
|
+
| Details, context, acceptance criteria, DoD | \`description\` |
|
|
277
|
+
| Structured data (status, frequency, etc.) | \`fields\` |
|
|
278
|
+
| Progress updates, status changes, discussion | Comments |
|
|
279
|
+
| Integration metadata, custom tracking | \`data\` (namespace under \`mcp.\`) |
|
|
280
|
+
|
|
269
281
|
**Important — Always use HTML, not Markdown:** When composing purpose, description, or comment content, you must use HTML tags. This is a common mistake for AI agents that default to Markdown syntax.
|
|
270
282
|
|
|
271
283
|
| Instead of (Markdown) | Use (HTML) |
|
|
@@ -309,45 +321,6 @@ Every nest has these **standard fields**:
|
|
|
309
321
|
|
|
310
322
|
**Tip:** Use \`path\` to understand context without extra API calls. If you see \`"Acme Corp / Engineering / Developer / Fix bug"\`, you know the task is under the "Developer" role in the "Engineering" circle without fetching those nests.
|
|
311
323
|
|
|
312
|
-
### User Assignment
|
|
313
|
-
|
|
314
|
-
**CRITICAL:** When creating tasks or projects under a role, you MUST explicitly set the \`users\` array. Placing a nest under a role does NOT automatically assign it to the person or agent energizing that role. Forgetting this is a common mistake that leaves work unassigned.
|
|
315
|
-
|
|
316
|
-
**Key principle:** Work belongs to roles, not to people or agents. A person or agent has no authority to impact organizational work or structure — only roles can. When someone energizes a role, they are assigned to work *because* they fill that role, not in their own right. The role has the accountability; the person/agent is the vehicle through which the role acts.
|
|
317
|
-
|
|
318
|
-
#### Assignment Rules for Work Under Roles
|
|
319
|
-
|
|
320
|
-
Before creating work under a role, check who energizes it (the \`users\` array on the role):
|
|
321
|
-
|
|
322
|
-
1. **Role has one person/agent**: Assign to them
|
|
323
|
-
\`\`\`json
|
|
324
|
-
{ "parentId": "roleId", "title": "Complete report", "users": ["userId"] }
|
|
325
|
-
\`\`\`
|
|
326
|
-
|
|
327
|
-
2. **Role has multiple people/agents**:
|
|
328
|
-
- If you energize the role → assign to yourself
|
|
329
|
-
- If you don't energize the role:
|
|
330
|
-
- **Assistant mode**: Ask the user which person energizing the role should carry this work
|
|
331
|
-
- **Role-filler mode**: Create a tension on the circle requesting the accountable role take on this work
|
|
332
|
-
- **Workspace mode**: Assign based on organizational rules or leave for the circle lead to decide
|
|
333
|
-
|
|
334
|
-
3. **Role is unfilled**: Leave \`users\` empty or omit — the work belongs to the role itself until someone energizes it
|
|
335
|
-
\`\`\`json
|
|
336
|
-
{ "parentId": "roleId", "title": "Future task", "users": [] }
|
|
337
|
-
\`\`\`
|
|
338
|
-
|
|
339
|
-
#### Quick Reference
|
|
340
|
-
|
|
341
|
-
| Scenario | Action |
|
|
342
|
-
|----------|--------|
|
|
343
|
-
| Role has one person/agent | \`users: [userId]\` |
|
|
344
|
-
| Multiple people, you energize the role | \`users: [yourUserId]\` (assign to self) |
|
|
345
|
-
| Multiple people, you don't energize it | Assistant: ask user. Role-filler: create tension. Workspace: use org rules. |
|
|
346
|
-
| Role unfilled | \`users: []\` or omit |
|
|
347
|
-
| Work not under a role | Assign to whoever should own it |
|
|
348
|
-
|
|
349
|
-
**Note:** Accountabilities, domains, and policies never have users assigned - they belong to roles, not people.
|
|
350
|
-
|
|
351
324
|
### The \`fields\` Property
|
|
352
325
|
|
|
353
326
|
The \`fields\` object holds custom data defined by labels. Fields are **namespaced by the label that defines them**:
|
|
@@ -369,13 +342,15 @@ The \`fields\` object holds custom data defined by labels. Fields are **namespac
|
|
|
369
342
|
- \`Waiting\` - Blocked or on hold
|
|
370
343
|
- \`Done\` - Completed
|
|
371
344
|
|
|
372
|
-
**Circle strategy** (in \`fields['circle.strategy']\`):
|
|
345
|
+
**Circle strategy** (in \`fields['circle.strategy']\` for sub-circles, or \`fields['anchor-circle.strategy']\` for the anchor circle/workspace):
|
|
373
346
|
A strategy that all roles within the circle must follow. Sub-circle strategies must align with and support the super-circle's strategy.
|
|
374
347
|
|
|
375
348
|
**Important:** Label field schemas can be customized at the workspace or circle level. This means the available fields and their options may vary between different parts of the organization hierarchy. Always check what fields are actually present on a nest rather than assuming a fixed schema.
|
|
376
349
|
|
|
377
350
|
### Hierarchical Purpose
|
|
378
351
|
|
|
352
|
+
The \`purpose\` field is most important for **workspaces, circles, and roles** — it defines the aspirational future state that container is working towards. It is the north star and context boundary: everything within that container should serve its purpose.
|
|
353
|
+
|
|
379
354
|
The \`purpose\` field follows a strict hierarchy:
|
|
380
355
|
- The **anchor circle's purpose** is the purpose of the entire organization
|
|
381
356
|
- Each **sub-circle's purpose** must contribute to its parent circle's purpose
|
|
@@ -383,44 +358,7 @@ The \`purpose\` field follows a strict hierarchy:
|
|
|
383
358
|
|
|
384
359
|
This cascades through the entire hierarchy, which may be many layers deep. When creating or updating purposes, ensure they align with and serve the parent's purpose.
|
|
385
360
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
In role-based self-organization, understanding where work lives is crucial:
|
|
389
|
-
|
|
390
|
-
### Work Should Live Under Roles
|
|
391
|
-
The goal is to do all work from a role. Each task or project should be owned by a role that has the accountability for it.
|
|
392
|
-
|
|
393
|
-
### Circles as Roles
|
|
394
|
-
From a super-circle's perspective, a sub-circle is just another role. Work directly under a circle (not under a role within it) is work the circle-as-a-whole does for its super-circle. How that work is internally organized is irrelevant to the super-circle.
|
|
395
|
-
|
|
396
|
-
### The \`individual-action\` Label
|
|
397
|
-
Sometimes work needs to be done before a role exists for it. This work is captured directly in a circle with the \`individual-action\` label:
|
|
398
|
-
- **Context**: The work is for this circle's purpose (not the super-circle)
|
|
399
|
-
- **Meaning**: Work needed for the circle but not yet assigned to a role
|
|
400
|
-
- **Next step**: When this work becomes structural, create a role for it
|
|
401
|
-
|
|
402
|
-
### Querying Work "In a Circle"
|
|
403
|
-
When someone asks for "all work in circle X", be aware of context:
|
|
404
|
-
|
|
405
|
-
**Include:**
|
|
406
|
-
- Work under roles within the circle: \`in:circleId label:!individual-action depth:2 completed:false\`
|
|
407
|
-
- Individual actions for the circle: \`in:circleId label:individual-action depth:1 completed:false\`
|
|
408
|
-
|
|
409
|
-
**Handle separately:**
|
|
410
|
-
- Work directly in circle WITHOUT \`individual-action\` label = work the circle does for its super-circle
|
|
411
|
-
- You may include this but explicitly note: "This work lives at the super-circle level"
|
|
412
|
-
|
|
413
|
-
**Example queries:**
|
|
414
|
-
\`\`\`
|
|
415
|
-
in:circleId label:individual-action depth:1 completed:false
|
|
416
|
-
-> Individual actions directly in the circle (circle's own work without a role)
|
|
417
|
-
|
|
418
|
-
in:circleId label:!individual-action depth:2 completed:false
|
|
419
|
-
-> Work under direct roles in the circle (depth:2 = roles + their work)
|
|
420
|
-
|
|
421
|
-
in:circleId completed:false
|
|
422
|
-
-> ALL work in circle including sub-circles (may include super-circle context work)
|
|
423
|
-
\`\`\`
|
|
361
|
+
**For other nests** (tasks, projects, etc.), prefer \`description\` for details, acceptance criteria, and Definition of Done. Use \`fields\` for structured data. Use comments for progress updates. Purpose can still be set on any nest if it serves the user, but by default reach for description first.
|
|
424
362
|
|
|
425
363
|
## Best Practices
|
|
426
364
|
|
|
@@ -429,12 +367,7 @@ in:circleId completed:false
|
|
|
429
367
|
3. **Check labels** to understand what type of nest you're working with
|
|
430
368
|
4. **Use @mentions** in comments to notify team members
|
|
431
369
|
5. **Respect the hierarchy**: nests live under parents (workspace → circle → role/project → task)
|
|
432
|
-
6. **
|
|
433
|
-
- Fetch the parent circle to review its \`purpose\` and \`fields['circle.strategy']\`
|
|
434
|
-
- Ensure new projects and tasks align with and serve the circle's strategy
|
|
435
|
-
- Use strategy and purpose to prioritize work and define clear outcomes
|
|
436
|
-
- When proposing governance changes, consider how they support the circle's purpose
|
|
437
|
-
7. **Maintain skills on roles and circles** for AI knowledge persistence:
|
|
370
|
+
6. **Maintain skills on roles and circles** for AI knowledge persistence:
|
|
438
371
|
- Before doing work from a role, check for existing skills under that role or its circle — they contain processes, patterns, and domain knowledge from prior sessions
|
|
439
372
|
- When completing work that is likely repeatable, capture it as a skill under the appropriate role or circle
|
|
440
373
|
- Skills are the primary mechanism for AI context persistence — they're visible, searchable, and transfer with the role when it's reassigned
|
|
@@ -449,130 +382,33 @@ Skills are nests with the \`skill\` label that live directly under a role or cir
|
|
|
449
382
|
- Skills make AI-persisted knowledge visible, searchable, and a first-class citizen in Nestr
|
|
450
383
|
- They transfer with the role — when a role is reassigned, skills stay with the role, not the previous holder
|
|
451
384
|
|
|
385
|
+
### Skill Types
|
|
386
|
+
|
|
387
|
+
Skills can be typed using \`fields['skill.type']\` to distinguish their nature:
|
|
388
|
+
|
|
389
|
+
- **\`process\`** — Step-by-step procedures: how to do something. Example: "How to deploy to production", "Customer onboarding checklist".
|
|
390
|
+
- **\`knowledge\`** — Domain knowledge, contacts, learned patterns. Example: "Key API endpoints", "Vendor contact list", "Common error patterns".
|
|
391
|
+
- **\`doctrine\`** — Organizational principles that guide decisions: the *why* behind how we work. Doctrine skills apply broadly and should be consulted before making decisions that affect the role or circle. Example: "Bias towards minimal output per tension", "Governance before operations".
|
|
392
|
+
|
|
393
|
+
When untyped, skills default to general-purpose knowledge. Use the type to help agents and humans find the right skill for the context — e.g., search for doctrine before proposing governance changes.
|
|
394
|
+
|
|
452
395
|
### When to Create Skills
|
|
453
396
|
- After completing repeatable work — capture the process so it can be followed again
|
|
454
397
|
- When learning domain-specific patterns — record them for future reference
|
|
455
398
|
- When discovering key contacts, recurring processes, or domain knowledge relevant to a role
|
|
456
399
|
- When decisions are made that should inform future work from this role
|
|
400
|
+
- When organizational principles emerge that should guide future decisions (doctrine)
|
|
457
401
|
|
|
458
402
|
### How to Use Skills
|
|
459
403
|
- Before starting work from a role, search for skills under that role: \`in:roleId label:skill\`
|
|
460
404
|
- Review relevant skills for context, processes, and prior decisions
|
|
405
|
+
- Check doctrine skills before proposing governance changes or making decisions
|
|
461
406
|
- After completing work, create or update skills to reflect what was learned
|
|
462
407
|
- Keep skills focused — one skill per process or knowledge area
|
|
463
408
|
|
|
464
409
|
### Nestr as Context and History
|
|
465
410
|
All work in Nestr — projects, tasks, comments, tensions, and skills — forms the complete context and history for a role. Skills complement this by capturing the *how* and *why* alongside the *what*. Together, they ensure continuity whether the role is energized by a human, an AI agent, or transitions between them.
|
|
466
411
|
|
|
467
|
-
## Setting Up and Tracking Work
|
|
468
|
-
|
|
469
|
-
Follow these practices to ensure work is properly captured, tracked, and documented in Nestr. In assistant mode, you help the user set up work. In role-filler mode, you set up your own work autonomously. In workspace mode, you manage work structurally.
|
|
470
|
-
|
|
471
|
-
### Setting Up Work
|
|
472
|
-
|
|
473
|
-
1. **Find the appropriate role** for the work:
|
|
474
|
-
- Identify which role has the accountability for this type of work — the work belongs to the role, not to any individual
|
|
475
|
-
- **Fetch the role** to check who energizes it (the \`users\` array on the role)
|
|
476
|
-
- **If you energize the role**: Proceed with creating the project under that role, assigned to yourself
|
|
477
|
-
- **If multiple people energize the role**: See "User Assignment" rules above for mode-specific behavior
|
|
478
|
-
- **If you do NOT energize the role**:
|
|
479
|
-
- **Assistant mode**: Inform the user which role is accountable and who energizes it. Ask if they still want to create the project there. If yes, add a comment notifying the person energizing the role: "@username - [User] is proposing this project for your role [RoleName]. Do you accept this work?"
|
|
480
|
-
- **Role-filler mode**: Create a tension on the circle requesting the accountable role take on this work. Do not create projects under another role — only that role's holder can accept work into it.
|
|
481
|
-
- **Workspace mode**: Create the project under the accountable role and assign to whoever energizes it based on organizational rules.
|
|
482
|
-
|
|
483
|
-
2. **Create a project** under the role:
|
|
484
|
-
- Title in past tense describing what "done" looks like (e.g., "API integration completed", "User onboarding flow redesigned")
|
|
485
|
-
- Set \`labels: ["project"]\` and \`fields: { "project.status": "Current" }\`
|
|
486
|
-
- Use \`purpose\` to describe the Definition of Done (DoD) with clear acceptance criteria
|
|
487
|
-
- **ALWAYS set \`users\` explicitly** - see "User Assignment" section above for rules:
|
|
488
|
-
\`\`\`json
|
|
489
|
-
{ "parentId": "roleId", "title": "...", "labels": ["project"], "users": ["roleFillerUserId"] }
|
|
490
|
-
\`\`\`
|
|
491
|
-
|
|
492
|
-
3. **If a project is already provided**, review and enhance it:
|
|
493
|
-
- Check if the description has clear DoD criteria
|
|
494
|
-
- If not, **append** to the description (don't overwrite) with suggested criteria
|
|
495
|
-
- In assistant mode, suggest a clearer DoD to the user. In role-filler mode, define the DoD yourself.
|
|
496
|
-
|
|
497
|
-
4. **Break down into tasks** under the project:
|
|
498
|
-
- Create individual tasks (nests without labels) for discrete pieces of work
|
|
499
|
-
- Use \`description\` for additional context, acceptance criteria, or notes
|
|
500
|
-
- Keep tasks small enough to complete in one sitting
|
|
501
|
-
|
|
502
|
-
### While Working
|
|
503
|
-
|
|
504
|
-
5. **Document progress as comments** (\`nestr_add_comment\`):
|
|
505
|
-
- Post updates to individual tasks as you work on them
|
|
506
|
-
- Post summaries or milestone updates to the project itself
|
|
507
|
-
- In assistant mode, capture relevant questions you asked the user and their answers
|
|
508
|
-
- Note: Comments on a task automatically appear on the parent project, so don't double-post
|
|
509
|
-
|
|
510
|
-
6. **Mark tasks complete** as you finish them:
|
|
511
|
-
- Use \`nestr_update_nest\` with \`completed: true\`
|
|
512
|
-
- Add a final comment summarizing what was done if helpful
|
|
513
|
-
|
|
514
|
-
### Example Flows
|
|
515
|
-
|
|
516
|
-
**Assistant mode:**
|
|
517
|
-
\`\`\`
|
|
518
|
-
User: "Can you refactor our authentication module to use JWT?"
|
|
519
|
-
|
|
520
|
-
1. Search for relevant role (e.g., Developer role in Tech circle)
|
|
521
|
-
2. Create project: "Authentication module refactored to JWT"
|
|
522
|
-
- Purpose: "Replace session-based auth with JWT tokens. DoD: All endpoints use JWT, tests pass, documentation updated."
|
|
523
|
-
- Parent: Developer role
|
|
524
|
-
- Assign to user
|
|
525
|
-
3. Create tasks, work through them, post findings as comments
|
|
526
|
-
4. Mark each task complete as finished
|
|
527
|
-
\`\`\`
|
|
528
|
-
|
|
529
|
-
**Role-filler mode:**
|
|
530
|
-
\`\`\`
|
|
531
|
-
Agent identifies a gap: session-based auth doesn't meet the security accountability.
|
|
532
|
-
|
|
533
|
-
1. Create project under own role: "Authentication module refactored to JWT"
|
|
534
|
-
- Purpose: "Replace session-based auth with JWT tokens. DoD: All endpoints use JWT, tests pass."
|
|
535
|
-
- Assign to self
|
|
536
|
-
2. Break down into tasks, execute autonomously
|
|
537
|
-
3. Document progress as comments for transparency
|
|
538
|
-
4. If the work impacts another role's domain (e.g., "Security stack"),
|
|
539
|
-
create a tension requesting input from that role before proceeding
|
|
540
|
-
\`\`\`
|
|
541
|
-
|
|
542
|
-
## Checking Role Authority
|
|
543
|
-
|
|
544
|
-
Before creating work or proposing changes, verify which role has the accountability or domain for the work. Use these tools:
|
|
545
|
-
|
|
546
|
-
### Finding the Right Role
|
|
547
|
-
|
|
548
|
-
1. **\`nestr_get_circle_roles\`** — Returns all roles in a circle with their accountabilities and domains. This is the fastest way to see the full governance structure.
|
|
549
|
-
|
|
550
|
-
2. **\`nestr_search\`** with \`label:accountability\` or \`label:domain\` — Search across the workspace for specific accountabilities or domains by keyword.
|
|
551
|
-
|
|
552
|
-
3. **\`nestr_get_nest_children\`** on a specific role — Returns the role's accountabilities, domains, policies, and work items.
|
|
553
|
-
|
|
554
|
-
### Checking Before Acting
|
|
555
|
-
|
|
556
|
-
When assigning work to a role, verify the role actually has accountability for it:
|
|
557
|
-
|
|
558
|
-
\`\`\`
|
|
559
|
-
1. nestr_get_circle_roles(workspaceId, circleId)
|
|
560
|
-
→ Review accountabilities of each role
|
|
561
|
-
2. Find the role whose accountability matches the work
|
|
562
|
-
3. Create the project/task under that role
|
|
563
|
-
\`\`\`
|
|
564
|
-
|
|
565
|
-
When proposing governance changes, check for domain conflicts:
|
|
566
|
-
|
|
567
|
-
\`\`\`
|
|
568
|
-
1. nestr_search(workspaceId, "label:domain [keyword]")
|
|
569
|
-
→ Check if another role already controls this area
|
|
570
|
-
2. If a domain exists, coordinate with the domain holder
|
|
571
|
-
3. Propose the change via nestr_create_tension on the circle
|
|
572
|
-
\`\`\`
|
|
573
|
-
|
|
574
|
-
**Tip:** Use \`nestr_search\` with \`in:circleId label:role\` to find all roles (including in sub-circles), or add \`depth:1\` to limit to direct roles only.
|
|
575
|
-
|
|
576
412
|
## Label Architecture
|
|
577
413
|
|
|
578
414
|
Labels give nests meaning and define their behavior. There are three types of labels:
|
|
@@ -629,6 +465,42 @@ Use this when you need to know what values are valid for a field, especially bef
|
|
|
629
465
|
|
|
630
466
|
**Example**: A workspace might customize the global \`project\` label to add a \`project.department\` field, and a sub-circle might further customize it to add \`project.sprint\` - both would appear on projects within that sub-circle.
|
|
631
467
|
|
|
468
|
+
#### Hints (Contextual Signals)
|
|
469
|
+
|
|
470
|
+
Add \`hints=true\` to \`nestr_get_nest\` or \`nestr_get_nest_children\` to get server-computed contextual signals about each nest. Hints surface actionable information without requiring extra API calls — e.g., unassigned roles, stale projects, or unread comments.
|
|
471
|
+
|
|
472
|
+
\`\`\`
|
|
473
|
+
GET /nests/{nestId}?hints=true
|
|
474
|
+
GET /nests/{nestId}/children?hints=true
|
|
475
|
+
\`\`\`
|
|
476
|
+
|
|
477
|
+
Each hint object has:
|
|
478
|
+
- \`type\` — machine-readable identifier (e.g., \`unassigned_role\`, \`stale_project\`, \`unread_comments\`)
|
|
479
|
+
- \`label\` — human/LLM-readable description of the hint
|
|
480
|
+
- \`severity\` — \`info\` (neutral context) | \`suggestion\` (improvement opportunity) | \`warning\` (needs attention) | \`alert\` (urgent)
|
|
481
|
+
- \`count\` — numeric value where applicable (otherwise absent)
|
|
482
|
+
- \`url\` — relative API URL to drill into the related resource (starts with \`/nests/\`)
|
|
483
|
+
- \`lastPost\` — (comments hints only) ISO timestamp of the most recent comment
|
|
484
|
+
- \`readAt\` — (comments hints only, user-scoped auth only) ISO timestamp of when the user last read comments. Compare \`lastPost > readAt\` to detect unread comments.
|
|
485
|
+
|
|
486
|
+
Example response with hints:
|
|
487
|
+
\`\`\`json
|
|
488
|
+
{
|
|
489
|
+
"_id": "roleId",
|
|
490
|
+
"title": "Developer",
|
|
491
|
+
"hints": [
|
|
492
|
+
{
|
|
493
|
+
"type": "unassigned_role",
|
|
494
|
+
"label": "This role has no users assigned to energize it...",
|
|
495
|
+
"severity": "warning",
|
|
496
|
+
"url": "/nests/roleId"
|
|
497
|
+
}
|
|
498
|
+
]
|
|
499
|
+
}
|
|
500
|
+
\`\`\`
|
|
501
|
+
|
|
502
|
+
Use hints to proactively surface issues to the user — for example, when reviewing a circle's roles, hints can reveal which roles need attention without separate queries.
|
|
503
|
+
|
|
632
504
|
## Important Labels
|
|
633
505
|
|
|
634
506
|
Labels define what type a nest is. The API strips the "circleplus-" prefix, so use labels without it.
|
|
@@ -646,8 +518,10 @@ Labels define what type a nest is. The API strips the "circleplus-" prefix, so u
|
|
|
646
518
|
**Meetings & Operations:**
|
|
647
519
|
- \`metric\` - A metric tracked by a role/circle
|
|
648
520
|
- \`checklist\` - A recurring checklist item
|
|
649
|
-
- \`governance\` -
|
|
650
|
-
- \`
|
|
521
|
+
- \`governance\` - Combined with \`meeting\` label to create a governance meeting (processes governance tensions/proposals)
|
|
522
|
+
- \`circle-meeting\` - Combined with \`meeting\` label to create a circle/tactical meeting (processes operational tensions — projects, todos, inter-role requests)
|
|
523
|
+
|
|
524
|
+
**Creating meetings:** A meeting is a nest with \`labels: ["meeting", "governance"]\` or \`labels: ["meeting", "circle-meeting"]\`. Set \`due\` to the meeting start time. Assign all role fillers in the circle to the meeting's \`users\` array — this includes people/agents energizing roles in the circle, plus rep-link and circle-lead roles from sub-circles. Use graph tools (\`nestr_add_graph_link\` with relation \`meeting\`) to link tensions as agenda items. Agenda items that don't originate from a specific role can be created as child nests of the meeting directly.
|
|
651
525
|
|
|
652
526
|
**OKRs & Goals:**
|
|
653
527
|
- \`goal\` - An Objective (the O in OKR)
|
|
@@ -655,7 +529,7 @@ Labels define what type a nest is. The API strips the "circleplus-" prefix, so u
|
|
|
655
529
|
|
|
656
530
|
**Work Tracking:**
|
|
657
531
|
- \`project\` - An outcome requiring multiple steps to complete. Define in past tense as what "done" looks like (e.g., "Website redesign launched", "Q1 report published"). Has status: Future/Current/Waiting/Done.
|
|
658
|
-
- *(no system label)* - A nest without system labels is a todo/action
|
|
532
|
+
- *(no system label)* - **Every nest is completable by default.** A nest without system labels is a todo/action — a single, concrete step that can be done in one sitting (e.g., "Call supplier about pricing", "Draft intro paragraph"). To create a todo, simply create a nest without labels. There is NO "todo" label — do NOT add \`labels: ["todo"]\`. Labels change behavior (e.g., \`project\` adds status tracking), but the default nest is already a completable work item. Todos CAN have workspace or personal labels for categorization — what makes them todos is the absence of *system* labels.
|
|
659
533
|
|
|
660
534
|
**AI Knowledge:**
|
|
661
535
|
- \`skill\` - A process, piece of knowledge, or learned pattern that a role or circle holds. Lives directly under a role or circle. Used by AI agents to persist and retrieve operational knowledge across sessions. When doing work that is likely to be repeated, capture it as a skill for future reference.
|
|
@@ -1340,6 +1214,7 @@ export function createServer(config = {}) {
|
|
|
1340
1214
|
},
|
|
1341
1215
|
instructions: [
|
|
1342
1216
|
SERVER_INSTRUCTIONS,
|
|
1217
|
+
DOING_WORK_INSTRUCTIONS,
|
|
1343
1218
|
TENSION_PROCESSING_INSTRUCTIONS,
|
|
1344
1219
|
WORKSPACE_SETUP_INSTRUCTIONS,
|
|
1345
1220
|
SERVER_INSTRUCTIONS_REFERENCE,
|
|
@@ -1502,33 +1377,40 @@ export function createServer(config = {}) {
|
|
|
1502
1377
|
const response = await client.getCurrentUser();
|
|
1503
1378
|
// The Nestr API wraps responses in { status, data } — unwrap if needed
|
|
1504
1379
|
const user = response?.data || response;
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1380
|
+
if (user?._id) {
|
|
1381
|
+
cachedIdentity = {
|
|
1382
|
+
userId: user._id,
|
|
1383
|
+
userName: user.profile?.fullName || user._id,
|
|
1384
|
+
};
|
|
1385
|
+
return cachedIdentity;
|
|
1386
|
+
}
|
|
1387
|
+
// getCurrentUser returned but without a valid _id — fall through to workspace fallback
|
|
1388
|
+
console.warn('[MCPCat] getCurrentUser returned no _id, trying workspace fallback');
|
|
1510
1389
|
}
|
|
1511
1390
|
catch (err) {
|
|
1512
1391
|
// getCurrentUser failed — likely a workspace API key.
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1392
|
+
console.log('[MCPCat] getCurrentUser failed, trying workspace fallback:', err instanceof Error ? err.message : err);
|
|
1393
|
+
}
|
|
1394
|
+
// Try to identify by workspace name instead.
|
|
1395
|
+
try {
|
|
1396
|
+
const result = await client.listWorkspaces({ limit: 1 });
|
|
1397
|
+
// Handle both array responses and wrapped { data: [...] } responses
|
|
1398
|
+
const workspaces = Array.isArray(result) ? result : result?.data || [];
|
|
1399
|
+
if (Array.isArray(workspaces) && workspaces.length > 0) {
|
|
1400
|
+
const ws = workspaces[0];
|
|
1401
|
+
cachedIdentity = {
|
|
1402
|
+
userId: ws._id,
|
|
1403
|
+
userName: `${ws.title} (API key)`,
|
|
1404
|
+
};
|
|
1405
|
+
return cachedIdentity;
|
|
1527
1406
|
}
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1407
|
+
console.warn('[MCPCat] listWorkspaces returned no results:', JSON.stringify(result).slice(0, 200));
|
|
1408
|
+
}
|
|
1409
|
+
catch (wsErr) {
|
|
1410
|
+
console.error('[MCPCat] listWorkspaces also failed:', wsErr instanceof Error ? wsErr.message : wsErr);
|
|
1531
1411
|
}
|
|
1412
|
+
cachedIdentity = null;
|
|
1413
|
+
return null;
|
|
1532
1414
|
},
|
|
1533
1415
|
});
|
|
1534
1416
|
}
|
package/build/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAe,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AACjF,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAYjC,6FAA6F;AAC7F,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6K3B,CAAC,IAAI,EAAE,CAAC;AAET,qFAAqF;AACrF,MAAM,6BAA6B,GAAG
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doing Work Skill
|
|
3
|
+
*
|
|
4
|
+
* Provides instructions for how work flows from purpose through strategy
|
|
5
|
+
* to execution, completion, and cross-role coordination.
|
|
6
|
+
* This will be extracted into a standalone MCP skill definition once the
|
|
7
|
+
* protocol supports it. For now, it's appended to server instructions.
|
|
8
|
+
*/
|
|
9
|
+
export declare const DOING_WORK_INSTRUCTIONS: string;
|
|
10
|
+
//# sourceMappingURL=doing-work.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doing-work.d.ts","sourceRoot":"","sources":["../../src/skills/doing-work.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,uBAAuB,QAuP5B,CAAC"}
|