Repository Analysis

multica-ai/multica

The open-source managed agents platform. Turn coding agents into real teammates — assign tasks, track progress, compound skills.

2.9 Likely human-written View on GitHub
2.9
Adjusted Score
2.9
Raw Score
100%
Time Factor
2026-05-30
Last Push
34,246
Stars
TypeScript
Language
404,741
Lines of Code
1895
Files
784
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 5MEDIUM 169LOW 610

Pattern Findings

784 matches across 8 categories. Click a row to expand file-level details.

Decorative Section Separators164 hits · 519 pts
SeverityFileLineSnippet
MEDIUMdeploy/helm/multica/values.yaml1# -----------------------------------------------------------------------------
MEDIUMdeploy/helm/multica/values.yaml3# -----------------------------------------------------------------------------
MEDIUMdeploy/helm/multica/values.yaml21# -----------------------------------------------------------------------------
MEDIUMdeploy/helm/multica/values.yaml34# -----------------------------------------------------------------------------
MEDIUMdeploy/helm/multica/values.yaml37# -----------------------------------------------------------------------------
MEDIUMdeploy/helm/multica/values.yaml39# -----------------------------------------------------------------------------
MEDIUMdeploy/helm/multica/values.yaml55# -----------------------------------------------------------------------------
MEDIUMdeploy/helm/multica/values.yaml57# -----------------------------------------------------------------------------
MEDIUMdeploy/helm/multica/values.yaml94# -----------------------------------------------------------------------------
MEDIUMdeploy/helm/multica/values.yaml100# -----------------------------------------------------------------------------
MEDIUMdeploy/helm/multica/values.yaml121# -----------------------------------------------------------------------------
MEDIUMdeploy/helm/multica/values.yaml123# -----------------------------------------------------------------------------
MEDIUMserver/cmd/multica/cmd_squad.go21// ── List ────────────────────────────────────────────────────────────────────
MEDIUMserver/cmd/multica/cmd_squad.go75// ── Get ─────────────────────────────────────────────────────────────────────
MEDIUMserver/cmd/multica/cmd_squad.go113// ── Create ──────────────────────────────────────────────────────────────────
MEDIUMserver/cmd/multica/cmd_squad.go165// ── Update ──────────────────────────────────────────────────────────────────
MEDIUMserver/cmd/multica/cmd_squad.go225// ── Delete ──────────────────────────────────────────────────────────────────
MEDIUMserver/cmd/multica/cmd_squad.go254// ── Members ─────────────────────────────────────────────────────────────────
MEDIUMserver/cmd/multica/cmd_squad.go300// ── Member Add ──────────────────────────────────────────────────────────────
MEDIUMserver/cmd/multica/cmd_squad.go347// ── Member Remove ───────────────────────────────────────────────────────────
MEDIUMserver/cmd/multica/cmd_squad.go391// ── Activity ────────────────────────────────────────────────────────────────
MEDIUMserver/cmd/multica/cmd_squad.go450// ── Init ────────────────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot_webhook.go77// ── Payload normalization ───────────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot_webhook.go209// ── Dedupe + signature helpers ──────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot_webhook.go302// ── Public ingress ──────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot_webhook.go611// ── Event filter helpers ────────────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot_webhook.go759// ── Persistence helpers ─────────────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot_webhook.go884// ── Rate-limit / IP plumbing ────────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot.go24// ── Response types ──────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot.go104// ── Converters ──────────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot.go234// ── Request types ───────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot.go306// ── Handlers ────────────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot.go640// ── Trigger management ──────────────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot.go1204// ── Runs ────────────────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot.go1287// ── Manual trigger ──────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/webhook_delivery.go17// ── Response types ──────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/webhook_delivery.go141// ── Handlers ────────────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/webhook_delivery_test.go19// ── Setup helpers ───────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/webhook_delivery_test.go69// ── Tests ───────────────────────────────────────────────────────────────────
MEDIUM…ver/internal/handler/autopilot_webhook_handler_test.go21// ── Fixture helpers ─────────────────────────────────────────────────────────
MEDIUM…ver/internal/handler/autopilot_webhook_handler_test.go188// ── HTTP contract: event_filters JSON shape & PATCH semantics ──────────────
MEDIUM…ver/internal/handler/autopilot_webhook_handler_test.go414// ── Tests ───────────────────────────────────────────────────────────────────
MEDIUM…ver/internal/handler/autopilot_webhook_handler_test.go705// ── Additional coverage (PR #2348 review) ──────────────────────────────────
MEDIUM…ver/internal/handler/autopilot_webhook_handler_test.go705// ── Additional coverage (PR #2348 review) ──────────────────────────────────
MEDIUMserver/internal/handler/github_test.go1245// ── CI / mergeable_state tests ─────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot_webhook_test.go10// ── Token generation ────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot_webhook_test.go50// ── Payload normalization ───────────────────────────────────────────────────
MEDIUMserver/internal/handler/autopilot_webhook_test.go218// ── Event filter helpers ────────────────────────────────────────────────────
MEDIUMserver/internal/handler/squad.go19// ── Response types ──────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/squad.go58// ── Converters ──────────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/squad.go109// ── Helpers ─────────────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/squad.go156// ── Handlers ────────────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/squad.go421// ── Squad Members ───────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/squad.go440// ── Squad Member Status ────────────────────────────────────────────────────
MEDIUMserver/internal/handler/squad.go796// ── Squad Leader Evaluation ──────────────────────────────────────────────────
MEDIUMserver/internal/handler/squad.go896// ── Squad Trigger Logic ─────────────────────────────────────────────────────
MEDIUMserver/internal/handler/webhook_rate_limiter.go44// ── In-memory implementation ────────────────────────────────────────────────
MEDIUMserver/internal/handler/webhook_rate_limiter.go87// ── Redis implementation ────────────────────────────────────────────────────
MEDIUMserver/internal/handler/github.go30// ── Response shapes ─────────────────────────────────────────────────────────
MEDIUMserver/internal/handler/github.go201// ── Connect / state token ───────────────────────────────────────────────────
104 more matches not shown…
Over-Commented Block440 hits · 440 pts
SeverityFileLineSnippet
LOWdocker-compose.selfhost.yml1# Self-hosting Docker Compose — starts PostgreSQL, backend, and frontend.
LOWCLI_AND_DAEMON.md381
LOWdeploy/helm/multica/values.yaml21# -----------------------------------------------------------------------------
LOWdeploy/helm/multica/templates/backend.yaml121---
LOWserver/cmd/server/listeners.go161 "actor_type": e.ActorType,
LOWserver/cmd/server/autopilot_listeners_test.go221// surfaces a 500 to the user even though the work was correctly suppressed
LOWserver/cmd/server/runtime_sweeper.go21 // staleThresholdSeconds marks runtimes offline if no heartbeat for this
LOWserver/cmd/server/runtime_sweeper.go41 // queuedTTLSeconds expires tasks that have been sitting in 'queued'
LOWserver/cmd/server/runtime_sweeper.go61// runRuntimeSweeper periodically marks runtimes as offline if their
LOWserver/cmd/server/dbstats.go21 // defaultMaxConns / defaultMinConns are the per-pod pgxpool sizing
LOWserver/cmd/server/dbstats.go41//
LOWserver/cmd/server/autopilot_failure_monitor.go181// emitAutopilotPausedNotifications creates one inbox_item per relevant
LOWserver/cmd/server/router.go401 // cloud-runtime — multica-cloud's Fleet and Billing share
LOWserver/cmd/multica/cmd_agent.go921// ---------------------------------------------------------------------------
LOWserver/cmd/multica/cmd_auth.go121 if tokenFlag == tokenPromptSentinel && len(args) == 1 {
LOWserver/cmd/multica/cmd_auth.go141// the CLI's own LAN IP, not the server's.
LOWserver/cmd/multica/cmd_issue.go21
LOWserver/cmd/multica/cmd_issue.go621 // inherits the env var and tags the new issue with origin_type=
LOWserver/cmd/multica/cmd_issue.go1781
LOWserver/cmd/multica/cmd_daemon_windows.go21 // processes they spawn inside a Job Object that has KILL_ON_JOB_CLOSE
LOWserver/cmd/multica/cmd_issue_test.go1561 cmd.Flags().String("before-id", "", "")
LOWserver/cmd/multica/cmd_agent_test.go21// --custom-env* flags registered identically to agentEnvSetCmd, so
LOWserver/cmd/backfill_task_usage_hourly/main.go1// Backfill_task_usage_hourly seeds the unified hourly rollup table
LOWserver/cmd/backfill_task_usage_hourly/main.go21// range in monthly slices and call the same idempotent window
LOWserver/internal/handler/runtime_local_skills.go21const (
LOWserver/internal/handler/issue_child_done.go21//
LOWserver/internal/handler/issue_child_done.go121 // notification + subscriber listeners both short-circuit on
LOWserver/internal/handler/issue_child_done.go201
LOWserver/internal/handler/issue_child_done.go221// general notification. Per-user mute settings are evaluated by the
LOWserver/internal/handler/issue_child_done.go261//
LOWserver/internal/handler/issue_child_done.go341 "error", err,
LOWserver/internal/handler/handler.go61 // public internet, with no trailing slash (e.g. "https://app.multica.ai").
LOWserver/internal/handler/handler.go281}
LOWserver/internal/handler/onboarding_shim.go1// onboarding_shim.go — DEPRECATED endpoints kept alive for desktop < v3.
LOWserver/internal/handler/config.go21 // "Create workspace" affordance on self-hosted instances. Omitted
LOWserver/internal/handler/personal_access_token.go141}
LOWserver/internal/handler/cloud_billing_test.go241
LOWserver/internal/handler/agent_access.go1package handler
LOWserver/internal/handler/comment.go101// the all-time max observed is ~1.1k, so 2000 leaves ~2x headroom while still
LOWserver/internal/handler/comment.go121// every mode (default, since, thread, recent, roots_only).
LOWserver/internal/handler/comment.go141// - before=<RFC3339> + before-id=<uuid> — cursor. The pair's meaning is
LOWserver/internal/handler/comment.go161// - thread is exclusive with recent. Asking for "the most recent N within
LOWserver/internal/handler/comment.go461
LOWserver/internal/handler/comment.go541 // since drops stale rows AFTER the tail / cursor cut.
LOWserver/internal/handler/comment.go821 }
LOWserver/internal/handler/comment.go861 }
LOWserver/internal/handler/comment.go1041// on every follow-up reply.
LOWserver/internal/handler/comment.go1061 return false
LOWserver/internal/handler/autopilot_webhook.go61//
LOWserver/internal/handler/autopilot_webhook.go101// `eventPayload`, those are preserved as-is.
LOWserver/internal/handler/autopilot_webhook.go201// (notably PowerShell-based scripts) prepend to JSON bodies.
LOWserver/internal/handler/autopilot_webhook.go301
LOWserver/internal/handler/autopilot_webhook.go321// autopilot_run_id with 200.
LOWserver/internal/handler/autopilot.go61 // configured; clients then build the URL themselves from webhook_path
LOWserver/internal/handler/autopilot.go261 CronExpression *string `json:"cron_expression"`
LOWserver/internal/handler/autopilot.go281 // characters; we enforce a 16-char minimum on non-empty input.
LOWserver/internal/handler/webhook_delivery.go201 return
LOWserver/internal/handler/agent_thinking_test.go181 req := withURLParam(newRequest(http.MethodPatch, "/api/agents/"+agentID, body), "id", agentID)
LOWserver/internal/handler/personal_access_token_test.go241}
LOW…r/internal/handler/runtime_local_skills_redis_store.go21// PopPending is the critical multi-node primitive. It MUST atomically:
380 more matches not shown…
Hyper-Verbose Identifiers138 hits · 140 pts
SeverityFileLineSnippet
LOWpackages/ui/markdown/mentions.ts17export function preprocessMentionShortcodes(text: string): string {
LOWpackages/ui/components/ui/chart.tsx346function getPayloadConfigFromPayload(
LOWpackages/core/inbox/ws-updaters.ts15export function onInboxIssueStatusChanged(
LOWpackages/core/autopilots/queries.ts63export function autopilotDeliveriesOptions(
LOWpackages/core/autopilots/mutations.ts96export function useCreateAutopilotTrigger() {
LOWpackages/core/autopilots/mutations.ts108export function useUpdateAutopilotTrigger() {
LOWpackages/core/autopilots/mutations.ts120export function useDeleteAutopilotTrigger() {
LOWpackages/core/autopilots/mutations.ts132export function useRotateAutopilotTriggerWebhookToken() {
LOWpackages/core/autopilots/mutations.ts148export function useReplayAutopilotDelivery() {
LOWpackages/core/markdown/mention-shortcodes.ts18export function preprocessMentionShortcodes(text: string): string {
LOWpackages/core/platform/workspace-storage.ts90export function registerForWorkspaceRehydration(fn: () => void) {
LOWpackages/core/platform/workspace-storage.ts106export function createWorkspaceAwareStorage(adapter: StorageAdapter): StateStorage {
LOWpackages/core/workspace/avatar-url.ts3export function resolvePublicFileUrlWithBase(rawUrl: string | null | undefined, baseUrl: string): string | null {
LOWpackages/core/runtimes/cloud-runtime.ts51export function isCloudRuntimeNodePending(status: string): boolean {
LOWpackages/core/runtimes/cloud-runtime.ts55export function cloudRuntimeNodeListOptions(
LOWpackages/core/runtimes/cloud-runtime.ts72export function useCreateCloudRuntimeNode(wsId: string) {
LOWpackages/core/runtimes/cloud-runtime.ts83export function useDeleteCloudRuntimeNode(wsId: string) {
LOWpackages/core/runtimes/cli-version.ts54export function checkQuickCreateCliVersion(detected: string | undefined | null): CliVersionCheck {
LOWpackages/core/runtimes/queries.ts31export function runtimeUsageByAgentOptions(
LOWpackages/core/runtimes/queries.ts43export function runtimeUsageByHourOptions(runtimeId: string, days: number, tz: string) {
LOWpackages/core/runtimes/local-skills.ts29export async function resolveRuntimeLocalSkills(
LOWpackages/core/runtimes/local-skills.ts54export async function resolveRuntimeLocalSkillImport(
LOWpackages/core/runtimes/local-skills.ts80export function runtimeLocalSkillsOptions(runtimeId: string | null | undefined) {
LOWpackages/core/runtimes/mutations.ts27export function useArchiveAgentsAndDeleteRuntime(wsId: string) {
LOWpackages/core/paths/resolve.ts30export function resolvePostAuthDestination(
LOWpackages/core/agents/queries.ts104export function agentTemplateDetailOptions(slug: string) {
LOWpackages/core/agents/use-workspace-presence-prefetch.ts24export function useWorkspacePresencePrefetch(wsId: string | undefined): void {
LOWpackages/core/agents/mcp-support.ts19export function providerSupportsMcpConfig(provider: string | undefined | null): boolean {
LOW…ckages/core/agents/use-workspace-agent-availability.ts35export function useWorkspaceAgentAvailability(): WorkspaceAgentAvailability {
LOWpackages/core/agents/derive-presence.ts96export function deriveAgentPresenceDetail(input: DerivePresenceInput): AgentPresenceDetail {
LOWpackages/core/permissions/rules.ts154export function canUpdateWorkspaceSettings(ctx: PermissionContext): Decision {
LOWpackages/core/dashboard/queries.ts39export function dashboardUsageDailyOptions(
LOWpackages/core/dashboard/queries.ts58export function dashboardUsageByAgentOptions(
LOWpackages/core/dashboard/queries.ts77export function dashboardAgentRunTimeOptions(
LOWpackages/core/dashboard/queries.ts96export function dashboardRunTimeDailyOptions(
LOWpackages/core/realtime/use-realtime-sync.ts129export function applyWorkspaceUpdatedToCache(
LOWpackages/core/realtime/use-realtime-sync.ts151function invalidateWorkspaceScopedQueries(qc: QueryClient): void {
LOWpackages/core/realtime/use-realtime-sync.ts170function invalidateSquadMemberStatusQueries(qc: QueryClient, wsId: string): void {
LOWpackages/core/github/pull-request-status.ts45export function derivePullRequestStatusKind(input: PullRequestStatusInput): PullRequestStatusKind {
LOWpackages/core/github/pull-request-status.ts69export function derivePullRequestProgressSegments(
LOWpackages/core/github/pull-request-status.ts96export function shouldShowPullRequestStats(input: PullRequestStatsInput): boolean {
LOWpackages/core/i18n/browser-cookie-adapter.ts10export function createBrowserCookieLocaleAdapter(): LocaleAdapter {
LOWpackages/core/issues/queries.ts242export function issueAssigneeGroupsOptions(
LOWpackages/core/issues/queries.ts333export function projectGanttIssuesOptions(wsId: string, projectId: string) {
LOWpackages/core/issues/queries.ts340export function myIssueAssigneeGroupsOptions(
LOWpackages/core/issues/queries.ts372export function childIssueProgressOptions(wsId: string) {
LOWpackages/core/issues/queries.ts412async function fetchAndHydrateChildrenByParents(
LOWpackages/core/issues/delete-cache.ts25function collectParentFromListCache(
LOWpackages/core/issues/delete-cache.ts41export function collectDeletedIssueCacheMetadata(
LOWpackages/core/issues/delete-cache.ts75export function pruneDeletedIssueFromListCaches(
LOWpackages/core/issues/delete-cache.ts97export function pruneDeletedIssueFromParentChildrenCaches(
LOWpackages/core/issues/delete-cache.ts110export function invalidateDeletedIssueParentCaches(
LOWpackages/core/issues/delete-cache.ts123export function invalidateDeletedIssueDependentCaches(
LOWpackages/core/issues/delete-cache.ts133export function invalidateIssueScopedCaches(
LOWpackages/core/issues/delete-cache.ts148export function cleanupDeletedIssueCaches(
LOWpackages/core/issues/mutations.ts123export function useLoadMoreByAssigneeGroup(
LOWpackages/core/issues/stores/create-mode-store.ts46export function openCreateIssueWithPreference(
LOWpackages/core/issues/stores/view-store.ts367export function useClearFiltersOnWorkspaceChange(
LOWpackages/core/notification-preferences/queries.ts8export function notificationPreferenceOptions(wsId: string) {
LOWpackages/core/notification-preferences/mutations.ts7export function useUpdateNotificationPreferences() {
78 more matches not shown…
Magic Placeholder Names5 hits · 25 pts
SeverityFileLineSnippet
HIGHSELF_HOSTING_ADVANCED.md300DATABASE_URL="your-database-url" ./server/bin/migrate up
HIGHSELF_HOSTING_ADVANCED.md303DATABASE_URL="your-database-url" PORT=8080 JWT_SECRET="your-secret" ./server/bin/server
HIGH…es/views/runtimes/components/connect-remote-dialog.tsx44multica login --token <YOUR_TOKEN>
HIGH…es/views/runtimes/components/connect-remote-dialog.tsx53multica login --token <YOUR_TOKEN>
HIGH…ews/runtimes/components/connect-remote-dialog.test.tsx113 node.textContent?.includes("multica login --token <YOUR_TOKEN>"),
Verbosity Indicators15 hits · 25 pts
SeverityFileLineSnippet
LOWserver/cmd/server/integration_test.go302 // Step 1: Send code
LOWserver/cmd/server/integration_test.go320 // Step 2: Verify code
LOWscripts/check.sh73# Step 0: Ensure DB
LOWscripts/check.sh80# Step 1: TypeScript typecheck
LOWscripts/check.sh87# Step 2: TypeScript unit tests (Vitest)
LOWscripts/check.sh94# Step 3: Go tests
LOWscripts/check.sh103# Step 4: Start services for E2E (only if not already running)
LOWscripts/check.sh129# Step 5: E2E tests (Playwright)
LOWpackages/views/auth/login-page.test.tsx241 // Step 1: email
LOWpackages/views/auth/login-page.test.tsx245 // Step 2: code
LOW…es/views/runtimes/components/connect-remote-dialog.tsx186// Step 1: Instructions
LOW…es/views/runtimes/components/connect-remote-dialog.tsx327// Step 2: Success
LOWe2e/fixtures.ts36 // Step 1: Send verification code
LOWe2e/fixtures.ts46 // Step 2: Read code from database
LOWe2e/fixtures.ts55 // Step 3: Verify code to get JWT
Fake / Example Data16 hits · 16 pts
SeverityFileLineSnippet
LOWserver/internal/handler/github_test.go100 in: []string{"ABC-1: Lorem Ipsum", "Closes ABC-1. Follow up work planned in ABC-2. Unblocks ABC-3."},
LOWserver/internal/handler/github_test.go841 title := closes.Identifier + ": Lorem Ipsum dolor sit amet"
LOWserver/internal/handler/github_test.go841 title := closes.Identifier + ": Lorem Ipsum dolor sit amet"
LOWpackages/views/auth/login-page.test.tsx403 email: "user@example.com",
LOWpackages/views/auth/login-page.test.tsx435 email: "user@example.com",
LOWpackages/views/auth/login-page.test.tsx470 email: "user@example.com",
LOWpackages/views/workspace/create-workspace-form.test.tsx43 target: { value: "Acme Corp" },
LOWpackages/views/workspace/slug.test.ts7 expect(nameToWorkspaceSlug("Acme Inc")).toBe("acme-inc");
LOWpackages/views/issues/components/issues-page.test.tsx19const mockAuthUser = { id: "user-1", email: "test@test.com", name: "Test User" };
LOWpackages/views/issues/components/issues-page.test.tsx74 email: "test@test.com",
LOWpackages/views/issues/components/issue-detail.test.tsx31const mockAuthUser = { id: "user-1", email: "test@test.com", name: "Test User" };
LOWpackages/views/issues/components/issue-detail.test.tsx63 queryFn: () => Promise.resolve([{ user_id: "user-1", name: "Test User", email: "test@test.com", role: "admin" }]),
LOWpackages/views/issues/components/issue-detail.test.tsx220 listMembers: vi.fn().mockResolvedValue([{ user_id: "user-1", name: "Test User", email: "test@test.com", role: "admin"
LOWpackages/views/issues/components/issue-detail.test.tsx506 { user_id: "user-1", name: "Test User", email: "test@test.com", role: "admin" },
LOWpackages/views/issues/components/swimlane-view.test.tsx68const mockAuthUser = { id: "user-1", email: "test@test.com", name: "Test User" };
LOWapps/mobile/lib/mention-serialize.ts67 // prevents random in-word @ (e.g. "user@example.com") from triggering.
AI Slop Vocabulary5 hits · 15 pts
SeverityFileLineSnippet
MEDIUMserver/internal/handler/agent.go384// the strip robust against unusual casings seen on shared drives.
MEDIUMserver/internal/daemon/execenv/openclaw_config.go228// with only `workspace` rewritten — this is robust regardless of whether
MEDIUMserver/internal/service/task.go1139 // the requester's workspace since the task started — more robust than
MEDIUMserver/internal/service/task.go2070// deterministic — robust against the same agent creating other issues in
MEDIUMapps/mobile/app/(app)/[workspace]/project/new.tsx128 // robust than a hard-coded `setTimeout(150)` if iOS timing
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippet
LOWdocker-compose.selfhost.yml11# Usage: