Promote, don’t pool. Joining a team never exposes your private context. Your
tools keep saving to your personal store; an entry only reaches the team when
you explicitly promote it.
Create a team and invite your teammates
In the OneLamp app, use the team switcher in the sidebar:- Create team — name it; you become its owner. “Personal” stays the default context until you switch.
- Settings → Invite by email — invite teammates as
memberoradmin. They get an email link that drops them straight into the team. - Switch the active context any time between Personal and any team you belong to.
Promote a learning
Promotion is the one place a personal learning crosses into the shared store. It is always explicit — there is no automatic copy. Promotion is a web action in the OneLamp app’s Teams UI — there is no chat tool for it. On the Library page, use Promote to <team> on any row (find the entry the way your tools do, viaget_context / list_context) — or
bulk-promote a whole filtered set. Categories like Projects / Work / People
are nudged as team-worthy; Preferences / Style stay personal by default.
What happens on promote:
- Secrets are redacted at the boundary — API keys, tokens, and
.env-style values are scrubbed before the learning reaches the team. - You’re recorded as the contributor. If two teammates promote the same (or a similar) learning, it dedupes to one entry and credits both.
- It enters the trust gate (below) — live immediately, but
unverifieduntil a teammate independently corroborates it, and never silently overwriting a conflict.
Trust & corroboration
The same mechanism that makes the good case great — one teammate teaches, everyone’s tools learn — could let one incorrect fix propagate just as fast. So a promoted learning has to earn its standing. Every team entry carries a trust state:| Trust | Means | How it gets there |
|---|---|---|
unverified | one member’s learning, uncorroborated | a lone promotion |
verified | independently corroborated | a 2nd teammate promotes the same or a similar lesson |
contested | a similar entry contradicts it | a promotion lands similar-but-opposite |
contested). A contradiction is
never allowed to silently overwrite the other side — instead both are frozen and
surface in the team’s Needs review list, where an owner/admin keeps one, removes
one, or dismisses the conflict. (This judgment is the one model call on the path, run
at promote time; retrieval stays generation-free.)
Retrieve across scopes
get_context takes an optional scope so a tool can read from your personal
store, a team’s store, or both:
scope | Reads from |
|---|---|
personal | Your own store only |
team | Every team you belong to |
team:<id> | One specific team (must be a member) |
all (default) | Personal + your teams, fused |
scope marker (personal / team:<id>), the
contributed_by member, and its trust — so the tool (and you) can see provenance.
Team results are also trust-weighted: verified learnings rank above
unverified above contested (which is surfaced with a ⚠). By default everything is
returned (so a brand-new team isn’t empty); pass verified_only: true for
high-stakes reads to drop anything not yet corroborated. Your personal context is
always included.
Provenance, governance & privacy
- Who taught what — the team view groups the shared context by contributor and category, so the team can see exactly what each member taught OneLamp.
- Curation — owners and admins can resolve contested pairs (keep one, remove one, or dismiss), prune any team entry (it’s removed for everyone), and export the whole team context as portable JSON. Members can promote and read, but not prune or resolve.
- Privacy invariants — joining a team never exposes your un-promoted entries; promotion is opt-in, redacted, and reversible; the team owns its data, the same way you own yours.
For exact parameters and return shapes, see the
context tools reference.