@pulsarinteractive/geniustasker 0.1.0-beta.1 → 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.
- package/CHANGELOG.md +80 -0
- package/CONTRIBUTING.md +72 -0
- package/LICENSE +21 -0
- package/LICENSES/Apache-2.0.txt +202 -0
- package/README.md +47 -370
- package/SECURITY.md +14 -0
- package/THIRD_PARTY_NOTICES.md +15 -0
- package/docs/ARCHITECTURE.md +144 -0
- package/docs/CHATGPT.md +86 -0
- package/docs/CLI.md +444 -0
- package/docs/DOCUMENTATION_SYNC.md +144 -0
- package/docs/INTEGRATIONS.md +62 -0
- package/docs/LIMITS.md +62 -0
- package/docs/MEMORY.md +38 -0
- package/docs/OPENAI.md +21 -0
- package/docs/OPENAI_PUBLICATION.md +22 -0
- package/docs/PLANNING.md +79 -0
- package/docs/PROJECT_FILTERS.md +77 -0
- package/docs/RELEASING.md +23 -0
- package/docs/TESTING.md +52 -0
- package/docs/WORKFLOWS.md +37 -0
- package/examples/codex.toml +3 -0
- package/examples/mcp.json +8 -0
- package/mcp.json +10 -0
- package/package.json +45 -9
- package/plugin.json +24 -0
- package/remote/tool-catalog.json +1374 -0
- package/remote/workflows.json +67 -0
- package/skills/geniustasker/SKILL.md +49 -116
- package/skills/geniustasker/agents/openai.yaml +4 -0
- package/skills/geniustasker/references/collaboration.md +70 -0
- package/skills/geniustasker/references/incremental-reads.md +16 -0
- package/skills/geniustasker/references/profiles.md +22 -0
- package/skills/geniustasker/references/project-reads.md +43 -0
- package/skills/geniustasker-documentation/SKILL.md +39 -0
- package/skills/geniustasker-documentation/agents/openai.yaml +4 -0
- package/skills/geniustasker-documentation/references/structure.md +29 -0
- package/skills/geniustasker-graph/SKILL.md +31 -0
- package/skills/geniustasker-graph/agents/openai.yaml +4 -0
- package/skills/geniustasker-media/SKILL.md +33 -0
- package/skills/geniustasker-media/agents/openai.yaml +4 -0
- package/skills/geniustasker-memory/SKILL.md +120 -0
- package/skills/geniustasker-memory/agents/openai.yaml +4 -0
- package/skills/geniustasker-memory/references/knowledge-workflows.md +57 -0
- package/skills/geniustasker-planning/SKILL.md +28 -0
- package/skills/geniustasker-planning/agents/openai.yaml +4 -0
- package/src/changes.mjs +104 -28
- package/src/cli.mjs +453 -77
- package/src/client.mjs +203 -34
- package/src/command-catalog.mjs +545 -263
- package/src/commands.mjs +215 -52
- package/src/documentation-graph.mjs +251 -0
- package/src/documentation-store.mjs +589 -0
- package/src/documentation-sync.mjs +517 -0
- package/src/documentation.mjs +136 -0
- package/src/errors.mjs +55 -12
- package/src/knowledge.mjs +109 -0
- package/src/login.mjs +190 -47
- package/src/mcp.mjs +310 -43
- package/src/media.mjs +307 -0
- package/src/presentation.d.mts +1 -0
- package/src/presentation.mjs +12 -0
- package/src/profiles.mjs +123 -32
- package/src/read-cache.mjs +111 -0
- package/src/store.mjs +101 -26
- package/src/transport.mjs +165 -32
- 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.
|
package/docs/PLANNING.md
ADDED
|
@@ -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.
|
package/docs/TESTING.md
ADDED
|
@@ -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).
|