whodar

command module
v0.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 23, 2026 License: AGPL-3.0 Imports: 3 Imported by: 0

README

whodar - know who knows

whodar

Know who knows.

CI Latest release License

Someone at your company already knows the answer. whodar tells you who. Point it at the tools your org already uses, ask in plain words, and get the people to talk to and the channels to ask in, each with the reason and confidence behind it. Local by default, with or without an LLM.

See it

Ask from the terminal and get people, channels, reasons, and confidence:

whodar in the terminal

Or serve the local web UI, where every result carries a confidence badge and feedback buttons, a query lives in the URL so answers are shareable, clicking a person shows everything whodar knows about them, and a sidebar browses the whole graph: people, channels, teams, and topics:

whodar web UI

Install

brew install dcadolph/whodar/whodar

Or go install github.com/dcadolph/whodar@latest, or grab a prebuilt binary from the releases page.

Quickstart

No data yet? Explore a simulated company across all eight sources, no credentials needed:

whodar demo

Then index something real:

whodar index --source org-csv --file examples/people.csv
whodar ask --pretty "who do I talk to about billing retries"

Then wire in the rest of your tools. The guided way is whodar connect, a wizard that explains each source, reads the token without echoing it, validates it, and runs the first index:

whodar connect

Prefer copy-paste? Every source has a recipe in docs/CONNECT.md, with the exact credential to create, the command to run, and how to verify it worked: slack, github, jira, confluence, pagerduty, git, and codeowners.

How it works

Piece What it does
Sources Eight pluggable connectors feed one graph of people, teams, topics, and channels. Adding a source is one small interface.
Identity One human stays one node: sources join by email, and an alias file joins handle-only identifiers like a GitHub login.
Ranking Owners beat chatterboxes: repetition saturates while explicit signals stay strong. Recency counts, every answer carries a confidence, and results explain which words hit where.
Feedback Confirm or correct a result and future rankings move, without burying the evidence.
Modes Keyword needs no model and always works; semantic and LLM answers run on local Ollama, or on Claude, Gemini, and OpenAI behind explicit opt-in.
Frontends The CLI, web UI, Slack bot, and an MCP server for agents like Claude Code all share one engine.

Data governance

Indexed work data is sensitive, so whodar controls what a model can see. The default policy is strict: answers are computed locally and nothing is sent to any model beyond this machine. The redacted policy admits only the known cloud providers (Claude, Gemini, OpenAI) and sends them your question plus numbered candidates, meaning title, team, and matched query terms, never names, emails, channel names, or message text. The open policy sends full candidate detail anywhere you point it. Indexing talks only to the sources you name, with your own tokens, and the index on disk is readable only by your user. Serving the web UI beyond localhost requires a bearer token on every request. An organization can pin the policy with a locked file that user flags and environment variables cannot override.

Docs

License

Licensed under the GNU Affero General Public License v3.0. See LICENSE. Copyright 2026 dcadolph.

Documentation

Overview

Command whodar locates the right person or channel for a question.

It indexes people, teams, and topics from work sources, then answers "who do I talk to about X" in plain language. Two engines back it: a non-LLM keyword ranker and an optional local LLM. Indexed data stays on the machine unless an explicit egress policy permits otherwise.

Directories

Path Synopsis
Package cmd implements the whodar command-line interface.
Package cmd implements the whodar command-line interface.
internal
bot
Package bot answers whodar questions from Slack.
Package bot answers whodar questions from Slack.
confluence
Package confluence is a minimal Confluence Cloud client scoped to what whodar ingests: pages and the people who wrote them.
Package confluence is a minimal Confluence Cloud client scoped to what whodar ingests: pages and the people who wrote them.
connector
Package connector pulls raw records from work sources and normalizes them into records the indexer merges into the expertise graph.
Package connector pulls raw records from work sources and normalizes them into records the indexer merges into the expertise graph.
feedback
Package feedback stores user votes on answers so confirmed answers rise and corrected ones sink in future rankings.
Package feedback stores user votes on answers so confirmed answers rise and corrected ones sink in future rankings.
github
Package github is a minimal GitHub REST client scoped to what whodar ingests: repositories, contributors, pull requests, CODEOWNERS, and users.
Package github is a minimal GitHub REST client scoped to what whodar ingests: repositories, contributors, pull requests, CODEOWNERS, and users.
httputil
Package httputil holds the shared request loop for whodar's API clients: bounded rate-limit retries, a size-limited body read, and Retry-After parsing.
Package httputil holds the shared request loop for whodar's API clients: bounded rate-limit retries, a size-limited body read, and Retry-After parsing.
identity
Package identity resolves the many identifiers a person accumulates across sources (email, GitHub login, Jira account id) to one canonical identifier, so one human stays one node in the graph.
Package identity resolves the many identifiers a person accumulates across sources (email, GitHub login, Jira account id) to one canonical identifier, so one human stays one node in the graph.
index
Package index builds an on-disk, searchable map of expertise from connector records and ranks people and channels for a query without an LLM.
Package index builds an on-disk, searchable map of expertise from connector records and ranks people and channels for a query without an LLM.
jira
Package jira is a minimal Jira Cloud client scoped to what whodar ingests: issues and the people on them.
Package jira is a minimal Jira Cloud client scoped to what whodar ingests: issues and the people on them.
keyring
Package keyring resolves whodar's at-rest encryption key from the environment and builds the file codec.
Package keyring resolves whodar's at-rest encryption key from the environment and builds the file codec.
llm
Package llm provides local large language model clients.
Package llm provides local large language model clients.
mcp
Package mcp serves whodar over the Model Context Protocol, so agent clients such as Claude Code and Claude Desktop can ask who knows what mid-conversation.
Package mcp serves whodar over the Model Context Protocol, so agent clients such as Claude Code and Claude Desktop can ask who knows what mid-conversation.
model
Package model defines the normalized expertise graph: the people, teams, orgs, and topics that whodar indexes and ranks.
Package model defines the normalized expertise graph: the people, teams, orgs, and topics that whodar indexes and ranks.
pagerduty
Package pagerduty is a minimal PagerDuty client scoped to what whodar ingests: services and who is on call for them.
Package pagerduty is a minimal PagerDuty client scoped to what whodar ingests: services and who is on call for them.
policy
Package policy decides what whodar may send to model providers.
Package policy decides what whodar may send to model providers.
prompt
Package prompt renders whodar's interactive setup wizard: brew-style step headers plus the line, secret, confirm, and menu reads the connect command drives.
Package prompt renders whodar's interactive setup wizard: brew-style step headers plus the line, secret, confirm, and menu reads the connect command drives.
resolve
Package resolve answers queries against an index through swappable resolvers.
Package resolve answers queries against an index through swappable resolvers.
simorg
Package simorg simulates a small company across every source whodar reads, serving each tool's wire format from in-process HTTP servers.
Package simorg simulates a small company across every source whodar reads, serving each tool's wire format from in-process HTTP servers.
slack
Package slack is a minimal Slack Web API client scoped to what whodar needs to ingest: workspace users, channels, and message history.
Package slack is a minimal Slack Web API client scoped to what whodar needs to ingest: workspace users, channels, and message history.
util
Package util holds small helpers shared across whodar's packages.
Package util holds small helpers shared across whodar's packages.
vault
Package vault encrypts whodar's on-disk index at rest.
Package vault encrypts whodar's on-disk index at rest.
web
Package web serves the whodar web UI: a search page and a JSON ask API over the same engine the CLI uses.
Package web serves the whodar web UI: a search page and a JSON ask API over the same engine the CLI uses.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL