Repository navigation
A team can now share what it learned with another team: one team exports some of its own checked lessons as a pack file, and another team loads that pack from a folder it checked out itself. Nothing is downloaded or sent anywhere by agenttalk. Pack lessons can also carry the date they were last confirmed, so old advice no longer looks new. The release also adds two roadmap sections on research into AI that improves itself (documentation only).
After upgrading, preview the skill update with agenttalk install-skills --dry-run --force, back up any local edits you want to keep, then run agenttalk install-skills --force. The plain command keeps files that differ, so it cannot refresh changed skills. To use a pack from another team, read the pack file first and take out anything confidential, then run agenttalk knowledge pack load <name> --from <folder>.
Added
-
A team can now share lessons with another team as a lesson pack, and load another team's pack
from a folder. Until now a new store could start only with the lessons that ship with agenttalk.
What one team learned stayed in that team's store, and there was no way to hand it over.What you will notice:
agenttalk knowledge pack export --name <name> --out <folder>(with--key
once per lesson, or--tag) writes some of your team's own verified lessons as a pack file, ready
for a person to read before it is shared. Next to it, it writes a provenance file that links each
lesson back to your store; that file stays with your team. Lessons that are not verified, are
retracted, are replaced by a newer lesson or came from a pack are never exported. The export never
publishes, commits or pushes anything, and it refuses to overwrite a different pack of the same name
unless you add--force.
agenttalk knowledge pack load <name> --from <folder>loads such a pack from a folder you checked
out yourself. agenttalk never downloads anything and reads only the lesson files, never roles,
prompts or brief templates. The rules of the shipped packs apply: your team always wins, loading
the same pack again writes nothing, andunloadtakes it back. Outside packs have their own key
prefix and tag, so they can never mix with a shipped pack, and a name that a shipped pack uses is
refused.knowledge pack listshows where each outside pack came from. Before this, a lesson
pack's review and expiry dates always counted from the day it was loaded, so old advice looked new.
Now a pack line may say when the lesson was last confirmed, and the dates count from then. A pack
with a bad line is refused as a whole, the message names the line, and nothing is written.What you need to do: nothing. Read an exported pack, and take out anything confidential, before you
share it.Technical details:
knowledge_pack.pygainsread_pack(name, folder=...),load(..., folder=...),
unload(..., outside=...)andexport(...);cli.pygainspack load --from,pack unload --outsideandpack export. An outside pack's id isext.<name>: keyspack.ext.<name>:<slug>,
tagpack-ext.<name>, ledger entryext.<name>. Shipped pack names cannot contain a dot, so the two
namespaces never meet. The ledger entry gainssource(folder,file_sha256,retired_sha256when
there is a retired file, andcommit, read withgit rev-parse --verify HEADwhen the folder is in a
git checkout). The event schema is unchanged. The optional last line fieldconfirmed_at(an ISO
date or date and time, not in the future) setsreview_afterandexpires_atto 365 and 730 days
after it, and a newerconfirmed_atcounts as a change on reload. The line reader now also refuses a
key or tag with the reservedpack.orpack-prefix, a line that is not UTF-8 or holds an unpaired
surrogate, and a<name>.retired.jsonthat retires a slug the pack still carries, and names the line
for every refusal. Records end only at a newline (_physical_lines), never at U+0085, U+2028 or
U+2029, which the export writes unescaped (_dump_line, shared by the export's checks and its writer).
Before writing, the export reads its own bytes back the way the loader does, and it refuses when the
folder's retirement file is malformed or retires an exported slug; it never changes that file. Export
keeps each lesson's(domain, key)identity: a bare--keyheld by several domains is refused with
the candidates listed, and--key <domain>/<key>names one. Ownership is read from content provenance
(curated_origin), never from the key's spelling, so a team lesson keyed likepack.<x>:<y>exports.
Supersession follows the store, which applies asupersedeskey in every domain. The report carries
provenance_changednext tounchanged, and an existing non-UTF-8 pack or provenance file is
refused with its path. Export slugs are the key in lower case with each run of other characters
turned into one dash (cut to 60 characters with an 8-character hash ending); two lessons that would
share a slug refuse the export. Tests:
tests/test_knowledge_pack_outside.py. Docs:docs/USER-MANUAL.md(Share lessons with another
team) anddocs/playbook/learning.md(L5).