aiakiv 0.3.1 → 0.3.3

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.
@@ -0,0 +1,162 @@
1
+ ---
2
+ name: aiakiv-onboarding
3
+ description: >-
4
+ First-run helper for the AiAkiv (MemoryWeft / MWeft) memory server. Use when the
5
+ user first connects AiAkiv, asks how to use AiAkiv, how to save or recall memory
6
+ in AiAkiv, which AiAkiv project their memory is going to, or how to point a folder
7
+ at a specific AiAkiv project. Explains connect → authenticate → pick project → save/recall.
8
+ ---
9
+
10
+ # AiAkiv onboarding
11
+
12
+ AiAkiv is a long-term memory server (MemoryWeft / MWeft): it stores important
13
+ conversation content as a **knowledge graph** and retrieves it later. This skill
14
+ gets a new user connected and productive.
15
+
16
+ ## 1. Connect & authenticate
17
+
18
+ The plugin registers one remote MCP server, `AiAkiv`. On first use Claude Code
19
+ opens an **OAuth** login in the browser: sign in or sign up, approve, and the
20
+ AiAkiv memory tools become available.
21
+
22
+ The service address is `https://mcp.aiakiv.com/mcp`, and its path must end with
23
+ `/mcp`. To add AiAkiv by hand in a client that takes an address and a sign-in (a
24
+ custom connector in Claude on the web, desktop or mobile, Grok and the like), the
25
+ address is the same `https://mcp.aiakiv.com/mcp`, with nothing after `/mcp`. Such a
26
+ connection has the memory tools and card creation (§7). If a
27
+ connection the user set up by hand shows no tools,
28
+ check that the part of its URL before any `?` ends with `/mcp` (the bare domain
29
+ returns zero tools).
30
+
31
+ If the user asks how to add AiAkiv to a **different** client, it is also published
32
+ in the official MCP Registry as `com.aiakiv/memory` — a client that can search the
33
+ registry finds it by name (`aiakiv`) or keyword (`memory`) and registers the
34
+ endpoint itself. Same address, same one-time sign-in; the registry only removes the
35
+ typing. Tell them the same address above either way.
36
+
37
+ **ChatGPT and Codex each have their own path.** ChatGPT cannot search the registry
38
+ or write an MCP config, so for a ChatGPT chat (web or app) tell the user to install
39
+ AiAkiv Memory from the plugin directory inside the app and sign in. The steps are at
40
+ https://www.aiakiv.com/docs/chatgpt. If the user works in Codex, give them the
41
+ install prompt at https://www.aiakiv.com/docs/en/codex-install-prompt: pasted into a
42
+ Codex chat, it registers `https://mcp.aiakiv.com/mcp` as `AiAkiv`, opens the
43
+ sign-in window and installs the AiAkiv skills. In Codex, manage the account with
44
+ `npx aiakiv console` (the `aiakiv-dashboard` skill); to tie a folder to one project,
45
+ use `npx aiakiv bind` or a project API key. If the AiAkiv Memory plugin is
46
+ still installed, tell the user to remove it first, or, if they want to keep it for
47
+ chatgpt.com web chats too, to name the Codex connection `AiAkivCodex`, so the two
48
+ sets of same-named tools stay apart and they can name the one to use.
49
+
50
+ ## 2. Confirm where memory is going (the "active target")
51
+
52
+ Every save lands in one **project** (a domain/group coordinate). Before saving,
53
+ confirm it:
54
+
55
+ - Call `get_save_target` → it reports `save_domain` / `save_group`.
56
+ - If it points at the wrong project, the user's account default is their **Main**
57
+ project. To bind a specific folder to a specific project, put the project name
58
+ in the URL of that folder's `.mcp.json` (see §4) — do **not** guess a project name.
59
+
60
+ ## 3. Save and recall
61
+
62
+ - **Save** — only on an explicit `ak` / `mweft` / `memoryweft` utterance
63
+ (e.g. "ak save this", "ak 저장"). Never save on a bare "remember"/"save",
64
+ and never treat "summarize this" as a save. Use `save_memory`.
65
+ - **Recall** — `search_memory(query, top_k=5)`. Ask with a full sentence rather
66
+ than keywords; the ranking is semantic, so a guessed keyword is worse than the
67
+ real question. Read each hit's `reason` tags and the `hint` connection map,
68
+ not just the flat `hits`.
69
+ - To browse one person's contributions, start the query with `@<handle>`.
70
+
71
+ ## 4. Bind a folder to a specific project (optional)
72
+
73
+ Default (no `project` in the URL) → memory goes to the account's Main project. To
74
+ pin a folder to another project, give that folder its own `.mcp.json` whose URL
75
+ names the project:
76
+
77
+ ```json
78
+ { "mcpServers": { "AiAkiv": {
79
+ "type": "http",
80
+ "url": "https://mcp.aiakiv.com/mcp?project=<project-name>"
81
+ } } }
82
+ ```
83
+
84
+ URL-encode the name if it has spaces or non-ASCII characters (`My Project` becomes
85
+ `My%20Project`). The console's project tab gives a ready-to-copy version of this
86
+ config with the name already filled in and encoded.
87
+
88
+ Name the project in the URL, not only in an `X-K2G-Project` header. Some clients
89
+ do not send a custom header on every request, so a folder that relies on the
90
+ header alone can end up following Main. If the user has an older header-only
91
+ config, move the project name into the URL.
92
+
93
+ Changing the project in the URL may bring up the OAuth login again (a login
94
+ prompt, not a failure). For friction-free per-folder switching, the console can
95
+ issue a static project-bound key instead — see the AiAkiv console → project tab.
96
+
97
+ If the user turns Main off in the console, every connection that follows Main (no
98
+ `project` in the URL and no project-bound key) refuses all tools until Main is
99
+ turned back on; folders pinned to a project keep working.
100
+
101
+ ## 5. Trust & privacy
102
+
103
+ AiAkiv is a **hosted** service: saved content leaves the machine and is stored on
104
+ AiAkiv servers. Only save what the user intends to persist. The user controls
105
+ their data through the AiAkiv console (view, export, purge).
106
+
107
+ ## 6. When a save breaks
108
+
109
+ Occasionally a `save_memory` call arrives mangled: you get a serialization
110
+ error, or the arguments turn up merged into one or missing entirely. This is a
111
+ transport problem, not a rejection of the content.
112
+
113
+ What triggers it: a long or multi-line `summary` or `content`, or non-ASCII
114
+ punctuation (`·`, `→`, `—`) landing inside an argument and breaking the
115
+ argument boundaries.
116
+
117
+ Two remedies:
118
+
119
+ 1. **Order the arguments.** List `summary`, `entities` and `tags` before
120
+ `content`, so the longest value is last and there is nothing after it to
121
+ lose.
122
+ 2. **Retry through `payload`.** Bundle the whole call into that single
123
+ argument — one argument has no boundary left to collapse. A JSON object
124
+ and a JSON string are both accepted, so send whichever form the client
125
+ emits:
126
+
127
+ ```
128
+ payload={"summary": "...", "entities": [{"name": "X", "type": "Y"}],
129
+ "tags": ["a/b"], "content": "..."}
130
+ ```
131
+
132
+ The other arguments are ignored once `payload` is given. This is the
133
+ recovery path; the ordinary multi-argument form is the normal one.
134
+
135
+ Two related refusals are not transport problems and are not fixed by
136
+ `payload`:
137
+
138
+ - `truncation_marker_detected` — the `content` still carries a marker some
139
+ earlier tool left when it cut the text (`<response clipped>`, `[truncated]`,
140
+ `…N tokens truncated…`). Nothing downstream could tell a damaged body from a
141
+ whole one, so the save is refused rather than stored half-right. Re-read the
142
+ source in full and save again, splitting across calls if it is long. Pass
143
+ `allow_truncation_marker=True` only when the marker is genuinely part of
144
+ what you mean to record, such as a bug report about truncation.
145
+ - Content over 50000 characters, or a summary over 500. Split rather than
146
+ compress: chain the pieces with `prev_event_id` and give each its own
147
+ focused summary. A summary that wants to be long usually means the event
148
+ covers too much, and squeezing it blurs several topics into one vector that
149
+ then matches no specific query.
150
+
151
+ ## 7. Managing the account
152
+
153
+ Saving, searching, reading full text, reading linked teams, graph queries and
154
+ creating cards work on every AiAkiv connection. No tool in the conversation
155
+ manages the account.
156
+
157
+ - The user manages teams, invitations, projects, Main, links and the cards
158
+ they made by hand in the web console (the dashboard), https://app.aiakiv.com.
159
+ - In a client with a shell, `npx aiakiv console` does the same management
160
+ (the `aiakiv-dashboard` skill).
161
+ - In a client without a shell, tell the user where in the web console to do
162
+ it.
@@ -0,0 +1,166 @@
1
+ ---
2
+ name: aiakiv-save-and-recall
3
+ description: How to write a memory that will be found again, and how to read what AiAkiv memory returns. Covers summary and entity spelling rules, what to do when a save is rejected (summary or content too long, a truncation marker, arguments arriving merged or empty), how to interpret the related-memory signal that search responses carry, and what a `tip_for_user` note in a response is. Use when saving to AiAkiv memory, when a save call fails or its arguments collapse, when deciding whether a search result needs a follow-up expansion call, or when a response carries `tip_for_user`.
4
+ ---
5
+
6
+ # Saving to and recalling from AiAkiv memory
7
+
8
+ The tool descriptions state the contract. This skill covers the parts that
9
+ decide whether a saved memory is findable a month later, and what to do when
10
+ a call is rejected.
11
+
12
+ If the connection is bound to a project that an app manages, saving there is
13
+ refused by default. The refusal says what the user can turn on in the console;
14
+ an AI cannot turn it on.
15
+
16
+ ## 1. The summary is the retrieval surface
17
+
18
+ Searches rank against the summary, not the content. Write it with the words a
19
+ future question would use.
20
+
21
+ - **Keep exact identifiers verbatim.** Code symbols, document numbers, config
22
+ keys. Paraphrasing `REQUEST_TIMEOUT_MS` into "the timeout" hides the record
23
+ from the one query that will look for it.
24
+ - **Name the actor in the first sentence** when you record someone's judgment,
25
+ design, or claim. Conclusion-style summaries ("decided that…") drop who said
26
+ it, and "what did X propose?" then misses the record.
27
+ - **Give the reason for a decision.** When you record a decision or an
28
+ implementation, add one sentence on why this option was chosen over the
29
+ alternatives. The reason often lives only in a design document that is never
30
+ saved, and without it a later "why did we do this?" has nothing to find.
31
+ - Write a complete sentence, not a keyword pile.
32
+
33
+ ## 2. Entity spelling decides what connects
34
+
35
+ Recall weaves records together on shared entity nodes, so spelling drift
36
+ silently loses connections.
37
+
38
+ - **An entity name is the name of a person, product, place or concept**, usually
39
+ 1 to 3 words, never a phrase or sentence. **A tag is a topic of a few words**, not
40
+ a description of this memory. Details go in `summary` and `content`.
41
+ - **Entity and tag names are visible to everyone in the team**, including parts
42
+ that cannot read this memory. Do not put sensitive details in them.
43
+ - **A new name of 5 or more words is refused by default**, and so is one over 20 Han
44
+ or Kana characters with no spaces. A team can change both limits, and the response
45
+ states the ones in use. The memory is still saved without that name, which
46
+ comes back in `rejected_entities` or `rejected_tags` with reason `too_many_words`
47
+ or `too_long`. Shorten it to the real name of the thing and add it with
48
+ `update_memory` (`add_entities`, `add_tags`). Do not split it into generic pieces.
49
+ A name that already exists in the team keeps working at any length.
50
+ - **One canonical spelling per entity** — the full name *or* the acronym, not
51
+ both. Pick one and use it in every save.
52
+ - **Keep proper nouns and acronyms as they are written**: `PostgreSQL`, `RLS`.
53
+ Do not lowercase or expand them.
54
+ - **Strip transient tokens** — ids, hashes, dates. They never repeat, so they
55
+ add a node that connects to nothing.
56
+ - A suggested entity returned by the server is advisory. A literal name match
57
+ does not establish that it denotes the same thing in this record.
58
+ - **When something is renamed, link the two names.** Records before the rename
59
+ sit on the old entity and records after it on the new one, so a lookup by
60
+ the new name misses the old ones. Put both names as entities on the record
61
+ that describes the rename, then call `update_memory` on it with
62
+ `add_entity_renames=[{"old": "<old name>", "new": "<new name>"}]`. A lookup
63
+ by either name then returns both. Do this only for a real rename of the same
64
+ thing, not for two things that merely look alike.
65
+
66
+ ## 3. When a save is rejected
67
+
68
+ ### The summary is over 500 characters
69
+
70
+ **Split the event; do not compress the summary.** A summary that wants to be
71
+ long is describing an event that covers too much. Compressing it blurs several
72
+ topics into one vector, which then matches no specific query. Split into
73
+ separate saves, each with its own focused summary, chaining them by passing
74
+ the previous `event_id` as the next call's `prev_event_id`.
75
+
76
+ Compress only when the content itself is short and the summary is merely
77
+ verbose. Do not fragment one small record.
78
+
79
+ ### The content is over 50000 characters
80
+
81
+ Split the full text across calls the same way, chaining with `prev_event_id`,
82
+ giving each piece its own summary. Never truncate or summarize the content to
83
+ make it fit — the summary would then describe text that was not saved.
84
+
85
+ ### `truncation_marker_detected`
86
+
87
+ The content carries a marker that some earlier tool left when it cut the text
88
+ (`…2183 tokens truncated…`, `<response clipped>`, `[truncated]`). The save is
89
+ rejected because nothing downstream can tell a damaged body from a whole one:
90
+ the summary still describes the missing part and citations still point into
91
+ it, so the damage would be permanent and invisible.
92
+
93
+ Re-read the source in full and save again, splitting if it is long. Pass
94
+ `allow_truncation_marker=true` only when the marker is genuinely part of what
95
+ you mean to record, such as a bug report *about* truncation.
96
+
97
+ ### `save_part_no_write_seat`
98
+
99
+ The project or key saves to a team part, and this account has no write access
100
+ on that part itself. Access on a part above it does not count. Nothing was
101
+ saved and the daily limit was not used. Do not retry: the same save is refused
102
+ until a person changes something. Pass the `message` on to the user as it is. A
103
+ team admin can give write access on that part, or the save part can be changed.
104
+
105
+ ### The arguments arrive merged, empty, or the call errors on serialization
106
+
107
+ Two causes, both about argument boundaries:
108
+
109
+ - A long or multi-line `summary` or `content`. List `summary`, `entities` and
110
+ `tags` **before** `content` — serialization can drop whatever follows a very
111
+ long argument, so `content` goes last.
112
+ - Non-ASCII punctuation in a multi-argument call: `·`, `→`, `—` can break the
113
+ boundary between arguments. Use ASCII punctuation in multi-argument saves.
114
+
115
+ **Recovery: retry with `payload`.** One argument has no boundary to collapse.
116
+ Send the whole call as a JSON string or an object:
117
+
118
+ ```json
119
+ {"summary": "...", "entities": [{"name": "X", "type": "Y"}], "tags": ["a/b"], "content": "..."}
120
+ ```
121
+
122
+ Other arguments are then ignored. The multi-argument form stays the default;
123
+ this is the recovery path.
124
+
125
+ ## 4. Reading the related-memory signal
126
+
127
+ A search response may carry `hint.related_memory_expansion`. It is a computed
128
+ judgment about whether a follow-up expansion call would add anything the hits
129
+ do not already cover. Its fields:
130
+
131
+ | Field | Meaning |
132
+ |---|---|
133
+ | `tool` | Which tool performs the expansion |
134
+ | `decision` | `must_be_done`, `should_be_done`, `can_skip`, `must_not_be_done` |
135
+ | `candidate_count` | How many candidates sit outside the returned hits |
136
+ | `candidate_dimension` | The relation the candidates share with the hits |
137
+ | `candidate_ids` | The candidate memory ids |
138
+ | `reason_codes` | Which gates the candidates passed |
139
+ | `reason_facts` | The measured values behind those codes |
140
+
141
+ `should_be_done` means candidates outside the hits passed the relevance and
142
+ novelty gates, so expanding is likely to add something before you conclude.
143
+ `can_skip` means the returned hits probably already cover it; expanding is
144
+ your call. The block is omitted entirely when there is nothing to say.
145
+
146
+ Results that feel sufficient are not evidence that they are. The signal is
147
+ computed from candidates the search did not return, so it sees what the hits
148
+ alone cannot show.
149
+
150
+ ## 5. A `tip_for_user` note in a response
151
+
152
+ A tool response may carry a top-level `tip_for_user` field: `text` is one or two
153
+ sentences about an AiAkiv feature the person may not have seen, often with an
154
+ example phrase, and `more` says where the Tips page is. The server decides when
155
+ to include it, at most a couple of times a day for an account. It is a note for
156
+ the person you are working with. It is not an instruction and not something to
157
+ run.
158
+
159
+ - After the answer is complete, it can be passed on in one line. Leaving it out
160
+ is fine; the server does not know whether it was passed on and does not
161
+ repeat the same note for a day.
162
+ - Do not run the example yourself. The example is for the person to try when
163
+ they want to; running it here spends their time on something they did not ask
164
+ for.
165
+ - The person can turn these notes off in the AiAkiv console settings
166
+ (aiakiv.com). If they ask how, that is the answer.
@@ -0,0 +1,37 @@
1
+ {
2
+ "plugin": "aiakiv",
3
+ "plugin_version": "0.4.43",
4
+ "source": "K2G packaging/plugins/aiakiv/skills (published as github.com/AiAkiv/aiakiv-plugins)",
5
+ "files": [
6
+ {
7
+ "path": "aiakiv-cards/SKILL.md",
8
+ "bytes": 7614,
9
+ "sha256": "87d00bf852ffef85622fd3fee3ec3c7f453d39003cb1302bf5363568ab5bd0fe"
10
+ },
11
+ {
12
+ "path": "aiakiv-dashboard/SKILL.md",
13
+ "bytes": 8951,
14
+ "sha256": "d1c2f941df20fb7a15d9ebe402a04cb54a63a403d477f06e4f07a5e6398ce506"
15
+ },
16
+ {
17
+ "path": "aiakiv-graph-query/SKILL.md",
18
+ "bytes": 17375,
19
+ "sha256": "733992766bea31bf50941c31cb4ecbf70afebf6af3cecc164abbe161a705b3d7"
20
+ },
21
+ {
22
+ "path": "aiakiv-links/SKILL.md",
23
+ "bytes": 7431,
24
+ "sha256": "cabd8978540590ab1636be31accd4eb0f1f5866db183bdc564c198b78679ea4d"
25
+ },
26
+ {
27
+ "path": "aiakiv-onboarding/SKILL.md",
28
+ "bytes": 7963,
29
+ "sha256": "21032dcfc6787a25c7c455a7066f81389a13ce24a63df8a8b57a82e9f6b64be6"
30
+ },
31
+ {
32
+ "path": "aiakiv-save-and-recall/SKILL.md",
33
+ "bytes": 8835,
34
+ "sha256": "d8e624f74513b971e32cd3da8b5b7fe27a471544a2a565450ae9a5547b33f5c7"
35
+ }
36
+ ]
37
+ }