hecatoncheires

command module
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Jul 28, 2026 License: Apache-2.0 Imports: 3 Imported by: 0

README

Hecatoncheires

An AI-native, customizable project/case management platform with Slack integration.

Overview

Hecatoncheires is a flexible project and case management system that adapts to your workflow through configuration files. Define custom fields, integrate with Slack, and leverage AI for knowledge extraction and analysis.

Key Features

  • Customizable Fields: Define project-specific fields via TOML configuration
  • AI-Powered: Automatic knowledge extraction from various sources (Notion, Slack, etc.)
  • Slack Integration: Native Slack channel and message integration
  • GraphQL API: Type-safe, flexible API for frontend and integrations
  • Field Types: Support for text, numbers, dates, URLs, user references, and select fields with metadata

Quick Start

The fastest way to try Hecatoncheires locally (in-memory backend, no auth) is in docs/getting_started.md. In short:

  1. Create a config.toml file with your field definitions (see Configuration and examples/config.toml)
  2. Run the server with the memory backend:
    go run . serve --repository-backend=memory --config=config.toml --no-auth=U000000000 --addr=:8080
    
  3. Access the web UI at http://localhost:8080

For a production deployment (Firestore, Cloud Storage, LLM provider, Slack credentials), see docs/deployment.md.

Documentation

Full documentation lives in docs/, organized by audience.

Document Description
Documentation index Reading paths by audience
Concepts Core concepts and glossary
Getting Started Run locally in minutes
Deployment Production deployment overview
Configuration config.toml complete reference
CLI Reference Subcommands, flags, and environment variables
Eval Harness Offline scenario-based evaluation of LLM workflows
Slack Integration Slack App setup (OAuth, Events, Interactivity, Slash)
Integrations Notion and GitHub
User Guide End-user Slack workflows
Operations Observability, runbook, backup
Developing Architecture and contributor guide

Development

Prerequisites
  • Go 1.21+
  • Node.js 22.22+ (for frontend; required by react-router v8)
  • Corepack-managed pnpm (see below; the version is pinned via the packageManager field in frontend/package.json)
  • Google Cloud Firestore
pnpm via Corepack

This repo pins the pnpm version in frontend/package.json (packageManager field). Enable Corepack once on your machine and it will automatically install the right pnpm:

corepack enable

Do NOT install pnpm globally with npm install -g pnpm — that bypasses the pin and is the most common cause of the lockfile being unexpectedly rewritten when you run e2e or build commands.

If you intentionally want to update dependencies, run pnpm install inside frontend/ on its own and commit the resulting pnpm-lock.yaml change. Day-to-day commands (build, e2e, etc.) use --frozen-lockfile and will fail fast if the lockfile is out of sync rather than silently rewriting it.

Building
task build           # Build complete application (frontend + backend)
task graphql         # Generate GraphQL code from schema
task dev:frontend    # Run frontend development server
Testing
Unit Tests

Run Go unit tests:

go test ./...
E2E Tests

Hecatoncheires includes end-to-end tests using Playwright to verify the complete application workflow.

Prerequisites:

  • Node.js 22.22+ and pnpm
  • The backend server must be running with --repository-backend=memory for testing

Run E2E tests:

# Install dependencies (only when you want to update them)
cd frontend
pnpm install
pnpm run test:e2e

# Or use the task command from the project root. This runner installs with
# --frozen-lockfile and will refuse to silently rewrite pnpm-lock.yaml.
task test:e2e

Other E2E test commands:

# Run tests with UI mode (interactive)
task test:e2e:ui

# Run tests in headed mode (show browser)
task test:e2e:headed

# Run tests in debug mode
task test:e2e:debug

# Show test report
task test:e2e:report

Manual E2E test setup:

If you want to run tests manually with a running server:

  1. Start the backend server in memory mode:

    go run . serve \
      --repository-backend=memory \
      --config=frontend/e2e/fixtures/config.test.toml \
      --no-auth=U000000000 \
      --addr=:8080
    
  2. In another terminal, run the E2E tests:

    cd frontend
    BASE_URL=http://localhost:8080 pnpm run test:e2e
    

CI/CD Integration:

E2E tests run automatically on pull requests via GitHub Actions. Test results and screenshots are uploaded as artifacts when tests fail.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
pkg
adapter/policy
Package policy adapts the opaq Rego engine to the interfaces.PolicyClient port.
Package policy adapts the opaq Rego engine to the interfaces.PolicyClient port.
agent/interaction
Package interaction defines a host-neutral port for soliciting input from a human user in the middle of an agent run.
Package interaction defines a host-neutral port for soliciting input from a human user in the middle of an agent run.
agent/runtrace
Package runtrace persists a case-scoped agent run as JobRunLog + JobRunEvent records so the case agent page can list it and show its per-call timeline.
Package runtrace persists a case-scoped agent run as JobRunLog + JobRunEvent records so the case agent page can list it and show its per-call timeline.
agent/tool/actionwriter
Package actionwriter exposes the action-mutation gollem tools available to event-driven Agent Jobs.
Package actionwriter exposes the action-mutation gollem tools available to event-driven Agent Jobs.
agent/tool/casemulti
Package casemulti exposes a cross-case ("workspace-scoped") gollem tool set for agent turns that operate across many Cases in one workspace, rather than a single Case pinned at construction time (contrast pkg/agent/tool/casewriter and pkg/agent/tool/core, both of which are built with one fixed CaseID and never take a case identifier at call time).
Package casemulti exposes a cross-case ("workspace-scoped") gollem tool set for agent turns that operate across many Cases in one workspace, rather than a single Case pinned at construction time (contrast pkg/agent/tool/casewriter and pkg/agent/tool/core, both of which are built with one fixed CaseID and never take a case identifier at call time).
agent/tool/casewriter
Package casewriter exposes the case-mutation gollem tools available to event-driven Agent Jobs and the case-bound mention agent.
Package casewriter exposes the case-mutation gollem tools available to event-driven Agent Jobs and the case-bound mention agent.
agent/tool/core
Package core contains gollem tools that operate on the case's domain state — currently actions.
Package core contains gollem tools that operate on the case's domain state — currently actions.
agent/tool/github
Package github provides a GitHub App-authenticated client and a set of gollem agent tools (search, get_issue, get_pull_request, get_file, list_commits) that the AI agent can call against GitHub.
Package github provides a GitHub App-authenticated client and a set of gollem agent tools (search, get_issue, get_pull_request, get_file, list_commits) that the AI agent can call against GitHub.
agent/tool/jira
Package jira adapts a gollem.ToolSet (e.g.
Package jira adapts a gollem.ToolSet (e.g.
agent/tool/knowledge
Package knowledge exposes the workspace-wide shared-knowledge gollem tools available to agents.
Package knowledge exposes the workspace-wide shared-knowledge gollem tools available to agents.
agent/tool/memo
Package memo exposes the Case-scoped memo gollem tools available to agents running in a Case context.
Package memo exposes the Case-scoped memo gollem tools available to agents running in a Case context.
agent/tool/notion
Package notiontool contains gollem tools that let the AI agent search Notion pages/databases and retrieve their content as Markdown via the Notion Markdown Content API (Notion-Version 2026-03-11).
Package notiontool contains gollem tools that let the AI agent search Notion pages/databases and retrieve their content as Markdown via the Notion Markdown Content API (Notion-Version 2026-03-11).
agent/tool/slack
Package slacktool contains gollem tools that let the AI agent interact with Slack: workspace-wide message search, bulk message fetch, and posting to a case channel.
Package slacktool contains gollem tools that let the AI agent interact with Slack: workspace-wide message search, bulk message fetch, and posting to a case channel.
agent/tool/slackpost
Package slackpost exposes the Slack-posting gollem tool available to event-driven Agent Jobs.
Package slackpost exposes the Slack-posting gollem tool available to event-driven Agent Jobs.
agent/tool/wsmeta
Package wsmeta exposes read-only tools that report on the WorkspaceRegistry — the registered workspaces, their custom field schemas, and their configured external sources.
Package wsmeta exposes read-only tools that report on the WorkspaceRegistry — the registered workspaces, their custom field schemas, and their configured external sources.
cli
Job runtime wiring shared between `hecatoncheires serve` (which hosts the Case lifecycle publisher) and `hecatoncheires scheduled` (which fires only the time-driven sweep).
Job runtime wiring shared between `hecatoncheires serve` (which hosts the Case lifecycle publisher) and `hecatoncheires scheduled` (which fires only the time-driven sweep).
domain/model/authz
Package authz holds the Rego input/output document shapes used to authenticate and authorize MCP requests, plus the context plumbing that carries per-request HTTP metadata from the controller middleware down to the point where a tool call is evaluated against the policy.
Package authz holds the Rego input/output document shapes used to authenticate and authorize MCP requests, plus the context plumbing that carries per-request HTTP metadata from the controller middleware down to the point where a tool call is evaluated against the policy.
repository/agentarchive
Package agentarchive provides Cloud Storage and in-memory implementations of gollem.HistoryRepository and gollem/trace.Repository for the AgentSession flow.
Package agentarchive provides Cloud Storage and in-memory implementations of gollem.HistoryRepository and gollem/trace.Repository for the AgentSession flow.
service/bqexport
Package bqexport is the BigQuery implementation of export.Sink (an external-system adapter, hence pkg/service).
Package bqexport is the BigQuery implementation of export.Sink (an external-system adapter, hence pkg/service).
usecase/agent
Package agent contains the Slack-independent agent runtime shared by the `casebound` (Case-bound mention) and `draft` (open-mode case draft) modes, and reserved for the future `triage` mode that will run after Case creation.
Package agent contains the Slack-independent agent runtime shared by the `casebound` (Case-bound mention) and `draft` (open-mode case draft) modes, and reserved for the future `triage` mode that will run after Case creation.
usecase/agent/casebound
Package casebound contains the agent runtime for case-bound channels — Slack channels that already have an associated Case.
Package casebound contains the agent runtime for case-bound channels — Slack channels that already have an associated Case.
usecase/agent/job
Package job is the event-driven Agent Job runtime.
Package job is the event-driven Agent Job runtime.
usecase/agent/planexec
Package planexec hosts the reusable plan-and-execute loop shared by the proposal (case-draft) host and the planexec-strategy Job host.
Package planexec hosts the reusable plan-and-execute loop shared by the proposal (case-draft) host and the planexec-strategy Job host.
usecase/agent/proposal
Package draft contains the open-mode (case-draft) agent runtime: a plan/execute loop that coordinates a planner LLM and parallel sub-agent investigations to produce a CaseProposal for the host (Slack) to render.
Package draft contains the open-mode (case-draft) agent runtime: a plan/execute loop that coordinates a planner LLM and parallel sub-agent investigations to produce a CaseProposal for the host (Slack) to render.
usecase/agent/threadcase
Package threadcase hosts the thread-mode agent: a plan-and-execute turn (planexec.Runner) that runs when a Case is created from a monitored channel post (materialize the Case fields) or when the bot is mentioned in a Case thread (investigate and respond / update fields / close).
Package threadcase hosts the thread-mode agent: a plan-and-execute turn (planexec.Runner) that runs when a Case is created from a monitored channel post (materialize the Case fields) or when the bot is mentioned in a Case thread (investigate and respond / update fields / close).
usecase/agent/wsagent
Package wsagent hosts the workspace-channel agent: a plan-and-execute turn (planexec.Runner) that runs when the bot is mentioned in a channel-mode workspace's configured workspace channel ([slack] workspace_channel).
Package wsagent hosts the workspace-channel agent: a plan-and-execute turn (planexec.Runner) that runs when the bot is mentioned in a channel-mode workspace's configured workspace channel ([slack] workspace_channel).
usecase/diagnosis
Package diagnosis hosts data-repair and inspection routines that operate across the persistent state owned by the rest of the application.
Package diagnosis hosts data-repair and inspection routines that operate across the persistent state owned by the rest of the application.
usecase/eval
Package eval is the entry point of the offline eval harness: it loads scenario files, validates them (dry-run), runs each through its workflow driver, judges the produced artifact against the scenario checklist, dumps diagnostics for failing scenarios, and renders the aggregated report.
Package eval is the entry point of the offline eval harness: it loads scenario files, validates them (dry-run), runs each through its workflow driver, judges the produced artifact against the scenario checklist, dumps diagnostics for failing scenarios, and renders the aggregated report.
usecase/eval/driver
Package driver runs a workflow type for one scenario against a prepared env and returns the artifact to judge.
Package driver runs a workflow type for one scenario against a prepared env and returns the artifact to judge.
usecase/eval/env
Package env builds the in-memory environment a scenario runs against: a memory repository (seeded with the scenario's prior cases), in-memory history and trace repositories, the system-under-test wired via usecase.New, a recording fake Slack service, and per-tool clients that are either simulated (ToolSimulator) or live (recorded).
Package env builds the in-memory environment a scenario runs against: a memory repository (seeded with the scenario's prior cases), in-memory history and trace repositories, the system-under-test wired via usecase.New, a recording fake Slack service, and per-tool clients that are either simulated (ToolSimulator) or live (recorded).
usecase/eval/evaltype
Package evaltype holds the shared value types and small interfaces of the eval harness.
Package evaltype holds the shared value types and small interfaces of the eval harness.
usecase/eval/judge
Package judge evaluates a produced artifact against a scenario's checklist.
Package judge evaluates a produced artifact against a scenario's checklist.
usecase/eval/llmrun
Package llmrun provides the gollem-backed implementation of evaltype.Completer.
Package llmrun provides the gollem-backed implementation of evaltype.Completer.
usecase/eval/report
Package report aggregates scenario results and renders them: a human-readable stdout summary, a machine-readable JSON file, and per-scenario diagnostic dumps (see dump.go).
Package report aggregates scenario results and renders them: a human-readable stdout summary, a machine-readable JSON file, and per-scenario diagnostic dumps (see dump.go).
usecase/eval/scenario
Package scenario defines the TOML schema for eval scenarios and loads / validates them.
Package scenario defines the TOML schema for eval scenarios and loads / validates them.
usecase/eval/toolsim
Package toolsim provides simulated implementations of the agent's tool client interfaces.
Package toolsim provides simulated implementations of the agent's tool client interfaces.
usecase/eval/usersim
Package usersim implements evaltype.Simulator: a simulated end-user that answers the agent's clarification questions, drawing on the scenario persona (who they are + what they know).
Package usersim implements evaltype.Simulator: a simulated end-user that answers the agent's clarification questions, drawing on the scenario persona (who they are + what they know).
usecase/export
Package export implements the `export` subcommand's core: reading the current state of every configured workspace out of the repository and writing it, one table per entity, to a pluggable Sink (BigQuery today).
Package export implements the `export` subcommand's core: reading the current state of every configured workspace out of the repository and writing it, one table per entity, to a pluggable Sink (BigQuery today).
usecase/job
Package job hosts the event-driven Agent Job lifecycle: a usecase that publishes Events, matches them to workspace Jobs, and dispatches the Job runtime in a background goroutine.
Package job hosts the event-driven Agent Job lifecycle: a usecase that publishes Events, matches them to workspace Jobs, and dispatches the Job runtime in a background goroutine.
utils/errutil
Package errutil owns the project's non-fatal error reporting path.
Package errutil owns the project's non-fatal error reporting path.
utils/slackid
Package slackid normalises Slack user identifiers across the codebase.
Package slackid normalises Slack user identifiers across the codebase.
utils/uierr
Package uierr carries user-facing error classification on a goerr error and renders it into the fixed 3-part Slack message every failure surfaces:
Package uierr carries user-facing error classification on a goerr error and renders it into the fixed 3-part Slack message every failure surfaces:

Jump to

Keyboard shortcuts

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