Skip to content
maxlandon edited this page Jul 18, 2026 · 2 revisions

reeflective/team Wiki

Transform any Go program into a client of itself, remotely or locally. Manage teamservers and clients with code, with their CLI, or both.

reeflective/team is the infrastructure that turns a Go program into a teamserver (serving its functionality to a team of operators) and a teamclient (consuming it) — whether both run in the same process or the client connects to a remote instance over the network. You keep writing your tool; the library handles collaboration, identity, transport wiring, logging and configuration.

The library is deliberately authentication + PKI + identity only. It proves who is calling (certificate-based users, per-user tokens, mutual TLS) and hands that identity to you. It does not carry, store, or interpret any permission/role model — authorization stays in your application. See Introduction & Concepts.


Navigation

Start here (everyone)

For users & operators

  • Users & Authentication — create/delete users, hand out configs, import/export CAs, the PKI and mutual-TLS model.
  • CLI Reference — every command and flag in the teamserver and teamclient trees.
  • Common Workflows — admin bring-up, operator onboarding, daemon + systemd deployment.
  • Configuration — server/client config files, directories, database backends, ports, the full options reference.

For developers & integrators

  • Architecture — package layout, the core/transport split, data flow.
  • Server API — the server package surface.
  • Client API — the client package surface.
  • Writing a Transport — implement the Handler (server) and Dialer (client) interfaces to bring your own transport; annotated gRPC example.
  • Logging — the log package: restyle the console, inject your own slog.Handler, pick a format, wire the audit log.
  • Testing & In-Memory Use — run the core fully in memory for tests and embedding.

The two-calls teamserver

// Build a teamserver core and graft its command tree under your app's root command.
teamserver, _ := server.New("myapp")
rootCmd.AddCommand(commands.Generate(teamserver, teamserver.Self()))
rootCmd.Execute() // now: `myapp teamserver ...`

That already gives you a pure-Go sqlite database, file + console logging, a full mTLS PKI, user management, and shell completion. Add a transport (server.WithHandler(...)) to serve remote clients — see Getting Started and Writing a Transport.


Audience labels

Pages are tagged so you can skip what you don't need:

Tag Meaning
[User] For operators/admins driving a team tool through its CLI.
[Dev] For developers embedding and extending the library in Go.
[User+Dev] Relevant to both.

External references

Clone this wiki locally