@pulsarinteractive/geniustasker 0.0.0-stage → 0.1.0-beta.10

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.
Files changed (68) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/CONTRIBUTING.md +72 -0
  3. package/LICENSE +21 -0
  4. package/LICENSES/Apache-2.0.txt +202 -0
  5. package/README.md +76 -2
  6. package/SECURITY.md +14 -0
  7. package/THIRD_PARTY_NOTICES.md +15 -0
  8. package/bin/geniustasker.mjs +6 -0
  9. package/docs/ARCHITECTURE.md +144 -0
  10. package/docs/CHATGPT.md +86 -0
  11. package/docs/CLI.md +444 -0
  12. package/docs/DOCUMENTATION_SYNC.md +144 -0
  13. package/docs/INTEGRATIONS.md +62 -0
  14. package/docs/LIMITS.md +62 -0
  15. package/docs/MEMORY.md +38 -0
  16. package/docs/OPENAI.md +21 -0
  17. package/docs/OPENAI_PUBLICATION.md +22 -0
  18. package/docs/PLANNING.md +79 -0
  19. package/docs/PROJECT_FILTERS.md +77 -0
  20. package/docs/RELEASING.md +23 -0
  21. package/docs/TESTING.md +52 -0
  22. package/docs/WORKFLOWS.md +37 -0
  23. package/examples/codex.toml +3 -0
  24. package/examples/mcp.json +8 -0
  25. package/mcp.json +10 -0
  26. package/package.json +72 -4
  27. package/plugin.json +24 -0
  28. package/remote/tool-catalog.json +1374 -0
  29. package/remote/workflows.json +67 -0
  30. package/skills/geniustasker/SKILL.md +148 -0
  31. package/skills/geniustasker/agents/openai.yaml +4 -0
  32. package/skills/geniustasker/references/collaboration.md +70 -0
  33. package/skills/geniustasker/references/incremental-reads.md +16 -0
  34. package/skills/geniustasker/references/profiles.md +22 -0
  35. package/skills/geniustasker/references/project-reads.md +43 -0
  36. package/skills/geniustasker-documentation/SKILL.md +39 -0
  37. package/skills/geniustasker-documentation/agents/openai.yaml +4 -0
  38. package/skills/geniustasker-documentation/references/structure.md +29 -0
  39. package/skills/geniustasker-graph/SKILL.md +31 -0
  40. package/skills/geniustasker-graph/agents/openai.yaml +4 -0
  41. package/skills/geniustasker-media/SKILL.md +33 -0
  42. package/skills/geniustasker-media/agents/openai.yaml +4 -0
  43. package/skills/geniustasker-memory/SKILL.md +120 -0
  44. package/skills/geniustasker-memory/agents/openai.yaml +4 -0
  45. package/skills/geniustasker-memory/references/knowledge-workflows.md +57 -0
  46. package/skills/geniustasker-planning/SKILL.md +28 -0
  47. package/skills/geniustasker-planning/agents/openai.yaml +4 -0
  48. package/src/changes.mjs +139 -0
  49. package/src/cli.mjs +511 -0
  50. package/src/client.mjs +264 -0
  51. package/src/command-catalog.mjs +569 -0
  52. package/src/commands.mjs +277 -0
  53. package/src/documentation-graph.mjs +251 -0
  54. package/src/documentation-store.mjs +589 -0
  55. package/src/documentation-sync.mjs +517 -0
  56. package/src/documentation.mjs +136 -0
  57. package/src/errors.mjs +65 -0
  58. package/src/knowledge.mjs +109 -0
  59. package/src/login.mjs +258 -0
  60. package/src/mcp.mjs +327 -0
  61. package/src/media.mjs +307 -0
  62. package/src/presentation.d.mts +1 -0
  63. package/src/presentation.mjs +12 -0
  64. package/src/profiles.mjs +154 -0
  65. package/src/read-cache.mjs +111 -0
  66. package/src/store.mjs +141 -0
  67. package/src/transport.mjs +201 -0
  68. package/src/workflows.mjs +9 -0
@@ -0,0 +1,144 @@
1
+ # Keep product documentation beside your code
2
+
3
+ Choose the Memory libraries and Graphs relevant to a repository. GeniusTasker is
4
+ the editable source; the CLI produces a dated Markdown snapshot in your chosen
5
+ directory. Memory remains independent of projects.
6
+
7
+ This workflow requires `documentationSync: true` in `geniustasker capabilities`
8
+ and the `docs sync` command in your installed client. All reads use your current
9
+ account, connection, profile and page permissions.
10
+
11
+ ## Configure a repository
12
+
13
+ Create a small configuration file, for example `geniustasker-docs.json`:
14
+
15
+ ```json
16
+ {
17
+ "formatVersion": 1,
18
+ "sources": [
19
+ { "scope": "memory:PRODUCT_ID", "pages": true, "graph": true },
20
+ { "scope": "memory:DESIGN_ID", "parentId": "VISUALS_FOLDER_ID", "pages": true }
21
+ ],
22
+ "media": "local"
23
+ }
24
+ ```
25
+
26
+ Use IDs discovered through your own account. Omit `parentId` for a whole library.
27
+ `graph` includes that scope’s Graph, independently of its document subtree.
28
+ `media: "references"` keeps resource IDs without downloading bytes; `local`
29
+ downloads only media used by the selected pages and Graph thumbnails and needs
30
+ `media:read`. Choose up to 50 scopes, with one subtree per scope.
31
+
32
+ ```sh
33
+ geniustasker docs sync --context work --directory docs/geniustasker --file geniustasker-docs.json --json
34
+ geniustasker docs status --directory docs/geniustasker --json
35
+ geniustasker docs sync --context work --directory docs/geniustasker --json
36
+ ```
37
+
38
+ The first call saves the selection. Later calls reuse it; supplying another
39
+ configuration explicitly changes the selection. The recommended destination is
40
+ `docs/geniustasker/`, but choose a path that fits your repository. Exporting private
41
+ knowledge does not publish it or authorize committing it to a public repository.
42
+
43
+ ## What appears locally
44
+
45
+ All generated files live in the destination’s **`content/`** subdirectory.
46
+ Keep handwritten files alongside `content/`, rather than inside it.
47
+
48
+ ```text
49
+ docs/geniustasker/
50
+ content/
51
+ .geniustasker-manifest.json
52
+ memory-PRODUCT_ID/
53
+ index.md
54
+ pages/
55
+ overview--stable-suffix/index.md
56
+ visuals--stable-suffix/
57
+ interface--stable-suffix/index.md
58
+ resources/RESOURCE_ID.png
59
+ graph.md
60
+ graph.json
61
+ graph/nodes-0000.md
62
+ graph/nodes-0000.json
63
+ graph/edges-0000.md
64
+ graph/edges-0000.json
65
+ ```
66
+
67
+ Pages keep Markdown headings, tables, lists, code and Mermaid blocks. Each starts
68
+ with an automatic-generation notice and ends with source ID, revision, edit time,
69
+ creator/editor and source epoch. Older imported records can have an unknown
70
+ editor; the exporter does not invent one. View diagrams in a Mermaid-capable
71
+ Markdown reader.
72
+
73
+ Shared resources have one local file per asset ID within the selected Memory.
74
+ The server’s verified SHA-256 is checked when available; unchanged immutable
75
+ assets reuse the previously verified local bytes. Generated files contain no
76
+ bearer tokens or signed download URLs.
77
+
78
+ Graph JSON is split into chunks of at most 100 records, with a small `graph.json`
79
+ index. The Markdown companions preserve node notes and qualified relations.
80
+ References to another Memory remain source identities: access to a Graph does
81
+ not grant access to linked content, and a missing reference does not erase nodes.
82
+
83
+ ## Efficient updates
84
+
85
+ The exporter checks current access and folder versions first. It skips unchanged
86
+ branches, retrieves changed Markdown pages individually, and uses Graph change
87
+ cursors after the first inventory. Moves, non-latest-child deletions and restored
88
+ sources are detected. A continuation cannot silently mix source revisions.
89
+
90
+ An interrupted first export keeps completed downloads in a private cache beside
91
+ the CLI credentials, outside the repository. The next attempt checks access and
92
+ the current tree again before reusing a page with the same revision. Graph and
93
+ media downloads also resume when their source checkpoint still matches. A quota
94
+ reset therefore does not require downloading the same first pages repeatedly.
95
+ Changed or inaccessible entries are discarded. The temporary cache is bounded
96
+ to twice the selected byte budget and is removed after a successful sync.
97
+
98
+ Use `memory tree --scope memory:ID` to inspect a bounded folder. Continue with
99
+ `--after`, `--epoch` and `--checkpoint`. Use `memory markdown --scope memory:ID
100
+ --page PAGE_ID` for one page, optionally with its expected `--revision`.
101
+
102
+ There is no background polling. For a repository using generated knowledge:
103
+
104
+ 1. At the beginning of a working day, check `docs status`; sync before relying on
105
+ a snapshot whose freshness has not been checked that day.
106
+ 2. Read local files for the task. Fetch only missing source details through MCP.
107
+ 3. Apply relevant documentation changes to GeniusTasker using MCP, preserving
108
+ IDs, hierarchy, source authority and expected revisions.
109
+ 4. Sync again after finishing work that changes the documented product or Graph.
110
+
111
+ An offline or refused check never advances the successful check time. Local
112
+ files remain dated snapshots, not evidence of present authorization.
113
+
114
+ ## Failure and recovery
115
+
116
+ | Situation | Result and next step |
117
+ | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
118
+ | Network error or interrupted download | The previous complete snapshot remains. Rerun sync; completed downloads resume after fresh authorization and version checks. |
119
+ | Source changed during export | No mixed snapshot is installed. Reread and rerun. |
120
+ | Confirmed scope denial | Its managed snapshot is removed and marked unavailable. Regrant permits a fresh export. This cannot retract Git history or other copies. |
121
+ | Local edits/additions inside `content/` | Sync stops without overwriting them. Apply edits through MCP and preserve handwritten files outside the managed directory. |
122
+ | Account/environment changed | Use a separate destination; the exporter refuses to merge identities. |
123
+ | Another exporter is running | Wait for it. A crashed process can be released with `docs unlock --directory ...`; a living or foreign-host process is never unlocked. |
124
+ | Interrupted directory replacement | The next sync restores the previous snapshot when necessary, then revalidates. It does not publish unchecked staged data. |
125
+ | Quota or rate limit | Follow the returned reset/retry guidance. Do not create profiles to bypass account limits. |
126
+
127
+ Symlink destinations, path traversal and conflicting generated paths are refused.
128
+ The default budget is 20,000 files and 256 MiB. Explicit `--max-files` (up to
129
+ 100,000) and `--max-bytes` (up to 4 GiB) can raise it for a reviewed selection;
130
+ individual files remain bounded. These local budgets do not increase server
131
+ quotas. Narrow the selection if exporting everything is unnecessary.
132
+
133
+ ## Agent tools
134
+
135
+ | Tool | Purpose |
136
+ | ------------------------ | --------------------------------------------------------------- |
137
+ | `tasker_memory_tree` | Inspect a folder and descendant versions without loading bodies |
138
+ | `tasker_memory_markdown` | Fetch one source page with provenance |
139
+ | `tasker_docs_status` | Inspect the saved date and selections locally |
140
+ | `tasker_docs_sync` | Refresh the explicit selection in a local directory |
141
+ | `tasker_media_compare` | Compare a local file with an existing resource before upload |
142
+
143
+ The documentation, media and Graph skills describe the corresponding workflows.
144
+ They do not authorize account changes or publication outside the user’s task.
@@ -0,0 +1,62 @@
1
+ # Connect your agent
2
+
3
+ Choose either direct MCP configuration or the plugin bundle, to avoid registering
4
+ the same server twice. Authenticate once per chosen local context. Permissions
5
+ are selected in the browser and enforced by the service on every request.
6
+
7
+ ## Codex: direct MCP
8
+
9
+ ```sh
10
+ npx -y @pulsarinteractive/geniustasker@0.1.0-beta.10 auth login --context work
11
+ codex mcp add geniustasker -- npx -y @pulsarinteractive/geniustasker@0.1.0-beta.10 mcp --context work
12
+ ```
13
+
14
+ Restart the host as needed, then inspect its MCP list. Ask the agent to read its
15
+ GeniusTasker identity and list available projects. Configure a different context
16
+ when a separate terminal needs an independent session.
17
+
18
+ ## Claude and other stdio hosts
19
+
20
+ Merge the `mcpServers.geniustasker` entry from [the example](../examples/mcp.json)
21
+ into the host's documented configuration. Don't replace unrelated servers.
22
+ No token, API key or password belongs in that configuration. Host-specific paths
23
+ and plugin formats vary; use the host's current documentation.
24
+
25
+ ## Install skills separately
26
+
27
+ Clone this repository into a location you control. For a Codex user-level install,
28
+ copy the `geniustasker` and `geniustasker-memory` folders from `skills/` into
29
+ `~/.agents/skills/`, keeping each `SKILL.md`, references and metadata together.
30
+ For Claude use its supported `.claude/skills/` location. Inspect an existing folder
31
+ before replacing it. Restart the agent and invoke `$geniustasker` or
32
+ `$geniustasker-memory` where the host supports named invocation.
33
+
34
+ Skills guide workflows; the MCP provides executable tools. The CLI remains useful
35
+ without skills, and skills can use the CLI when an MCP host is not configured.
36
+
37
+ ## Portable plugin bundle
38
+
39
+ The root `plugin.json` and `mcp.json` follow Agent Plugins 1.0.0. The bundled MCP
40
+ runs locally over stdio and pins a published npm version. Node and npm must be
41
+ available in the execution environment. Authenticate the `work` context first.
42
+
43
+ The repository also has `.agents/plugins/marketplace.json` for local distribution:
44
+
45
+ ```sh
46
+ codex plugin marketplace add PulsarInteractive/geniustasker-agent-tools
47
+ ```
48
+
49
+ Use the host's Plugins interface to select and enable GeniusTasker. This local
50
+ marketplace is distinct from OpenAI's public directory. Packaging/schema checks
51
+ and SDK transport tests are automated; real host installation is recorded
52
+ separately in the release notes and must not be inferred from those tests.
53
+
54
+ ## Revoke
55
+
56
+ ```sh
57
+ geniustasker auth logout --context work
58
+ ```
59
+
60
+ This revokes the server session before removing its credentials. A failed revoke
61
+ keeps local evidence so it can be retried. Uninstalling a package alone does not
62
+ revoke a remote session.
package/docs/LIMITS.md ADDED
@@ -0,0 +1,62 @@
1
+ # Usage limits
2
+
3
+ CLI and MCP share your GeniusTasker account limits. Creating more agent profiles,
4
+ opening more terminals or changing devices does not give additional allowance.
5
+ The service reports current limits through `geniustasker capabilities --json`.
6
+
7
+ ## Agent requests
8
+
9
+ | Allowance | Free | Starter | Pro |
10
+ | ----------------------------- | ----: | -----------------: | -----------------: |
11
+ | Requests per 60 seconds | 30 | 120 | 300 |
12
+ | Write requests per 60 seconds | 5 | 20 | 60 |
13
+ | Monthly request credits | 5,000 | No monthly ceiling | No monthly ceiling |
14
+ | Monthly write requests | 500 | No monthly ceiling | No monthly ceiling |
15
+
16
+ Write requests also count toward the request limit. For Free accounts, a read
17
+ costs one monthly credit and a write costs five; both monthly limits must have
18
+ capacity. Monthly counters reset at the beginning of the next calendar month
19
+ in UTC. The public Starter and Pro plans use `Starter` and `Pro` in API responses.
20
+
21
+ These are the current service settings, not a pricing commitment. Short-window
22
+ limits provide traffic protection and can apply approximately by location;
23
+ clients must follow the service response. Resource limits for projects, members,
24
+ Memory, storage and attachments are separate and still apply. Availability also
25
+ requires account approval and an explicitly granted agent connection.
26
+
27
+ ## MCP and the built-in coach are separate
28
+
29
+ MCP connects the AI tool you already use to your account. Its external model
30
+ subscription and token charges stay with that tool; agent request credits are
31
+ not model tokens. The built-in GeniusTasker coach has its own account allowance.
32
+ Reaching an agent or coach allowance does not remove your documents or project
33
+ access. Ordinary app traffic remains subject to its separate API limits.
34
+
35
+ Each server request counts, including discovery, polling and a retry that reaches
36
+ the admission step. A write can consume allowance even if a later domain rule
37
+ refuses it. Replaying the same operation prevents a duplicate edit; it does not
38
+ promise free network requests.
39
+
40
+ ## When a limit is reached
41
+
42
+ | Response | Next step |
43
+ | -------------------------------- | --------------------------------------------------------------------- |
44
+ | Temporary rate limit (`429`) | Wait for the reported retry time; do not loop or open another context |
45
+ | Free monthly allowance exhausted | Wait for the reported reset or change plan when available |
46
+ | Resource capacity reached | Free capacity or change plan before creating more data |
47
+ | Permission refused (`403`) | Ask the account or resource owner to review access |
48
+ | Interrupted write | Keep its operation ID and retry that same operation |
49
+
50
+ The client preserves a write's immutable journal for safe retries. A timeout is
51
+ not proof that the write failed. Read the latest record after a revision conflict
52
+ before preparing a new operation.
53
+
54
+ ## Keep reads focused
55
+
56
+ - List one page of spaces or resources at a time and follow its cursor as needed.
57
+ - Use Memory search and its page index before downloading document bodies.
58
+ - Explore a bounded Graph neighborhood instead of loading every node.
59
+ - Reuse checkpoints for change reads; honor `restart_read` when the service asks.
60
+ - Local cache hits revalidate access. Revoked permissions never become an offline grant.
61
+
62
+ See [CLI reference](CLI.md) for commands and [Memory & Graph](MEMORY.md) for examples.
package/docs/MEMORY.md ADDED
@@ -0,0 +1,38 @@
1
+ # Memory and Graph
2
+
3
+ Memory stores structured documents independently of projects. Graph connects
4
+ nodes and links them to a page or a stable document block. These commands require
5
+ the matching deployed service capabilities; check `geniustasker capabilities --json` before using them.
6
+
7
+ ```sh
8
+ geniustasker memory search --scope memory:ID --query "release checklist" --json
9
+ geniustasker graph explore --scope memory:ID --center NODE_ID --depth 2 --json
10
+ geniustasker memory resolve --scope memory:ID --page PAGE_ID --block BLOCK_ID --json
11
+ ```
12
+
13
+ The matching MCP tools are `tasker_search`, `tasker_graph` and `tasker_reference`.
14
+ Search is paginated; Graph returns a bounded neighborhood and reports truncation.
15
+ Use `resources list` for complete selected records and `commands describe` for
16
+ contract-derived node/edge write fields. Writes keep the same immutable journal.
17
+
18
+ References recheck current access. If a friend withdraws access, the content
19
+ becomes unavailable while the node and its own text remain intact. A new grant
20
+ restores resolution; a link never grants access by itself. The client does not
21
+ cache resolved content. Discover capabilities before selecting a workflow.
22
+
23
+ ## Attachments
24
+
25
+ Discover `mediaUploadAvailable` and `maxUploadBytes` first. Prepare one explicitly
26
+ selected file with `media prepare --scope memory:ID --epoch EPOCH --file diagram.png
27
+ --content-type image/png`, then `media upload --operation UUID`. Keep that operation
28
+ ID after a timeout: retries verify the same bytes and do not create a second file.
29
+ Use the returned `assetId` in an image or attachment block. Images, PDF and plain
30
+ text are supported up to 15 MB; storage is charged to the Memory owner.
31
+
32
+ MCP equivalents are `tasker_media_prepare`, `tasker_media_upload`,
33
+ `tasker_media_action` and `tasker_media_download`. Downloads require an explicit
34
+ new local path and fresh read access. Removal leaves document blocks in place
35
+ so people can see and repair the unavailable attachment. No credentials, URLs
36
+ with public access tokens or file bytes are embedded in documents.
37
+
38
+ See the [CLI reference](CLI.md) for document blocks, page roles, node types, images and detailed command examples.
package/docs/OPENAI.md ADDED
@@ -0,0 +1,21 @@
1
+ # GeniusTasker and OpenAI tools
2
+
3
+ Use [the hosted ChatGPT connection guide](CHATGPT.md) for a remote OAuth MCP connection. It uses a dedicated GeniusTasker grant and requires no local process or OpenAI API key.
4
+
5
+ For terminal-based agents, the existing local MCP configuration and skills remain available; see [integrations](INTEGRATIONS.md). Local filesystem features remain local.
6
+
7
+ Public directory publication is a separate review: [submission checklist](OPENAI_PUBLICATION.md). A custom plugin is not a directory approval or an OpenAI endorsement.
8
+
9
+ ### Reconnecting with edit permissions
10
+
11
+ The remote catalogue exposes permission-specific read and edit tools. This lets
12
+ ChatGPT request the permissions needed for tasks, planning and other supported
13
+ actions when linking or reconnecting an account. Consent remains editable;
14
+ selecting fewer permissions keeps the connection restricted. Coach tools also
15
+ require the Coach subscription and explicit access to the athlete's program.
16
+
17
+ Older linked accounts may have only read permissions. Refresh the plugin tools
18
+ and reconnect if editing permissions are missing; verify the connected account
19
+ and capabilities before working. Reconnection never bypasses account quotas.
20
+ The generic read/execute entry points remain for existing clients; new workflows
21
+ should prefer the permission-specific tools after preparing an immutable command.
@@ -0,0 +1,22 @@
1
+ # Official directory publication
2
+
3
+ A working custom connector is not an approved directory listing. Submission and publication are separate owner-controlled steps.
4
+
5
+ 1. Verify the publishing identity **Pulsar Interactive** in the OpenAI organization and assign the appropriate submission permissions.
6
+ 2. Prepare a plugin ZIP with the remote MCP declaration, public metadata and relevant skills. Keep credentials, backend code and private instructions outside it.
7
+ 3. Upload a draft, verify the MCP domain using the challenge provided by OpenAI, connect a dedicated demonstration account and resolve the automated findings.
8
+ 4. Supply reproducible positive and negative scenarios, a walkthrough recording and release notes. The demo account must contain synthetic data and remain usable for review. Do not provide your personal account.
9
+ 5. Submit the draft and required attestations. After approval, choose when to publish. Approval and its timing belong to OpenAI.
10
+
11
+ Before submission, ensure support, privacy and legal URLs are reachable by reviewers, describe the actual data handled, and match the publisher. Review write/destructive annotations, revocation, least-privilege grants, subscription restrictions and safe retries. Do not advertise availability in the directory before approval and publication.
12
+
13
+ The private preview websites remain protected. Their current protection must be deliberately reconciled with reviewer access before public submission; it is not removed by installing the connector.
14
+
15
+ Current official references (checked 23 October 2026):
16
+
17
+ - [Submit a plugin](https://developers.openai.com/plugins/deploy/submission)
18
+ - [Remote MCP review requirements](https://developers.openai.com/plugins/deploy/app-review)
19
+ - [Plugin guidelines](https://developers.openai.com/plugins/plugin-guidelines)
20
+ - [Authentication](https://developers.openai.com/plugins/build/auth)
21
+
22
+ This repository does not assert that an OpenAI review has occurred or that the product is endorsed by OpenAI.
@@ -0,0 +1,79 @@
1
+ # Projects and planning
2
+
3
+ Use `geniustasker workflow show --topic planning --json` or `tasker_workflow`
4
+ with `topic: planning` for the same guide in CLI, local MCP and ChatGPT.
5
+ Inspect `capabilities` and the current record before preparing a command.
6
+
7
+ | Operation | Commands | Required access |
8
+ | ----------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
9
+ | New project | `project.create` | `projects:write`, all-resources consent including future projects, available account quota |
10
+ | Project settings | `project.update`, `project.features` | `projects:write`, native project administration |
11
+ | Delete project | `project.delete` | `projects:write`, project ownership |
12
+ | Sprint lifecycle | `sprint.create/update/start/complete/delete` | `tasks:write`, native sprint management |
13
+ | Workflow stages | `workflow.create/update/delete` | `tasks:write`, native project administration |
14
+ | Recurring tasks | `schedule.create/update/delete` | `tasks:write`, native schedule rights |
15
+ | Project documents | `document.create/update/delete`, `folder.create/update/delete` | `tasks:write`, native content rights |
16
+ | Memory folders | `memory.page.create/update/delete` with `directory: true` | `memory:write`, Memory content rights |
17
+
18
+ Existing credentials retain their original permissions. Reconnect and approve
19
+ `projects:write` to use project administration. A grant restricted to selected
20
+ existing projects cannot create another project. A new project created through
21
+ the connector has agent contributions enabled; an existing project's opt-out
22
+ remains controlled by a human administrator. Membership and consent changes
23
+ are not delegated commands.
24
+
25
+ ## Create and configure a project
26
+
27
+ Generate a UUID v4 once. Use it as `id` and `epoch`, with scope `project:<id>`
28
+ and `expectedRevision: null`. `project.create` accepts a title, optional key,
29
+ type and icon; omitted type/icon default to `Details` and `layers`.
30
+ Keep the returned revision for subsequent edits. Other commands require the
31
+ latest target revision. Never manufacture a revision from a local timestamp.
32
+
33
+ `project.features` replaces the planning configuration. Read the project first
34
+ and map these fields; preserve values unrelated to the user's request:
35
+
36
+ | Read field | Command field |
37
+ | -------------------- | ----------------- |
38
+ | `backlogEnabled` | `backlog` |
39
+ | `sprintsEnabled` | `sprints` |
40
+ | `hierarchyEnabled` | `hierarchy` |
41
+ | `workflowsEnabled` | `workflows` |
42
+ | `votesEnabled` | `votes` |
43
+ | `gitHubEnabled` | `gitHub` |
44
+ | `useSprintDeadlines` | `sprintDeadlines` |
45
+ | `projectTimeZone` | `timeZone` |
46
+
47
+ The seven switches are required booleans. Use an IANA time zone, such as
48
+ `Europe/Brussels`. Enabling workflows creates the initial stages if none exist.
49
+ Sprints require a Details project. Active sprints prevent disabling sprints.
50
+
51
+ ## Sprint and workflow rules
52
+
53
+ Sprint creation/editing uses `name`, `goal`, `start` and `end`; dates are ISO
54
+ instants with an offset and end must follow start by at most 180 days. Only one
55
+ sprint can be active. Completing a sprint preserves its history and carries
56
+ unfinished work to `carryToSprint`, or to backlog when that value is null.
57
+ Completed sprints are immutable; deletion is limited to planned sprints.
58
+
59
+ Workflow creation/editing uses `name`, `category` (`New`, `InProgress`, `Done`)
60
+ and integer `order`. Deleting an occupied stage requires `replacement`, the ID
61
+ of another stage. The final stage of each category cannot be deleted. Task
62
+ status changes caused by stage edits are part of the same server transaction.
63
+
64
+ ## Recurrences and documents
65
+
66
+ Recurring tasks use `period`, `interval`, `startTime`, `weekDay`, `timeZoneId`
67
+ and optional assignee, deadline, notification and dependency fields. Inspect
68
+ command help for the exact field list. Resolve ambiguous dates/time zones with
69
+ the user. Do not write scheduler state (`disabled`, `nextCheck`, `lastCreation`).
70
+ Deleting a recurrence preserves previously generated tasks.
71
+
72
+ Project folders use `name` and `parent`; project documents use `title`, `content`
73
+ and `folder`. They are separate from Memory pages. Memory folders use the
74
+ existing page command with `directory: true`, `path` and `parentId`; documents
75
+ keep stable page and block IDs. Folder cycles are rejected by the server.
76
+
77
+ Prepare then execute one immutable operation. Retain its ID, timestamp and body
78
+ for uncertain retries. Read back affected collections after success. Open apps
79
+ receive the same realtime changes as edits made in the native UI.
@@ -0,0 +1,77 @@
1
+ # Shared project filters
2
+
3
+ Keep a reusable task selection for a project’s members. Filters are separate
4
+ from personal list, table or Kanban layout preferences. Creating a filter does
5
+ not change the project’s sprint configuration or install default tags.
6
+
7
+ Discover `capabilities` before using this guide. The connected service must
8
+ advertise `filters` and `filter.create`, `filter.update`, `filter.delete`.
9
+ Client support alone does not prove those operations are deployed.
10
+
11
+ ## Read before writing
12
+
13
+ ```sh
14
+ geniustasker resources list --scope project:PROJECT_ID --collection filters --json
15
+ geniustasker resources list --scope project:PROJECT_ID --collection tags --json
16
+ ```
17
+
18
+ Use actual IDs from authorized results. Read members, sprints and tasks when
19
+ selecting them. A name is a label, not an identity: renaming a filter preserves
20
+ its ID and the views that reference it. Prefer updating an existing filter over
21
+ creating duplicates.
22
+
23
+ | Operation | Delegated permission | Project role |
24
+ | ------------------------ | -------------------- | ------------------------------ |
25
+ | Read shared definitions | `tasks:read` | Authorized member |
26
+ | Create, change or delete | `tasks:write` | Owner or project administrator |
27
+
28
+ ## Criteria
29
+
30
+ A create draft uses `kind: "filter.create"`, the actual project `scope` and
31
+ `epoch`, a new stable `id`, `expectedRevision: null`, and these data fields:
32
+
33
+ ```json
34
+ {
35
+ "name": "Upcoming release",
36
+ "criteria": {
37
+ "formatVersion": 1,
38
+ "query": "",
39
+ "tags": ["ACTUAL_TAG_ID"],
40
+ "allTags": true,
41
+ "assignees": [],
42
+ "statuses": ["New", "InProgress"],
43
+ "priorities": [],
44
+ "sprints": [],
45
+ "epics": [],
46
+ "placement": null,
47
+ "blocked": null
48
+ }
49
+ }
50
+ ```
51
+
52
+ Categories combine with AND. Values within a category combine with OR; `allTags`
53
+ changes tags to AND. Empty arrays leave that category unrestricted. Use
54
+ `unassigned` in assignees for tasks without an owner. Statuses are `New`,
55
+ `InProgress`, `Done`; priorities `Low`, `Normal`, `High`, `Urgent`; placement is
56
+ `Ordinary`, `Backlog`, `Sprint`, or null. `blocked` is true, false or null.
57
+
58
+ Current bounds: 50 shared filters per project, names of 2–50 characters, query
59
+ up to 256 characters, up to 100 distinct references per category and 8 KiB of
60
+ criteria. Limits and permissions are enforced by the connected service.
61
+
62
+ Prepare and execute using the normal [immutable command workflow](CLI.md#prepare-execute-and-recover-writes).
63
+ An update requires the latest revision and may change `name`, `criteria`, or
64
+ both. Submit a complete criteria object when changing criteria. A delete uses
65
+ `filter.delete`, the latest revision and empty `data`.
66
+
67
+ ## Changes and unavailable references
68
+
69
+ Use incremental reads for `filters` just like tasks. A deleted tag does not
70
+ silently remove its condition from an existing filter. New references must be
71
+ live and belong to the same project. Renaming the filter can preserve a removed
72
+ reference until a person deliberately replaces that condition.
73
+
74
+ If a selected shared filter is missing, deleted, inaccessible or uses an unknown
75
+ format, report it as unavailable. Never treat it as an unrestricted task query.
76
+ Removing a shared filter affects other members’ saved views, so review its uses
77
+ before deletion and follow the user’s authorized scope.
@@ -0,0 +1,23 @@
1
+ # Release process
2
+
3
+ 1. Update package, lockfile, MCP server version, plugin version and example pins together.
4
+ 2. Review public contract/skill changes and run `npm ci`, `npm run verify` and `npm audit`.
5
+ 3. Inspect `git diff` and the complete `npm pack --dry-run --json` list. No private repository history or product files may enter this repo.
6
+ 4. Pack and inspect the actual archive. `npm publish <archive> --access public --tag beta` requires the maintainer's npm authentication.
7
+ 5. Confirm registry version/tag/integrity, install using a fresh cache and exercise real MCP through an explicitly authorized beta account. Keep private results outside this repository.
8
+ 6. Tag the corresponding commit and publish accurate release notes. Record host-specific acceptance separately.
9
+
10
+ CI runs tests and package/privacy checks. It never publishes npm or deploys the
11
+ service. Future trusted publishing should use a reviewed OIDC setup rather than
12
+ committing an npm token; it is not configured by this repository.
13
+
14
+ Published npm versions are immutable. Use a new version for package changes.
15
+
16
+ Canonical repository: https://github.com/PulsarInteractive/geniustasker-agent-tools
17
+
18
+ The npm package page and unqualified installs use the `latest` tag. After verifying
19
+ the release archive, explicitly update both the intended channel and the default
20
+ version; do not leave `latest` pointing at a superseded license or README. Verify
21
+ `npm view @pulsarinteractive/geniustasker dist-tags license repository.url --json`
22
+ and inspect the actual npm page. An old published archive is immutable; tags do
23
+ not rewrite its contents.
@@ -0,0 +1,52 @@
1
+ # Testing
2
+
3
+ ## Run the quality checks
4
+
5
+ ```sh
6
+ npm ci
7
+ npm run verify
8
+ ```
9
+
10
+ `verify` runs formatting, ESLint, tests, package inventory, public-file checks and
11
+ plugin/schema validation. CI runs the same command on Linux and macOS with Node
12
+ 22, followed by a dependency vulnerability audit. It has read-only repository
13
+ permissions and no live service credentials.
14
+
15
+ ## Focused checks
16
+
17
+ ```sh
18
+ npm run format:check
19
+ npm run lint
20
+ node --test test/login.test.mjs
21
+ node --test test/process.test.mjs
22
+ npm run check
23
+ npm audit
24
+ ```
25
+
26
+ `npm run format` applies formatting. The generated command catalog and vendored
27
+ schemas are excluded from formatting so their provenance remains stable.
28
+
29
+ ## What the suites cover
30
+
31
+ | Suite | Observable guarantees |
32
+ | --------------- | --------------------------------------------------------------------------------------------------------------- |
33
+ | Login | Consent URL validation, PKCE state/callback handling, denial, cancellation, device-flow deadlines and slow-down |
34
+ | Client/store | Private file checks, origin binding, serialized renewal and uncertain-token recovery |
35
+ | Commands | Immutable requests, concurrent writes, identity binding, uncertain receipts and conflicts |
36
+ | Profiles | Grant validation, narrowed selection, revision conflicts and rotation uncertainty |
37
+ | Changes | Cursor validation, bounded waits, cancellation and no blind retries after quota or permission failures |
38
+ | Process | Real stdio MCP discovery/calls and coordination between separate OS processes |
39
+ | Public boundary | Rejection of excluded files, credentials, symlinks and escaping imports |
40
+
41
+ Tests create and clean up their own temporary directories and loopback servers.
42
+ They do not require browser sign-in or real project data. Use meaningful scenario
43
+ names, assert behavior at public boundaries and include the failure that motivates
44
+ a regression test. Avoid sleeps as synchronization when an explicit signal works.
45
+
46
+ ## What local tests do not establish
47
+
48
+ They do not prove admission to the hosted beta, production availability, browser
49
+ provider compatibility on every device or acceptance by each agent host. Release
50
+ verification separately installs the published archive with a fresh cache,
51
+ compares registry integrity and exercises a deliberately authorized test account.
52
+ Record those checks without publishing account data.
@@ -0,0 +1,37 @@
1
+ # GeniusTasker workflows
2
+
3
+ | What you want | Guide topic | Operations |
4
+ | --------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------- |
5
+ | Work on a project | `projects` | Read project/member configuration; create/edit/archive/restore tasks; create and plan tickets in existing backlogs/sprints |
6
+ | Prepare a shared workflow | `projects` | Project tags and saved filters; sprint, recurring schedule and workflow lifecycle |
7
+ | Collaborate | `projects` | Comments, work reports, questions, exact action approvals and member goals |
8
+ | Organize knowledge | `memory` | Independent Memory spaces, folders/documents, role-restricted content and resource references |
9
+ | Connect knowledge | `graph` | Typed nodes and relations; authorized references across memories |
10
+ | Recover an interrupted edit | `mutations` | Preserve the exact request; read back; reconcile a revision conflict |
11
+ | Connect or fix permissions | `connection` | Correct account, consent, reconnect and shared quota |
12
+
13
+ Use `tasker_workflow` in MCP or `geniustasker workflow show --topic TOPIC`.
14
+ Discover commands before editing. A readable collection does not imply a matching
15
+ write command. See [projects and planning](PLANNING.md) for lifecycle commands.
16
+ Membership and consent changes remain in the application.
17
+
18
+ ## Example requests
19
+
20
+ - “Find my tasks in the current sprint and summarize what blocks them.”
21
+ - “Create a project tag named Beta and save a shared filter for those tasks.”
22
+ - “Move these tickets into this existing sprint after checking their revisions.”
23
+ - “Add this decision to the appropriate Memory folder and link its Graph node.”
24
+ - “Refresh this repository’s configured documentation mirror.”
25
+
26
+ ## Local files and linked permissions
27
+
28
+ Repository mirrors, local image comparison and file upload are CLI/local MCP
29
+ workflows. The hosted ChatGPT connector does not access your local disk or upload
30
+ an arbitrary chat attachment. Reuse stable asset IDs; compare content before
31
+ replacing an image. A Graph link never grants access to its target: when access
32
+ is removed, the node remains but linked private data becomes unavailable.
33
+
34
+ Existing project agent contributions must be enabled by an authorized member.
35
+ New projects created with projects:write start with contributions enabled. No tool
36
+ can grant itself membership, approve an action as a human, or bypass account
37
+ [limits](LIMITS.md).
@@ -0,0 +1,3 @@
1
+ [mcp_servers.geniustasker]
2
+ command = "npx"
3
+ args = ["-y", "@pulsarinteractive/geniustasker@0.1.0-beta.10", "mcp", "--context", "work"]
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "geniustasker": {
4
+ "command": "npx",
5
+ "args": ["-y", "@pulsarinteractive/geniustasker@0.1.0-beta.10", "mcp", "--context", "work"]
6
+ }
7
+ }
8
+ }