Getting Started¶
Collect a week of Claude Code activity and persist it to the local store:
package main
import (
"context"
"fmt"
"time"
omnidevx "github.com/plexusone/omnidevx-core"
"github.com/plexusone/omnidevx-core/providers/claudecode"
"github.com/plexusone/omnidevx-core/store"
)
func main() {
ctx := context.Background()
collector, err := claudecode.New(claudecode.Options{})
if err != nil {
panic(err)
}
result, err := collector.Collect(ctx, omnidevx.CollectRequest{
Period: omnidevx.Period{
Start: time.Now().AddDate(0, 0, -7),
},
Subject: omnidevx.SubjectRef{PersonID: "person:jane"},
})
if err != nil {
panic(err)
}
fmt.Printf("collected %d events (%d diagnostics)\n",
len(result.Events), len(result.Diagnostics))
s, err := store.Open(store.Options{}) // ~/.plexusone/omnidevx/data
if err != nil {
panic(err)
}
written, err := s.Write(ctx, result.Events)
if err != nil {
panic(err)
}
fmt.Printf("stored %d new, %d duplicates\n",
written.Written, written.Duplicates)
}
Re-running is safe: deterministic event IDs make writes idempotent.
Read events back for analysis:
read, err := s.Read(ctx, store.Query{
Period: omnidevx.Period{Start: weekStart, End: weekEnd},
Product: "claude-code", // optional source filter
})
Build a period report from what you read back:
import "github.com/plexusone/omnidevx-core/report"
r := report.Build(read.Events, report.Subject{PersonID: "person:jane"}, omnidevx.Period{
Start: weekStart, End: weekEnd,
})
fmt.Printf("%d sessions, %d commits, coverage %.0f%%\n",
int(r.Metrics.Combined["sessions"].Value),
int(r.Metrics.Combined["commits"].Value),
r.Quality.CoverageScore*100)
See Period Reports for the combined-vs-bySource
rules, and Identity for resolving multiple
accounts to one personId before passing it as Subject.
For multi-collector composition (Claude Code + Codex + git + GitHub) see
the batteries-included omnidevx
module and its Engine.