@kindgi/cli 0.0.0-bootstrap.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +738 -1
- package/dist/build/apt.d.ts +16 -0
- package/dist/build/apt.d.ts.map +1 -0
- package/dist/build/apt.js +50 -0
- package/dist/build/apt.js.map +1 -0
- package/dist/build/bundle.d.ts +48 -0
- package/dist/build/bundle.d.ts.map +1 -0
- package/dist/build/bundle.js +125 -0
- package/dist/build/bundle.js.map +1 -0
- package/dist/build/containerfile.d.ts +27 -0
- package/dist/build/containerfile.d.ts.map +1 -0
- package/dist/build/containerfile.js +197 -0
- package/dist/build/containerfile.js.map +1 -0
- package/dist/build/context-files.d.ts +24 -0
- package/dist/build/context-files.d.ts.map +1 -0
- package/dist/build/context-files.js +99 -0
- package/dist/build/context-files.js.map +1 -0
- package/dist/build/defaults.d.ts +66 -0
- package/dist/build/defaults.d.ts.map +1 -0
- package/dist/build/defaults.js +597 -0
- package/dist/build/defaults.js.map +1 -0
- package/dist/build/envelope.d.ts +72 -0
- package/dist/build/envelope.d.ts.map +1 -0
- package/dist/build/envelope.js +76 -0
- package/dist/build/envelope.js.map +1 -0
- package/dist/build/host-install.d.ts +100 -0
- package/dist/build/host-install.d.ts.map +1 -0
- package/dist/build/host-install.js +443 -0
- package/dist/build/host-install.js.map +1 -0
- package/dist/build/image-config.d.ts +32 -0
- package/dist/build/image-config.d.ts.map +1 -0
- package/dist/build/image-config.js +129 -0
- package/dist/build/image-config.js.map +1 -0
- package/dist/build/integrity.d.ts +51 -0
- package/dist/build/integrity.d.ts.map +1 -0
- package/dist/build/integrity.js +75 -0
- package/dist/build/integrity.js.map +1 -0
- package/dist/build/node-image.d.ts +18 -0
- package/dist/build/node-image.d.ts.map +1 -0
- package/dist/build/node-image.js +46 -0
- package/dist/build/node-image.js.map +1 -0
- package/dist/build/pack-root.d.ts +69 -0
- package/dist/build/pack-root.d.ts.map +1 -0
- package/dist/build/pack-root.js +102 -0
- package/dist/build/pack-root.js.map +1 -0
- package/dist/build/poetry-requirements.d.ts +5 -0
- package/dist/build/poetry-requirements.d.ts.map +1 -0
- package/dist/build/poetry-requirements.js +8 -0
- package/dist/build/poetry-requirements.js.map +1 -0
- package/dist/build/python-image.d.ts +40 -0
- package/dist/build/python-image.d.ts.map +1 -0
- package/dist/build/python-image.js +197 -0
- package/dist/build/python-image.js.map +1 -0
- package/dist/build/runners.d.ts +259 -0
- package/dist/build/runners.d.ts.map +1 -0
- package/dist/build/runners.js +4 -0
- package/dist/build/runners.js.map +1 -0
- package/dist/build/version-specifier.d.ts +2 -0
- package/dist/build/version-specifier.d.ts.map +1 -0
- package/dist/build/version-specifier.js +70 -0
- package/dist/build/version-specifier.js.map +1 -0
- package/dist/cli-package.d.ts +15 -0
- package/dist/cli-package.d.ts.map +1 -0
- package/dist/cli-package.js +37 -0
- package/dist/cli-package.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +26 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/adapters.d.ts +3 -0
- package/dist/commands/adapters.d.ts.map +1 -0
- package/dist/commands/adapters.js +148 -0
- package/dist/commands/adapters.js.map +1 -0
- package/dist/commands/agents.d.ts +3 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +82 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/approvals.d.ts +3 -0
- package/dist/commands/approvals.d.ts.map +1 -0
- package/dist/commands/approvals.js +92 -0
- package/dist/commands/approvals.js.map +1 -0
- package/dist/commands/artifacts.d.ts +3 -0
- package/dist/commands/artifacts.d.ts.map +1 -0
- package/dist/commands/artifacts.js +87 -0
- package/dist/commands/artifacts.js.map +1 -0
- package/dist/commands/auth.d.ts +25 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +283 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/build.d.ts +46 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +902 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/capabilities.d.ts +3 -0
- package/dist/commands/capabilities.d.ts.map +1 -0
- package/dist/commands/capabilities.js +38 -0
- package/dist/commands/capabilities.js.map +1 -0
- package/dist/commands/conversations.d.ts +3 -0
- package/dist/commands/conversations.d.ts.map +1 -0
- package/dist/commands/conversations.js +75 -0
- package/dist/commands/conversations.js.map +1 -0
- package/dist/commands/deploy.d.ts +7 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +697 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/dev.d.ts +43 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +1110 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/env.d.ts +27 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +816 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/feedback.d.ts +33 -0
- package/dist/commands/feedback.d.ts.map +1 -0
- package/dist/commands/feedback.js +374 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/flows.d.ts +3 -0
- package/dist/commands/flows.d.ts.map +1 -0
- package/dist/commands/flows.js +60 -0
- package/dist/commands/flows.js.map +1 -0
- package/dist/commands/guardrails.d.ts +3 -0
- package/dist/commands/guardrails.d.ts.map +1 -0
- package/dist/commands/guardrails.js +89 -0
- package/dist/commands/guardrails.js.map +1 -0
- package/dist/commands/health.d.ts +8 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +40 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/helpers.d.ts +48 -0
- package/dist/commands/helpers.d.ts.map +1 -0
- package/dist/commands/helpers.js +110 -0
- package/dist/commands/helpers.js.map +1 -0
- package/dist/commands/index.d.ts +7 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +90 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +46 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +454 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/key.d.ts +3 -0
- package/dist/commands/key.d.ts.map +1 -0
- package/dist/commands/key.js +322 -0
- package/dist/commands/key.js.map +1 -0
- package/dist/commands/mcp.d.ts +43 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +433 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/memory.d.ts +3 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +82 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/observations.d.ts +3 -0
- package/dist/commands/observations.d.ts.map +1 -0
- package/dist/commands/observations.js +27 -0
- package/dist/commands/observations.js.map +1 -0
- package/dist/commands/proposals.d.ts +3 -0
- package/dist/commands/proposals.d.ts.map +1 -0
- package/dist/commands/proposals.js +116 -0
- package/dist/commands/proposals.js.map +1 -0
- package/dist/commands/provenance.d.ts +3 -0
- package/dist/commands/provenance.d.ts.map +1 -0
- package/dist/commands/provenance.js +53 -0
- package/dist/commands/provenance.js.map +1 -0
- package/dist/commands/providers.d.ts +3 -0
- package/dist/commands/providers.d.ts.map +1 -0
- package/dist/commands/providers.js +212 -0
- package/dist/commands/providers.js.map +1 -0
- package/dist/commands/reviewers.d.ts +3 -0
- package/dist/commands/reviewers.d.ts.map +1 -0
- package/dist/commands/reviewers.js +78 -0
- package/dist/commands/reviewers.js.map +1 -0
- package/dist/commands/runs.d.ts +3 -0
- package/dist/commands/runs.d.ts.map +1 -0
- package/dist/commands/runs.js +223 -0
- package/dist/commands/runs.js.map +1 -0
- package/dist/commands/secrets.d.ts +18 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +702 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/skills.d.ts +64 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +430 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/test.d.ts +5 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +181 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/tokens.d.ts +3 -0
- package/dist/commands/tokens.d.ts.map +1 -0
- package/dist/commands/tokens.js +33 -0
- package/dist/commands/tokens.js.map +1 -0
- package/dist/commands/tools.d.ts +3 -0
- package/dist/commands/tools.d.ts.map +1 -0
- package/dist/commands/tools.js +162 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/types.d.ts +54 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +4 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/commands/unwired.d.ts +22 -0
- package/dist/commands/unwired.d.ts.map +1 -0
- package/dist/commands/unwired.js +52 -0
- package/dist/commands/unwired.js.map +1 -0
- package/dist/commands/version.d.ts +8 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +41 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/config.d.ts +42 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +83 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +162 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +45 -0
- package/dist/context.js.map +1 -0
- package/dist/deploy/defaults.d.ts +14 -0
- package/dist/deploy/defaults.d.ts.map +1 -0
- package/dist/deploy/defaults.js +37 -0
- package/dist/deploy/defaults.js.map +1 -0
- package/dist/deploy/envelope-loader.d.ts +24 -0
- package/dist/deploy/envelope-loader.d.ts.map +1 -0
- package/dist/deploy/envelope-loader.js +141 -0
- package/dist/deploy/envelope-loader.js.map +1 -0
- package/dist/deploy/post.d.ts +48 -0
- package/dist/deploy/post.d.ts.map +1 -0
- package/dist/deploy/post.js +210 -0
- package/dist/deploy/post.js.map +1 -0
- package/dist/deploy/response.d.ts +42 -0
- package/dist/deploy/response.d.ts.map +1 -0
- package/dist/deploy/response.js +128 -0
- package/dist/deploy/response.js.map +1 -0
- package/dist/deploy/runners.d.ts +218 -0
- package/dist/deploy/runners.d.ts.map +1 -0
- package/dist/deploy/runners.js +4 -0
- package/dist/deploy/runners.js.map +1 -0
- package/dist/dev/bundler.d.ts +10 -0
- package/dist/dev/bundler.d.ts.map +1 -0
- package/dist/dev/bundler.js +235 -0
- package/dist/dev/bundler.js.map +1 -0
- package/dist/dev/defaults.d.ts +140 -0
- package/dist/dev/defaults.d.ts.map +1 -0
- package/dist/dev/defaults.js +709 -0
- package/dist/dev/defaults.js.map +1 -0
- package/dist/dev/dev-only-imports.d.ts +15 -0
- package/dist/dev/dev-only-imports.d.ts.map +1 -0
- package/dist/dev/dev-only-imports.js +57 -0
- package/dist/dev/dev-only-imports.js.map +1 -0
- package/dist/dev/docker-compose.dev.yml +68 -0
- package/dist/dev/index-child.d.ts +2 -0
- package/dist/dev/index-child.d.ts.map +1 -0
- package/dist/dev/index-child.js +53 -0
- package/dist/dev/index-child.js.map +1 -0
- package/dist/dev/pack-code.d.ts +36 -0
- package/dist/dev/pack-code.d.ts.map +1 -0
- package/dist/dev/pack-code.js +129 -0
- package/dist/dev/pack-code.js.map +1 -0
- package/dist/dev/pack-env.d.ts +13 -0
- package/dist/dev/pack-env.d.ts.map +1 -0
- package/dist/dev/pack-env.js +36 -0
- package/dist/dev/pack-env.js.map +1 -0
- package/dist/dev/pack-service.d.ts +40 -0
- package/dist/dev/pack-service.d.ts.map +1 -0
- package/dist/dev/pack-service.js +189 -0
- package/dist/dev/pack-service.js.map +1 -0
- package/dist/dev/paths.d.ts +22 -0
- package/dist/dev/paths.d.ts.map +1 -0
- package/dist/dev/paths.js +35 -0
- package/dist/dev/paths.js.map +1 -0
- package/dist/dev/postgres-container.d.ts +77 -0
- package/dist/dev/postgres-container.d.ts.map +1 -0
- package/dist/dev/postgres-container.js +346 -0
- package/dist/dev/postgres-container.js.map +1 -0
- package/dist/dev/python-builder.d.ts +16 -0
- package/dist/dev/python-builder.d.ts.map +1 -0
- package/dist/dev/python-builder.js +122 -0
- package/dist/dev/python-builder.js.map +1 -0
- package/dist/dev/register.d.ts +71 -0
- package/dist/dev/register.d.ts.map +1 -0
- package/dist/dev/register.js +54 -0
- package/dist/dev/register.js.map +1 -0
- package/dist/dev/runners.d.ts +312 -0
- package/dist/dev/runners.d.ts.map +1 -0
- package/dist/dev/runners.js +4 -0
- package/dist/dev/runners.js.map +1 -0
- package/dist/dev/runtime-container.d.ts +71 -0
- package/dist/dev/runtime-container.d.ts.map +1 -0
- package/dist/dev/runtime-container.js +173 -0
- package/dist/dev/runtime-container.js.map +1 -0
- package/dist/dev/runtime-env.d.ts +62 -0
- package/dist/dev/runtime-env.d.ts.map +1 -0
- package/dist/dev/runtime-env.js +100 -0
- package/dist/dev/runtime-env.js.map +1 -0
- package/dist/dev/runtime-image.d.ts +26 -0
- package/dist/dev/runtime-image.d.ts.map +1 -0
- package/dist/dev/runtime-image.js +44 -0
- package/dist/dev/runtime-image.js.map +1 -0
- package/dist/dev/runtime-registry.d.ts +73 -0
- package/dist/dev/runtime-registry.d.ts.map +1 -0
- package/dist/dev/runtime-registry.js +111 -0
- package/dist/dev/runtime-registry.js.map +1 -0
- package/dist/env/defaults.d.ts +3 -0
- package/dist/env/defaults.d.ts.map +1 -0
- package/dist/env/defaults.js +22 -0
- package/dist/env/defaults.js.map +1 -0
- package/dist/env/pack-env-plan.d.ts +70 -0
- package/dist/env/pack-env-plan.d.ts.map +1 -0
- package/dist/env/pack-env-plan.js +236 -0
- package/dist/env/pack-env-plan.js.map +1 -0
- package/dist/env/parser.d.ts +9 -0
- package/dist/env/parser.d.ts.map +1 -0
- package/dist/env/parser.js +11 -0
- package/dist/env/parser.js.map +1 -0
- package/dist/env/project-env.d.ts +34 -0
- package/dist/env/project-env.d.ts.map +1 -0
- package/dist/env/project-env.js +45 -0
- package/dist/env/project-env.js.map +1 -0
- package/dist/env/runners.d.ts +22 -0
- package/dist/env/runners.d.ts.map +1 -0
- package/dist/env/runners.js +4 -0
- package/dist/env/runners.js.map +1 -0
- package/dist/env/writer.d.ts +7 -0
- package/dist/env/writer.d.ts.map +1 -0
- package/dist/env/writer.js +9 -0
- package/dist/env/writer.js.map +1 -0
- package/dist/errors.d.ts +31 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +111 -0
- package/dist/errors.js.map +1 -0
- package/dist/help.d.ts +5 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +61 -0
- package/dist/help.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/init/augment-scaffolder.d.ts +86 -0
- package/dist/init/augment-scaffolder.d.ts.map +1 -0
- package/dist/init/augment-scaffolder.js +538 -0
- package/dist/init/augment-scaffolder.js.map +1 -0
- package/dist/init/dependency-specs.d.ts +58 -0
- package/dist/init/dependency-specs.d.ts.map +1 -0
- package/dist/init/dependency-specs.js +153 -0
- package/dist/init/dependency-specs.js.map +1 -0
- package/dist/init/gitignore-patcher.d.ts +23 -0
- package/dist/init/gitignore-patcher.d.ts.map +1 -0
- package/dist/init/gitignore-patcher.js +103 -0
- package/dist/init/gitignore-patcher.js.map +1 -0
- package/dist/init/mode-detect.d.ts +34 -0
- package/dist/init/mode-detect.d.ts.map +1 -0
- package/dist/init/mode-detect.js +115 -0
- package/dist/init/mode-detect.js.map +1 -0
- package/dist/init/package-json-patcher.d.ts +36 -0
- package/dist/init/package-json-patcher.d.ts.map +1 -0
- package/dist/init/package-json-patcher.js +128 -0
- package/dist/init/package-json-patcher.js.map +1 -0
- package/dist/init/pnpm-workspace-patcher.d.ts +55 -0
- package/dist/init/pnpm-workspace-patcher.d.ts.map +1 -0
- package/dist/init/pnpm-workspace-patcher.js +248 -0
- package/dist/init/pnpm-workspace-patcher.js.map +1 -0
- package/dist/init/pyproject-patcher.d.ts +56 -0
- package/dist/init/pyproject-patcher.d.ts.map +1 -0
- package/dist/init/pyproject-patcher.js +324 -0
- package/dist/init/pyproject-patcher.js.map +1 -0
- package/dist/init/python-augment.d.ts +22 -0
- package/dist/init/python-augment.d.ts.map +1 -0
- package/dist/init/python-augment.js +300 -0
- package/dist/init/python-augment.js.map +1 -0
- package/dist/init/template-files.d.ts +18 -0
- package/dist/init/template-files.d.ts.map +1 -0
- package/dist/init/template-files.js +53 -0
- package/dist/init/template-files.js.map +1 -0
- package/dist/key/defaults.d.ts +3 -0
- package/dist/key/defaults.d.ts.map +1 -0
- package/dist/key/defaults.js +60 -0
- package/dist/key/defaults.js.map +1 -0
- package/dist/key/fingerprint.d.ts +6 -0
- package/dist/key/fingerprint.d.ts.map +1 -0
- package/dist/key/fingerprint.js +25 -0
- package/dist/key/fingerprint.js.map +1 -0
- package/dist/key/paths.d.ts +30 -0
- package/dist/key/paths.d.ts.map +1 -0
- package/dist/key/paths.js +51 -0
- package/dist/key/paths.js.map +1 -0
- package/dist/key/runners.d.ts +60 -0
- package/dist/key/runners.d.ts.map +1 -0
- package/dist/key/runners.js +4 -0
- package/dist/key/runners.js.map +1 -0
- package/dist/main.d.ts +113 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +199 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp/launcher.d.ts +143 -0
- package/dist/mcp/launcher.d.ts.map +1 -0
- package/dist/mcp/launcher.js +393 -0
- package/dist/mcp/launcher.js.map +1 -0
- package/dist/mcp/preset-loader.d.ts +29 -0
- package/dist/mcp/preset-loader.d.ts.map +1 -0
- package/dist/mcp/preset-loader.js +217 -0
- package/dist/mcp/preset-loader.js.map +1 -0
- package/dist/mcp/preset-types.d.ts +71 -0
- package/dist/mcp/preset-types.d.ts.map +1 -0
- package/dist/mcp/preset-types.js +4 -0
- package/dist/mcp/preset-types.js.map +1 -0
- package/dist/mcp/presets/README.md +68 -0
- package/dist/mcp/presets/postgres.json +15 -0
- package/dist/output.d.ts +26 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +46 -0
- package/dist/output.js.map +1 -0
- package/dist/pack-config.d.ts +37 -0
- package/dist/pack-config.d.ts.map +1 -0
- package/dist/pack-config.js +65 -0
- package/dist/pack-config.js.map +1 -0
- package/dist/package-manager.d.ts +33 -0
- package/dist/package-manager.d.ts.map +1 -0
- package/dist/package-manager.js +129 -0
- package/dist/package-manager.js.map +1 -0
- package/dist/parse.d.ts +88 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +100 -0
- package/dist/parse.js.map +1 -0
- package/dist/providers/preset-loader.d.ts +47 -0
- package/dist/providers/preset-loader.d.ts.map +1 -0
- package/dist/providers/preset-loader.js +107 -0
- package/dist/providers/preset-loader.js.map +1 -0
- package/dist/providers/presets/anthropic.json +47 -0
- package/dist/providers/presets/gemini.json +40 -0
- package/dist/reference.d.ts +28 -0
- package/dist/reference.d.ts.map +1 -0
- package/dist/reference.js +52 -0
- package/dist/reference.js.map +1 -0
- package/dist/sdk-package.d.ts +9 -0
- package/dist/sdk-package.d.ts.map +1 -0
- package/dist/sdk-package.js +20 -0
- package/dist/sdk-package.js.map +1 -0
- package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +252 -0
- package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +302 -0
- package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +297 -0
- package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +289 -0
- package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +705 -0
- package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +298 -0
- package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +211 -0
- package/dist/sdk-skills/kindgi-getting-started/SKILL.md +189 -0
- package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +205 -0
- package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +325 -0
- package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +176 -0
- package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +305 -0
- package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +242 -0
- package/dist/stop-signal.d.ts +15 -0
- package/dist/stop-signal.d.ts.map +1 -0
- package/dist/stop-signal.js +16 -0
- package/dist/stop-signal.js.map +1 -0
- package/dist/templates/minimal/.nvmrc +1 -0
- package/dist/templates/minimal/AGENTS.md +23 -0
- package/dist/templates/minimal/README.md.tmpl +69 -0
- package/dist/templates/minimal/agents/.gitkeep +0 -0
- package/dist/templates/minimal/flows/.gitkeep +0 -0
- package/dist/templates/minimal/gitignore +8 -0
- package/dist/templates/minimal/guardrails/.gitkeep +0 -0
- package/dist/templates/minimal/kindgi.config.ts.tmpl +44 -0
- package/dist/templates/minimal/package.json.tmpl +25 -0
- package/dist/templates/minimal/pnpm-workspace.yaml +8 -0
- package/dist/templates/minimal/tools/.gitkeep +0 -0
- package/dist/templates/minimal/tsconfig.json.tmpl +27 -0
- package/dist/templates/minimal/vitest.config.ts.tmpl +14 -0
- package/dist/templates/python/AGENTS.md +30 -0
- package/dist/templates/python/README.md.tmpl +56 -0
- package/dist/templates/python/agents/echo_agent.py.tmpl +23 -0
- package/dist/templates/python/flows/echo_flow.py.tmpl +17 -0
- package/dist/templates/python/gitignore +9 -0
- package/dist/templates/python/guardrails/response_not_empty.py.tmpl +27 -0
- package/dist/templates/python/pyproject.toml.tmpl +42 -0
- package/dist/templates/python/tests/test_tools.py.tmpl +22 -0
- package/dist/templates/python/tools/echo.py.tmpl +27 -0
- package/dist/templates/python/tools/greet.py.tmpl +20 -0
- package/dist/templates/sample/.nvmrc +1 -0
- package/dist/templates/sample/AGENTS.md +23 -0
- package/dist/templates/sample/README.md.tmpl +85 -0
- package/dist/templates/sample/agents/echo-agent/index.ts.tmpl +34 -0
- package/dist/templates/sample/flows/echo-flow/index.ts.tmpl +59 -0
- package/dist/templates/sample/gitignore +8 -0
- package/dist/templates/sample/guardrails/response-not-empty/index.ts.tmpl +58 -0
- package/dist/templates/sample/kindgi.config.ts.tmpl +41 -0
- package/dist/templates/sample/package.json.tmpl +25 -0
- package/dist/templates/sample/pnpm-workspace.yaml +8 -0
- package/dist/templates/sample/tools/echo/index.test.ts.tmpl +31 -0
- package/dist/templates/sample/tools/echo/index.ts.tmpl +37 -0
- package/dist/templates/sample/tools/fetch-httpbin/index.ts.tmpl +60 -0
- package/dist/templates/sample/tools/greet/index.ts.tmpl +35 -0
- package/dist/templates/sample/tsconfig.json.tmpl +27 -0
- package/dist/templates/sample/vitest.config.ts.tmpl +14 -0
- package/dist/terminal-input.d.ts +17 -0
- package/dist/terminal-input.d.ts.map +1 -0
- package/dist/terminal-input.js +88 -0
- package/dist/terminal-input.js.map +1 -0
- package/dist/test/defaults.d.ts +3 -0
- package/dist/test/defaults.d.ts.map +1 -0
- package/dist/test/defaults.js +104 -0
- package/dist/test/defaults.js.map +1 -0
- package/dist/test/runners.d.ts +60 -0
- package/dist/test/runners.d.ts.map +1 -0
- package/dist/test/runners.js +4 -0
- package/dist/test/runners.js.map +1 -0
- package/dist/version-info.d.ts +9 -0
- package/dist/version-info.d.ts.map +1 -0
- package/dist/version-info.js +27 -0
- package/dist/version-info.js.map +1 -0
- package/dist/write-fully.d.ts +13 -0
- package/dist/write-fully.d.ts.map +1 -0
- package/dist/write-fully.js +17 -0
- package/dist/write-fully.js.map +1 -0
- package/package.json +63 -4
package/README.md
CHANGED
|
@@ -1,3 +1,740 @@
|
|
|
1
1
|
# @kindgi/cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The `kindgi` command: create a Kindgi pack, run it on your machine while you
|
|
4
|
+
write it, build and deploy it, and work with a running Kindgi API (runs,
|
|
5
|
+
agents, tools, providers, approvals, …) from the terminal.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
The CLI is **project-local**: a project depends on `@kindgi/cli` as a
|
|
10
|
+
devDependency and runs the `kindgi` it pins, never a global install.
|
|
11
|
+
`kindgi init` adds it for you.
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
npx @kindgi/cli init # in an existing app, or: init <pack-name>
|
|
15
|
+
pnpm install
|
|
16
|
+
pnpm exec kindgi dev # npm: npx --no kindgi dev
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Use the scoped name, `@kindgi/cli`: there is no unscoped `kindgi` package.
|
|
20
|
+
|
|
21
|
+
**Requirements:** Node 22 or later, and Docker for `kindgi dev` (Docker
|
|
22
|
+
Desktop, or a Docker engine on Linux). A Python pack also needs Python and
|
|
23
|
+
the [`kindgi` Python SDK](../../sdks/python).
|
|
24
|
+
|
|
25
|
+
## The pack lifecycle
|
|
26
|
+
|
|
27
|
+
| Command | What it does |
|
|
28
|
+
|---|---|
|
|
29
|
+
| [`kindgi init`](#kindgi-init) | Scaffold a pack, or add Kindgi to an existing app. |
|
|
30
|
+
| [`kindgi dev`](#kindgi-dev) | Run the Kindgi runtime as a container, with your pack's code on your machine, re-indexed on every save. |
|
|
31
|
+
| [`kindgi test`](#kindgi-test) | Run the pack's tests with its own vitest. |
|
|
32
|
+
| [`kindgi build`](#kindgi-build) | Bundle, build and sign a pack image; writes `deploy-envelope.json`. |
|
|
33
|
+
| [`kindgi deploy`](#kindgi-deploy) | Send the signed envelope to `POST /v1/deployments`. |
|
|
34
|
+
| [`kindgi env`](#kindgi-env) | Per-environment values, kept in env files next to the pack. |
|
|
35
|
+
| [`kindgi secrets`](#kindgi-secrets) | Per-environment secrets, through the API. |
|
|
36
|
+
| [`kindgi key`](#kindgi-key) | Local Ed25519 signing keys under `~/.kindgi/keys/`. |
|
|
37
|
+
| [`kindgi skills`](#kindgi-skills) | Refresh the Claude Code skills in `.claude/skills/`. |
|
|
38
|
+
| [`kindgi mcp`](#kindgi-mcp) | MCP servers for your coding agent, in `.mcp.json`. |
|
|
39
|
+
| [`kindgi feedback`](#kindgi-feedback) | Note framework friction in the pack's `FEEDBACK.md`. |
|
|
40
|
+
|
|
41
|
+
The rest of the commands talk to a running Kindgi API: see
|
|
42
|
+
[API commands](#api-commands).
|
|
43
|
+
|
|
44
|
+
## Quick start
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
pnpm exec kindgi init my-pack --template=sample
|
|
48
|
+
cd my-pack && pnpm install
|
|
49
|
+
pnpm exec kindgi dev
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Then, from another terminal in the pack directory (`kindgi dev` writes the
|
|
53
|
+
API URL and token to `.kindgirc.json` there, so every command run in the
|
|
54
|
+
pack talks to it):
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
pnpm exec kindgi runs start --agent=my-pack.echo-agent --input='{"userMessage":"hi"}'
|
|
58
|
+
pnpm exec kindgi runs start --flow=my-pack.echo-flow --input='{"name":"Ada"}'
|
|
59
|
+
pnpm exec kindgi runs start --flow=my-pack.echo-flow --input='{"name":"Ada"}' --dry-run
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## `kindgi init`
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
kindgi init [<pack-name>] [--template=minimal|sample|python] [--path=<dir>]
|
|
66
|
+
[--force] [--link-local] [--new-repo] [--pack-id=<id>]
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Three modes:
|
|
70
|
+
|
|
71
|
+
- **`kindgi init <pack-name>`** scaffolds a new pack: the standard folders,
|
|
72
|
+
a `kindgi.config.ts`, starter primitives, tests and a README.
|
|
73
|
+
- **`kindgi init`** in a directory with a `package.json` adds Kindgi to that
|
|
74
|
+
app: a `kindgi.config.ts`, a `kindgi/` folder for the pack's primitives,
|
|
75
|
+
the skills under `.claude/skills/`, and `.gitignore` entries. It adds
|
|
76
|
+
`@kindgi/sdk`, `zod` (`^4.0.0`, unless the app has its own: one older than
|
|
77
|
+
zod 4 is kept, with a warning) and `@kindgi/cli` to `package.json`. In a
|
|
78
|
+
pnpm app it records a decision for esbuild's install script
|
|
79
|
+
(`allowBuilds.esbuild: false`) in the `pnpm-workspace.yaml` pnpm reads,
|
|
80
|
+
creating it if needed and keeping the rest of the file: pnpm 11+ won't
|
|
81
|
+
install `@kindgi/cli` until that script has a decision, and esbuild works
|
|
82
|
+
without it (its binary comes from its `@esbuild/<platform>` package). A
|
|
83
|
+
decision the app already has, `true` or `false`, is kept. It creates
|
|
84
|
+
no env files: `kindgi dev` reads the app's own `.env` / `.env.local`.
|
|
85
|
+
`--new-repo` scaffolds a separate pack inside the app instead.
|
|
86
|
+
- **`kindgi init`** in a directory with a `pyproject.toml` and no
|
|
87
|
+
`package.json` (or `--template=python` where both are) adds a Python
|
|
88
|
+
pack to that app, editing its `pyproject.toml` in place and checking each
|
|
89
|
+
edit by parsing the file again:
|
|
90
|
+
- the `[tool.kindgi]` tables: the pack id from `[project].name`
|
|
91
|
+
(normalized; `--pack-id` overrides), discovery under `kindgi/`, and for
|
|
92
|
+
a Poetry app `dev.python = ["poetry", "run", "python"]`;
|
|
93
|
+
- `kindgi` in `[project].dependencies`. Where the dependencies can't be
|
|
94
|
+
edited that way (Poetry 1, `dynamic`), it prints the command to run
|
|
95
|
+
instead;
|
|
96
|
+
- `[tool.uv] required-version`, unless the app sets its own.
|
|
97
|
+
|
|
98
|
+
Plus `kindgi/{tools,guardrails,agents,flows}/`, the Python-pack skills and
|
|
99
|
+
`.gitignore` entries. The next steps it prints follow the app's
|
|
100
|
+
installer: uv, Poetry or pip.
|
|
101
|
+
|
|
102
|
+
A Node project gets `@kindgi/sdk` (a dependency) and `@kindgi/cli` (a
|
|
103
|
+
devDependency) at the running CLI's own version, or linked from a checkout
|
|
104
|
+
(`--link-local`); never `latest`.
|
|
105
|
+
|
|
106
|
+
| Flag | Purpose |
|
|
107
|
+
|---|---|
|
|
108
|
+
| `<pack-name>` | The pack id: lowercase kebab-case, optionally dot-namespaced (`my-pack`, `acme.legal-basics`). |
|
|
109
|
+
| `--template=<name>` | `minimal` (the default: the folders, no examples), `sample` (three tools, a guardrail, an agent and a flow), or `python` (the sample as a Python pack). |
|
|
110
|
+
| `--path=<dir>` | Where to scaffold. Default: `<pack-name>` under the current directory (for a dot-namespaced id, its last segment). |
|
|
111
|
+
| `--force` | Write into a non-empty directory. Default: refuse. |
|
|
112
|
+
| `--link-local` | Link `@kindgi/*` from the checkout the CLI runs from. |
|
|
113
|
+
| `--new-repo` | In an existing app: scaffold a separate pack rather than adding Kindgi to the app. |
|
|
114
|
+
| `--pack-id=<id>` | Adding to an app: the pack id, when the app's name doesn't make a valid one. |
|
|
115
|
+
|
|
116
|
+
### Skills
|
|
117
|
+
|
|
118
|
+
`init` copies the `@kindgi/sdk` skills into `.claude/skills/`, so a coding
|
|
119
|
+
agent working in the pack knows how to write tools, agents, guardrails,
|
|
120
|
+
flows and providers. A pack gets the skills written for its language: a
|
|
121
|
+
TypeScript pack the TypeScript ones, a Python pack the `kindgi-python-*`
|
|
122
|
+
ones, both the shared ones. `kindgi skills sync` refreshes them, and
|
|
123
|
+
`.claude/skills/.kindgi-manifest.json` records what was installed.
|
|
124
|
+
|
|
125
|
+
## `kindgi dev`
|
|
126
|
+
|
|
127
|
+
```sh
|
|
128
|
+
kindgi dev [--port <n>] [--database-url <url>] [--tenant <id>] [--dev-token <token>]
|
|
129
|
+
[--no-watch] [--path <dir>] [--reset] [--recreate-services]
|
|
130
|
+
[--runtime-image <ref> | --runtime-url <url>]
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
One command runs the whole loop on your machine:
|
|
134
|
+
|
|
135
|
+
- **The Kindgi runtime runs as a container** (`docker run`), one per pack
|
|
136
|
+
directory, with the pack directory mounted at `/pack`. Its API is
|
|
137
|
+
published on `127.0.0.1` only.
|
|
138
|
+
- **Your pack's code runs on your machine**, in a local pack service: the
|
|
139
|
+
same process a deployment runs, with your Node or Python, your
|
|
140
|
+
`node_modules` or virtualenv, and your app's modules. The runtime calls it
|
|
141
|
+
for every tool and guardrail check.
|
|
142
|
+
- **Postgres:** a bundled Postgres, started with `docker compose` when it's
|
|
143
|
+
available and with plain `docker` otherwise (the `kindgi-dev` project, with
|
|
144
|
+
the same container, volume and network either way, shared by every
|
|
145
|
+
`kindgi dev` on the machine and left running), or the one you name with
|
|
146
|
+
`--database-url` / `KINDGI_DATABASE_URL`. The bundled one is published on
|
|
147
|
+
a random port on `127.0.0.1` only, since its password is a fixed dev one;
|
|
148
|
+
the runtime container reaches it through `host.docker.internal` (Docker
|
|
149
|
+
Desktop) or directly (Linux host networking). A `kindgi-dev_postgres`
|
|
150
|
+
started by an earlier CLI keeps its old binding (every address) until
|
|
151
|
+
it's recreated: `kindgi dev --recreate-services` with compose, or, without
|
|
152
|
+
compose, `docker rm -f kindgi-dev_postgres` (its data stays in the volume)
|
|
153
|
+
and run `kindgi dev` again.
|
|
154
|
+
- **The pack is indexed and watched.** `kindgi dev` finds every tool,
|
|
155
|
+
guardrail, agent and flow, and on each save re-indexes, rebuilds the code
|
|
156
|
+
and restarts the pack service. The next request sees the new definitions;
|
|
157
|
+
a run already in flight keeps the version it started with.
|
|
158
|
+
|
|
159
|
+
| Flag | Purpose |
|
|
160
|
+
|---|---|
|
|
161
|
+
| `--port=<n>` | The port the API is reached on, on `127.0.0.1`. Default `4000`. |
|
|
162
|
+
| `--database-url=<url>` | The Postgres to use. Falls back to `KINDGI_DATABASE_URL` (the shell's, then the env files'). Without either, the bundled Postgres. |
|
|
163
|
+
| `--tenant=<id>` | Pin the tenant. Default: the previous run's (from `.kindgirc.json`), else a new one. The pack's primitives and registered providers stay with it. |
|
|
164
|
+
| `--dev-token=<token>` | Pin the API token. Default: the previous run's, else a new one. Each flag overrides only its own value: `--dev-token` alone keeps the tenant. |
|
|
165
|
+
| `--path=<dir>` | The pack root. Default: the current directory. It must have a `kindgi.config.ts`, or a `pyproject.toml` with a `[tool.kindgi]` table. |
|
|
166
|
+
| `--no-watch` | Start, index once, and exit. For smoke tests and CI. |
|
|
167
|
+
| `--reset` | Start this pack fresh: removes `.kindgirc.json`, so the boot makes a new tenant and token and the pack sees none of its earlier data. The bundled Postgres, which every pack on the machine shares, is left alone. (To wipe all dev data: `docker compose -p kindgi-dev down -v`; without compose, `docker rm -f kindgi-dev_postgres`, then `docker volume rm kindgi-dev_postgres-data`.) |
|
|
168
|
+
| `--recreate-services` | Let `docker compose` recreate the bundled Postgres if its definition changed. By default an existing container is reused as it is, so no other `kindgi dev` loses its database. Without compose, an existing container is always reused, and `kindgi dev` says how to recreate it by hand. |
|
|
169
|
+
| `--runtime-image=<ref>` | The runtime image to run. Default: the one this CLI release was tested with. |
|
|
170
|
+
| `--runtime-url=<url>` | Use a runtime you run yourself instead of starting the container. Start it with the pack's `.kindgi/dev/runtime.env`. |
|
|
171
|
+
|
|
172
|
+
### The runtime container
|
|
173
|
+
|
|
174
|
+
- **Configuration:** everything the runtime is told is written to
|
|
175
|
+
`.kindgi/dev/runtime.env` (mode `0600`) and passed with
|
|
176
|
+
`docker run --env-file`. The runtime reads nothing else from your
|
|
177
|
+
machine.
|
|
178
|
+
- **Your machine's `localhost`:** calls the runtime makes to `localhost` (your
|
|
179
|
+
app's `run.finished` webhook, an MCP server, a model server you run
|
|
180
|
+
locally) reach your machine. On Docker Desktop they go through
|
|
181
|
+
`host.docker.internal`. On Linux the container shares the host's network
|
|
182
|
+
and runs as your user, so files it writes into the pack stay yours.
|
|
183
|
+
- **Google Cloud credentials:** for Vertex AI models, your Application
|
|
184
|
+
Default Credentials file (`GOOGLE_APPLICATION_CREDENTIALS`, else the one
|
|
185
|
+
`gcloud auth application-default login` writes) is mounted read-only.
|
|
186
|
+
Kindgi keeps no key files of its own.
|
|
187
|
+
- **The image:** the runtime image is pulled on first use. It is in
|
|
188
|
+
private preview: request access at contact@kindgi.com, then log Docker in
|
|
189
|
+
with the pull credentials you receive:
|
|
190
|
+
`kindgi auth registry --username <robot name>` (see
|
|
191
|
+
[The runtime image's registry](#the-runtime-images-registry)). `kindgi dev`
|
|
192
|
+
says so when a pull is refused.
|
|
193
|
+
|
|
194
|
+
### Env files
|
|
195
|
+
|
|
196
|
+
`kindgi dev` runs as the `local` environment and reads the project's own env
|
|
197
|
+
files at the pack root: `.env`, then `.env.local` on top, parsed the way the
|
|
198
|
+
application beside the pack parses them (dotenv grammar, `${VAR}`
|
|
199
|
+
expansion). Nothing is copied: a key already in the app's `.env` is available
|
|
200
|
+
to the pack.
|
|
201
|
+
|
|
202
|
+
- **`KINDGI_*` names configure Kindgi itself** (e.g. `KINDGI_DATABASE_URL`).
|
|
203
|
+
Precedence: flag > shell > env files.
|
|
204
|
+
- **Every other name belongs to the pack**: providers, tools and MCP servers
|
|
205
|
+
resolve them as secrets. `KINDGI_*` names never resolve as secrets, so the
|
|
206
|
+
app's own `DATABASE_URL` stays the app's.
|
|
207
|
+
- **Writes** (`kindgi secrets set`, `kindgi env set --env=local`) go to the
|
|
208
|
+
highest-precedence file (`.env.local`), and every other line is kept.
|
|
209
|
+
Kindgi never edits a lower file such as the app's `.env`.
|
|
210
|
+
- **Different files?** List them, lowest precedence first, and restart
|
|
211
|
+
`kindgi dev`:
|
|
212
|
+
|
|
213
|
+
```ts
|
|
214
|
+
export default {
|
|
215
|
+
pack: { id: 'acme.app', version: '1.0.0' },
|
|
216
|
+
dev: { envFiles: ['.env', '.env.development', '.env.local'] },
|
|
217
|
+
};
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
The startup output names the files it found and how many names they give the
|
|
221
|
+
pack. A malformed line is reported as `file:line`, never its text.
|
|
222
|
+
|
|
223
|
+
**The names the pack's code reads.** Declare them in `kindgi.config.ts`:
|
|
224
|
+
|
|
225
|
+
```ts
|
|
226
|
+
export default {
|
|
227
|
+
pack: { id: 'acme.app', version: '1.0.0' },
|
|
228
|
+
env: { required: ['DATABASE_URL'], optional: ['LOG_LEVEL'] },
|
|
229
|
+
};
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
A required name the env files don't give gets a warning in `kindgi dev`, which
|
|
233
|
+
keeps serving. A deployed pack service isn't ready without it, and says which
|
|
234
|
+
names it lacks. A deployment injects exactly the declared names.
|
|
235
|
+
|
|
236
|
+
### Model providers
|
|
237
|
+
|
|
238
|
+
A tenant with no providers gets `dev-echo`, a fallback provider (scripted
|
|
239
|
+
replies, no key, no network) that answers only while no other provider fits.
|
|
240
|
+
Agent turns run before you register a model, and registering one takes over
|
|
241
|
+
with nothing to switch off:
|
|
242
|
+
|
|
243
|
+
```sh
|
|
244
|
+
kindgi providers register --preset=anthropic # the key must be in the env files
|
|
245
|
+
kindgi providers register --preset=gemini --project=<gcp-project>
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
A turn the fallback answers carries a `fallback-provider` warning, which
|
|
249
|
+
`kindgi runs start` prints. `kindgi providers unregister dev-echo` removes it
|
|
250
|
+
for good.
|
|
251
|
+
|
|
252
|
+
**Any OpenAI-compatible endpoint** — an open-source model you serve yourself
|
|
253
|
+
(vLLM, llama.cpp's `llama-server`, Ollama, LM Studio), OpenRouter, a LiteLLM
|
|
254
|
+
proxy — registers with `--spec`, naming its base URL in `adapter_config`:
|
|
255
|
+
|
|
256
|
+
```json
|
|
257
|
+
{
|
|
258
|
+
"adapter_id": "@kindgi/adapter-model-openai-compat",
|
|
259
|
+
"adapter_config": { "baseURL": "http://127.0.0.1:8000/v1" },
|
|
260
|
+
"metadata": {
|
|
261
|
+
"id": "qwen-local",
|
|
262
|
+
"region": "unspecified",
|
|
263
|
+
"models": [{ "name": "qwen3.5-4b", "contextWindow": 32768, "features": ["tool-use"],
|
|
264
|
+
"cost": { "promptUsdPer1kTokens": 0, "completionUsdPer1kTokens": 0 } }]
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
`kindgi providers register --spec=@qwen.json`, then point an agent at it
|
|
270
|
+
(`preferred_provider="qwen-local"`). An endpoint that needs a key takes a
|
|
271
|
+
`secret_ref` (`{ "envName": "local", "name": "MY_KEY" }`), resolved on every
|
|
272
|
+
call. The model must call tools in the OpenAI format: serve it with tool
|
|
273
|
+
calling on (vLLM `--enable-auto-tool-choice --tool-call-parser <model's>`,
|
|
274
|
+
`llama-server --jinja`) and, for a thinking model such as Qwen, thinking off: on the server
|
|
275
|
+
(vLLM `--default-chat-template-kwargs '{"enable_thinking": false}'`, `llama-server --reasoning off`),
|
|
276
|
+
or, for a shared server you can't reconfigure, per request from the provider row:
|
|
277
|
+
`"extraBody.chat_template_kwargs.enable_thinking": false` in `adapter_config` (one flat key per
|
|
278
|
+
request field; dots nest).
|
|
279
|
+
|
|
280
|
+
### What you see
|
|
281
|
+
|
|
282
|
+
```
|
|
283
|
+
✓ Kindgi is up
|
|
284
|
+
API http://127.0.0.1:4000
|
|
285
|
+
Console http://127.0.0.1:4000/console/
|
|
286
|
+
Tenant c9a4…
|
|
287
|
+
Token kgi_bt_…
|
|
288
|
+
Providers dev-echo (fallback) — …
|
|
289
|
+
Origins …
|
|
290
|
+
|
|
291
|
+
Try it (from another terminal, cd to the pack dir first):
|
|
292
|
+
pnpm exec kindgi runs start --agent=my-pack.echo-agent --input='{"userMessage":"hi"}'
|
|
293
|
+
pnpm exec kindgi runs stream <run-id>
|
|
294
|
+
|
|
295
|
+
Watching /path/to/my-pack
|
|
296
|
+
Ctrl+C to stop.
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Progress and the runtime's own log lines (`[runtime] …`, `[pack] …`) go to
|
|
300
|
+
stderr. With `--json` or `--raw`, a JSON summary goes to stdout when it
|
|
301
|
+
exits, so `kindgi dev --no-watch --raw | jq` works.
|
|
302
|
+
|
|
303
|
+
### Watching
|
|
304
|
+
|
|
305
|
+
`kindgi dev` watches the pack's `discovery` patterns from `kindgi.config.ts`
|
|
306
|
+
(default `tools/`, `agents/`, `guardrails/`, `flows/`; an app with Kindgi
|
|
307
|
+
added watches `kindgi/`), and the env files. Only each pattern's fixed
|
|
308
|
+
directory is watched, never the whole app. The dev index lives at
|
|
309
|
+
`.kindgi/dev/index.json`.
|
|
310
|
+
|
|
311
|
+
- An empty pack is not an error: the output says where to add the first
|
|
312
|
+
primitive. Its pack service starts with the first primitive; until then
|
|
313
|
+
the runtime may warn once that the pack service isn't answering.
|
|
314
|
+
- A file that fails to index or build (a bad schema, a missing default
|
|
315
|
+
export, a syntax error) is reported with its path and the error, and the
|
|
316
|
+
previous code keeps serving until you fix it and save.
|
|
317
|
+
- A package the pack imports that `package.json` lists only in
|
|
318
|
+
`devDependencies` gets a warning naming it and the files importing it, at
|
|
319
|
+
startup and when a save adds one (once per package; the next reload after
|
|
320
|
+
you fix it says so). It loads here, but a deployed pack installs
|
|
321
|
+
production dependencies only, so `kindgi build` refuses it. `--json` lists
|
|
322
|
+
them as `devOnlyImports`. A Python pack isn't checked.
|
|
323
|
+
- Deleting a primitive's folder removes it from the catalog.
|
|
324
|
+
|
|
325
|
+
### A Python pack
|
|
326
|
+
|
|
327
|
+
A pack whose config is the `[tool.kindgi]` table of its `pyproject.toml` is a
|
|
328
|
+
Python pack: its tools and guardrail checks are Python, its agents and flows
|
|
329
|
+
data. `kindgi dev` runs it the same way, with the pack's own interpreter:
|
|
330
|
+
|
|
331
|
+
- **The interpreter:** `dev.python` in `[tool.kindgi]` (a path, or a command
|
|
332
|
+
such as `["uv", "run", "python"]`), else the pack's `.venv/bin/python`,
|
|
333
|
+
else `python3`. It must import `kindgi` with the pack's environment, or
|
|
334
|
+
`kindgi dev` stops and says how to install it.
|
|
335
|
+
- **Build:** every `.py` file under the pack root is compiled; a syntax
|
|
336
|
+
error is reported as `file:line:col` and the previous code keeps serving.
|
|
337
|
+
- **Index and serve:** `python -m kindgi.pack index`, then
|
|
338
|
+
`python -m kindgi.pack serve` in the pack service. The runtime can't tell
|
|
339
|
+
it from a Node pack.
|
|
340
|
+
- **Watch:** any `.py` file under the pack root (shared modules included)
|
|
341
|
+
and `pyproject.toml`.
|
|
342
|
+
- **The CLI:** a Python pack has no npm project, so it runs the published
|
|
343
|
+
CLI through npx (Node 22 needed): `npx --yes @kindgi/cli@0.1 <command>`, within
|
|
344
|
+
the CLI's minor, in the startup hints and in the `.mcp.json` entries
|
|
345
|
+
`kindgi mcp add` writes.
|
|
346
|
+
|
|
347
|
+
### Stopping
|
|
348
|
+
|
|
349
|
+
Ctrl+C (or SIGTERM) stops the watchers, the pack service and the runtime
|
|
350
|
+
container, on one line: `Stopping kindgi dev... stopped.` A second Ctrl+C
|
|
351
|
+
forces the exit. The bundled Postgres keeps running for the next
|
|
352
|
+
`kindgi dev`. The exit code is `0` after a clean stop and `1` if startup
|
|
353
|
+
failed.
|
|
354
|
+
|
|
355
|
+
## `kindgi test`
|
|
356
|
+
|
|
357
|
+
```sh
|
|
358
|
+
kindgi test [--watch] [--reporter <name>] [--path <dir>] [-- <vitest-args>...]
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
Runs the pack's tests with the pack's own vitest (the CLI bundles none, so the
|
|
362
|
+
pack chooses its vitest version). The templates include a `vitest.config.ts`
|
|
363
|
+
and a first test. `--watch` runs vitest in watch mode; everything after `--`
|
|
364
|
+
goes to vitest as is. The CLI refuses to run without a `vitest.config.*` at
|
|
365
|
+
the pack root, and uses `pnpm exec vitest` in a pnpm project, else
|
|
366
|
+
`npx --no-install vitest`.
|
|
367
|
+
|
|
368
|
+
## `kindgi build`
|
|
369
|
+
|
|
370
|
+
```sh
|
|
371
|
+
kindgi build [--local [--push [<repository>]] [--platform <os/arch>]] [--env <name>] [--endpoint <url>] [--target <t>] [--out <dir>]
|
|
372
|
+
[--artifact-version <v>] [--published-at <iso>] [--tenant <id>]
|
|
373
|
+
[--signing-key <path>] [--registry-push-creds <ref>]
|
|
374
|
+
[--skip-integrity-gate] [--skip-image-pull] [--skip-sign] [--path <dir>]
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
Builds a signed pack image with a Kindgi build server, and writes
|
|
378
|
+
`deploy-envelope.json` for `kindgi deploy`:
|
|
379
|
+
|
|
380
|
+
1. **Config:** reads `kindgi.config.ts` and the `--env` block (default
|
|
381
|
+
`staging`): the build server, the tenant and the signing key.
|
|
382
|
+
2. **Bundle:** bundles every primitive and the config with esbuild, each
|
|
383
|
+
`.mjs` with a sourcemap. The pack's own code, and the app code it imports,
|
|
384
|
+
is bundled; the app's installed dependencies stay external, imported by
|
|
385
|
+
name from the image's `node_modules`. The pack service and the indexer are
|
|
386
|
+
self-contained bundles. A Python pack ships its source and lockfile
|
|
387
|
+
instead.
|
|
388
|
+
3. **Index:** runs the bundled indexer over the bundles locally, into
|
|
389
|
+
`expected-index.json`, exactly as the image's indexer stage will.
|
|
390
|
+
4. **Containerfile and context:** writes a multi-stage `Containerfile`
|
|
391
|
+
and the build context:
|
|
392
|
+
- what the install reads: `package.json`, the lockfile, every workspace
|
|
393
|
+
member's `package.json`, the workspace file, patches, and tarballs
|
|
394
|
+
vendored in the project;
|
|
395
|
+
- the bundles;
|
|
396
|
+
- what `bundle.include` lists.
|
|
397
|
+
|
|
398
|
+
The pack's source never ships. Env files, `.kindgirc.json`, private keys
|
|
399
|
+
and anything under `.git/`, `.kindgi/` or `node_modules/` are refused: a
|
|
400
|
+
build that would ship one fails and names it. `.npmrc` and `.yarnrc*` are
|
|
401
|
+
read by the install as build secrets, never copied into the image.
|
|
402
|
+
5. **Build:** uploads the context (`pack.tgz`) to the build server and
|
|
403
|
+
streams its log.
|
|
404
|
+
6. **Integrity gate:** the image's index must match the local one, byte for
|
|
405
|
+
byte (`--skip-image-pull` compares hashes only, without pulling the image).
|
|
406
|
+
7. **Sign and write:** signs the image digest and index hash with your
|
|
407
|
+
Ed25519 key and writes `.kindgi/build/deploy-envelope.json`.
|
|
408
|
+
|
|
409
|
+
**The image (a TypeScript pack):**
|
|
410
|
+
- **Base:** `node:22` or `node:24-bookworm-slim`, pinned by digest: the
|
|
411
|
+
first whose Node satisfies the app's `engines.node`.
|
|
412
|
+
- **Install:** the app's dependencies, installed the way the app installs
|
|
413
|
+
them, from its own lockfile, frozen. pnpm and yarn come through corepack
|
|
414
|
+
and the `packageManager` field. Build scripts are off during the install;
|
|
415
|
+
then `rebuild` runs the ones the app allows, and the install is pruned to
|
|
416
|
+
production dependencies.
|
|
417
|
+
- **A workspace:** with pnpm, only the pack's project and what it depends on
|
|
418
|
+
are installed, not the rest of the workspace. npm and yarn install the
|
|
419
|
+
whole workspace.
|
|
420
|
+
- **Layout:** the lockfile's folder is `/app`, and a pack inside a workspace
|
|
421
|
+
member sits at its own path.
|
|
422
|
+
- **Runs:** the pack service, under tini, as `node`, on `$PORT` (8080).
|
|
423
|
+
|
|
424
|
+
A dependency linked from outside the project (`link:../…`, `file:/…`) can't be
|
|
425
|
+
installed in an image: vendor it as a tarball inside the project
|
|
426
|
+
(`file:vendor/<name>.tgz`) or install it from a registry.
|
|
427
|
+
|
|
428
|
+
**What the image needs beyond the install** goes in `image`, with
|
|
429
|
+
`@kindgi/sdk/build`:
|
|
430
|
+
|
|
431
|
+
```ts
|
|
432
|
+
import { prisma } from '@kindgi/sdk/build';
|
|
433
|
+
|
|
434
|
+
export default {
|
|
435
|
+
pack: { id: 'acme.app', version: '1.0.0' },
|
|
436
|
+
image: {
|
|
437
|
+
systemPackages: ['tesseract-ocr'], // Debian packages
|
|
438
|
+
extensions: [prisma({ schema: 'prisma/schema.prisma', config: 'prisma.config.ts' })],
|
|
439
|
+
buildEnv: { DATABASE_URL: 'postgresql://build-placeholder' },
|
|
440
|
+
},
|
|
441
|
+
};
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
- `systemPackages` are installed in the base image.
|
|
445
|
+
- `prisma()` copies the schema (and config) into the image and runs
|
|
446
|
+
`prisma generate` after the install, before the prune. The app's own
|
|
447
|
+
`postinstall` doesn't run in the image, because the install runs with
|
|
448
|
+
scripts off.
|
|
449
|
+
- `buildEnv` holds non-secret placeholders for the build steps, and for the
|
|
450
|
+
indexer, which imports the pack's modules. It's never in the final image.
|
|
451
|
+
- `defineBuildExtension()` makes an app's own extension from the same parts:
|
|
452
|
+
`contextFiles`, `systemPackages`, `postInstall` steps (a package's bin, run
|
|
453
|
+
through the app's package manager) and `buildEnv`.
|
|
454
|
+
|
|
455
|
+
**`--local`:** builds the image with this machine's Docker
|
|
456
|
+
(`docker buildx build --load`) into its image store, as
|
|
457
|
+
`kindgi-pack/<packId>:<artifactVersion>`, with the same integrity gate. There
|
|
458
|
+
is no build server, signature or envelope, and no tenant or signing key
|
|
459
|
+
needed. It prints a `docker run` line.
|
|
460
|
+
|
|
461
|
+
**`--local --push`:** publishes from this machine, for `kindgi deploy`:
|
|
462
|
+
1. builds the image for the deployment's platform: `linux/amd64` by default,
|
|
463
|
+
which Cloud Run runs (on Apple silicon, under emulation); `--platform`
|
|
464
|
+
overrides it;
|
|
465
|
+
2. pushes it to `<repository>:<artifactVersion>`. The repository is `--push`'s
|
|
466
|
+
value, else `environments.<env>.registry` + `/<packId>`;
|
|
467
|
+
3. pulls it back by digest for the integrity gate;
|
|
468
|
+
4. signs it as the build service path does, and writes
|
|
469
|
+
`.kindgi/build/deploy-envelope.json`.
|
|
470
|
+
|
|
471
|
+
It uses your own Docker credentials for the registry, for example
|
|
472
|
+
`gcloud auth configure-docker <region>-docker.pkg.dev` for Artifact Registry.
|
|
473
|
+
Kindgi holds none. It needs the env block's `tenantId` and `signingKey`, or
|
|
474
|
+
`--tenant` and `--signing-key`.
|
|
475
|
+
|
|
476
|
+
Files a tool reads at runtime, rather than imports, go in `bundle.include`:
|
|
477
|
+
|
|
478
|
+
```ts
|
|
479
|
+
export default {
|
|
480
|
+
pack: { id: 'acme.app', version: '1.0.0' },
|
|
481
|
+
bundle: { include: ['kindgi/data/**/*.json'] },
|
|
482
|
+
};
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
**A Python pack:** the image is `python:3.13-slim-bookworm` with `uv`, both pinned by
|
|
486
|
+
digest, and the pack's dependencies come from its lockfile (`uv.lock`, or a
|
|
487
|
+
Poetry app's `poetry.lock`; one is required). Debian packages the code needs
|
|
488
|
+
go in `[tool.kindgi.image] system-packages = ["tesseract-ocr"]`. The image's
|
|
489
|
+
uv version must be in the pack's `[tool.uv] required-version`; `kindgi
|
|
490
|
+
build` stops before uploading when it isn't.
|
|
491
|
+
|
|
492
|
+
**Reproducible:** the build pins `SOURCE_DATE_EPOCH=0`, the publish time
|
|
493
|
+
(`--published-at`, default the epoch) and the artifact version
|
|
494
|
+
(`--artifact-version`, default `YYYYMMDD.1`), and the base images by digest,
|
|
495
|
+
so the same inputs give the same image.
|
|
496
|
+
|
|
497
|
+
| Flag | Purpose |
|
|
498
|
+
|---|---|
|
|
499
|
+
| `--local` | Build with this machine's Docker instead of a build server: no signing, no envelope. TypeScript packs. |
|
|
500
|
+
| `--push[=<repository>]` | With `--local`: push the image, sign it, and write the envelope. Default repository: the env block's `registry` + `/<packId>`. |
|
|
501
|
+
| `--platform=<os/arch>` | The image's platform. Default: `linux/amd64` when pushing, else this machine's. |
|
|
502
|
+
| `--endpoint=<url>` | The build server. Default: the env block's `build`. |
|
|
503
|
+
| `--tenant=<id>` | The tenant the signature names. Default: the env block's `tenantId`, else `KINDGI_TENANT_ID`. |
|
|
504
|
+
| `--signing-key=<path>` | The Ed25519 private key (PEM). Default: the env block's `signingKey`. |
|
|
505
|
+
| `--skip-integrity-gate` | Sign without re-checking the image's index. Prints a warning. |
|
|
506
|
+
| `--skip-sign` | Write an unsigned envelope (for CI that signs elsewhere); `kindgi deploy` refuses it. |
|
|
507
|
+
|
|
508
|
+
## `kindgi deploy`
|
|
509
|
+
|
|
510
|
+
```sh
|
|
511
|
+
kindgi deploy [--env <name>] [--from-envelope <path>] [--endpoint <url>] [--token <bearer>]
|
|
512
|
+
[--tenant <id>] [--idempotency-key <str>] [--dry-run] [--sync-secrets]
|
|
513
|
+
[--allow-missing-env] [--path <dir>] # plus kindgi build's flags, used when there is no envelope yet
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
Sends the signed envelope to `POST /v1/deployments` and prints the
|
|
517
|
+
deployment. The envelope is `--from-envelope`, else
|
|
518
|
+
`.kindgi/build/deploy-envelope.json`, else `kindgi deploy` runs
|
|
519
|
+
`kindgi build` first (`--build-endpoint` is the build server there, since
|
|
520
|
+
`--endpoint` is the API).
|
|
521
|
+
|
|
522
|
+
- **The API:** `--endpoint`, else the env block's `endpoint`, else
|
|
523
|
+
`--url` / `KINDGI_API_URL`.
|
|
524
|
+
- **Idempotent:** the `Idempotency-Key` header is a hash of the request
|
|
525
|
+
body (`--idempotency-key` overrides it). Deploying the same image again
|
|
526
|
+
returns the same deployment.
|
|
527
|
+
- **`--tenant`** must match the envelope's tenant, checked before anything
|
|
528
|
+
is sent.
|
|
529
|
+
- **`--dry-run`** prints the equivalent `curl` command and sends nothing.
|
|
530
|
+
- **The pack service's env, checked first.** When the pack declares `env`,
|
|
531
|
+
the deploy prints the plan for `--env` (see `kindgi env plan`). It refuses
|
|
532
|
+
when a required name has no value or reference in `environments.<env>.env`
|
|
533
|
+
(`--allow-missing-env` deploys anyway, with a warning), or when a secret is
|
|
534
|
+
given in the clear. That case has no override.
|
|
535
|
+
- **`--sync-secrets`** also sends the values in `.env.<envName>` to the
|
|
536
|
+
deployment's secrets after it lands. Off by default; without it, a deploy
|
|
537
|
+
with such a file says what it didn't send. With it, secret-shaped names
|
|
538
|
+
(`*_KEY`, `*_TOKEN`, `*_SECRET`, …) get a warning: those belong in
|
|
539
|
+
`kindgi secrets set`.
|
|
540
|
+
- **Errors** carry a hint for the common ones: `signature-invalid`,
|
|
541
|
+
`signer-not-trusted`, `image-unverifiable`,
|
|
542
|
+
`deployment-validation-failed`.
|
|
543
|
+
|
|
544
|
+
## `kindgi env`
|
|
545
|
+
|
|
546
|
+
```sh
|
|
547
|
+
kindgi env list [--env <name>] [--reveal] [--force-reveal] [--path <dir>]
|
|
548
|
+
kindgi env set <KEY> <VALUE> [--env <name>] [--force] [--path <dir>]
|
|
549
|
+
kindgi env unset <KEY> [--env <name>] [--path <dir>]
|
|
550
|
+
kindgi env pull [--env <name>] --scope=<kind>[:id] [--overwrite-existing] [--path <dir>]
|
|
551
|
+
kindgi env init [--secrets-backend=<none|postgres|secret-manager>] [--kms=<gcp|aws|libsodium|vault>] [--out=<path>]
|
|
552
|
+
kindgi env plan [--env <name>] [--format=terraform|gcloud] [--path <dir>]
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
Per-environment values for the pack, in env files next to
|
|
556
|
+
`kindgi.config.ts`. `--env` defaults to `staging`.
|
|
557
|
+
|
|
558
|
+
- **`--env=local`** is the project's own env files, the ones `kindgi dev`
|
|
559
|
+
reads (`.env` < `.env.local`, or `dev.envFiles`). `list` shows the merged
|
|
560
|
+
view and which file each key came from; `set` and `unset` edit only the
|
|
561
|
+
highest-precedence file, and say so when a lower file (the app's `.env`)
|
|
562
|
+
still defines the key.
|
|
563
|
+
- **Any other env** is `.env.<envName>`, the file
|
|
564
|
+
`kindgi deploy --sync-secrets` sends.
|
|
565
|
+
- **`list`** redacts values; `--reveal` prints them, but not to a pipe
|
|
566
|
+
without `--force-reveal`.
|
|
567
|
+
- **`pull`** fetches the env's values from the API into `.env.<envName>`.
|
|
568
|
+
- **`init`** writes a `.env.example` for a deployment target.
|
|
569
|
+
- **Format:** dotenv, read the way `dotenv` (and Next.js) read it, with
|
|
570
|
+
`${VAR}` expansion. `set` and `unset` touch one key and keep every other
|
|
571
|
+
byte.
|
|
572
|
+
- **`KINDGI_*` names are refused:** they configure the runtime and belong in
|
|
573
|
+
its environment, not the pack's.
|
|
574
|
+
- **`plan`** shows the process env a deployed pack service gets in `--env`:
|
|
575
|
+
each name the pack declares (`env.required` / `env.optional`) and its source
|
|
576
|
+
in `environments.<env>.env` in `kindgi.config.ts`. A source is a plain value,
|
|
577
|
+
or a Secret Manager reference that the platform resolves with the pack
|
|
578
|
+
service's own identity (Kindgi never sees the value):
|
|
579
|
+
|
|
580
|
+
```ts
|
|
581
|
+
environments: {
|
|
582
|
+
production: {
|
|
583
|
+
env: {
|
|
584
|
+
LOG_LEVEL: 'info',
|
|
585
|
+
DATABASE_URL: { secret: 'acme-db-url', version: '3' },
|
|
586
|
+
// a secret in another project, named by project number:
|
|
587
|
+
SHARED_TOKEN: { secret: 'shared-token', version: '2', project: '123456789012' },
|
|
588
|
+
},
|
|
589
|
+
},
|
|
590
|
+
},
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
It prints the Terraform input (`env` and `secret_env`), or with
|
|
594
|
+
`--format=gcloud` the `--set-env-vars` / `--set-secrets` flags. It exits 1
|
|
595
|
+
when a required name has no source, or when a secret is given as a plain
|
|
596
|
+
value: by its name (`*_KEY`, `*_TOKEN`, …) or by a credential in it (a URL
|
|
597
|
+
with a password). That value is never printed. A reference to version
|
|
598
|
+
`latest` is read when an instance starts, so a new version needs a new
|
|
599
|
+
revision.
|
|
600
|
+
|
|
601
|
+
## `kindgi secrets`
|
|
602
|
+
|
|
603
|
+
```sh
|
|
604
|
+
kindgi secrets list|get|set|rotate|revoke|pull --env=<name> --scope=<kind>[:id] …
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
Secrets through the API's `/v1/secrets` routes. Values are never printed and
|
|
608
|
+
never returned: `list` and `get` show metadata only, and `pull` writes a
|
|
609
|
+
manifest (`.secrets/<envName>/manifest.json`), not the values. `set` and
|
|
610
|
+
`rotate` read the value from a no-echo prompt, `--from-stdin` or
|
|
611
|
+
`--from-file` (a file others can read is refused). `revoke` keeps an audit
|
|
612
|
+
tombstone; `--hard` erases the value. Under `kindgi dev`, `--env=local`
|
|
613
|
+
writes to the pack's `.env.local`.
|
|
614
|
+
|
|
615
|
+
## `kindgi key`
|
|
616
|
+
|
|
617
|
+
```sh
|
|
618
|
+
kindgi key create <keyId> [--env <name>] [--home <dir>]
|
|
619
|
+
kindgi key export <keyId> [--format=pem|base64|raw-hex] [--home <dir>]
|
|
620
|
+
kindgi key list [--home <dir>]
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
Ed25519 signing keys for `kindgi build`, as files under `~/.kindgi/keys/`
|
|
624
|
+
(the directory `0700`, `<keyId>.pem` `0600`, `<keyId>.pub.pem` `0644`).
|
|
625
|
+
|
|
626
|
+
- **`create`** generates a key pair and refuses to overwrite an existing
|
|
627
|
+
one. With `--env`, it prints what to add to that env block in
|
|
628
|
+
`kindgi.config.ts`.
|
|
629
|
+
- **`export`** prints the public key only, never the private one.
|
|
630
|
+
- **`list`** shows each key pair's id, fingerprint and paths.
|
|
631
|
+
|
|
632
|
+
## `kindgi skills`
|
|
633
|
+
|
|
634
|
+
`kindgi skills sync [--force] [--dry-run]` refreshes `.claude/skills/` from the
|
|
635
|
+
skills bundled with this CLI. Skills you edited are kept unless `--force`.
|
|
636
|
+
`kindgi dev` mentions it when the installed skills are behind.
|
|
637
|
+
|
|
638
|
+
## `kindgi mcp`
|
|
639
|
+
|
|
640
|
+
MCP servers for your coding agent (Claude Code, Cursor, VS Code, …), not for
|
|
641
|
+
the runtime:
|
|
642
|
+
|
|
643
|
+
```sh
|
|
644
|
+
kindgi mcp presets
|
|
645
|
+
kindgi mcp add postgres --secret=MY_DB_URL
|
|
646
|
+
kindgi mcp list
|
|
647
|
+
kindgi mcp remove <server-name>
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
`add` writes an entry to `.mcp.json` at the pack root. The entry runs
|
|
651
|
+
`kindgi mcp-launch`, which starts the MCP server with the secret from the
|
|
652
|
+
pack's env files in its environment, so the secret is never written into
|
|
653
|
+
`.mcp.json`. The `kindgi-authoring-mcp-servers` skill covers the details.
|
|
654
|
+
|
|
655
|
+
## `kindgi feedback`
|
|
656
|
+
|
|
657
|
+
`kindgi feedback write --kind=bug --title="…"` appends a note about framework
|
|
658
|
+
friction to `FEEDBACK.md` at the pack root, where a coding agent can leave
|
|
659
|
+
what it diagnosed for the maintainers.
|
|
660
|
+
|
|
661
|
+
## API commands
|
|
662
|
+
|
|
663
|
+
These call a running Kindgi API through [`@kindgi/client`](../../sdks/typescript).
|
|
664
|
+
Inside a pack that `kindgi dev` runs, they find it on their own (see
|
|
665
|
+
[Auth and config](#auth-and-config)).
|
|
666
|
+
|
|
667
|
+
| Command | Subcommands |
|
|
668
|
+
|---|---|
|
|
669
|
+
| `runs` | `list`, `get`, `cancel`, `journal`, `stream` (one JSON event per line), `start`, `resume` |
|
|
670
|
+
| `agents` | `publish` |
|
|
671
|
+
| `tools` | `list`, `get`, `unregister`, `versions`, `get-version`, `reinstate` |
|
|
672
|
+
| `guardrails` | `list`, `get`, `register`, `unregister` |
|
|
673
|
+
| `providers` | `list`, `get`, `register`, `presets`, `unregister` |
|
|
674
|
+
| `adapters` | `prepare` |
|
|
675
|
+
| `approvals` | `list`, `get`, `complete` |
|
|
676
|
+
| `reviewers` | `list`, `get`, `register`, `unregister` |
|
|
677
|
+
| `health` | `GET /health`, no auth |
|
|
678
|
+
| `version` | The CLI's and SDK's versions, and the API's when it's reachable |
|
|
679
|
+
|
|
680
|
+
`kindgi runs start` starts a run for an agent (`--agent=<id>`) or a flow
|
|
681
|
+
(`--flow=<id>`) and waits for it to finish. `--no-wait` prints a flow run as
|
|
682
|
+
soon as it exists and lets it finish in the background (follow it with
|
|
683
|
+
`runs get` or `runs stream`); an agent run always answers when its turn ends.
|
|
684
|
+
`--dry-run` runs only the tools declared read-only (`mutating: false`).
|
|
685
|
+
|
|
686
|
+
`kindgi <command> --help` prints a command's subcommands and flags.
|
|
687
|
+
|
|
688
|
+
More of the API (memory, artifacts, provenance, conversations, proposals,
|
|
689
|
+
observations, tokens, capabilities, and listing agents and flows) has
|
|
690
|
+
commands in progress. They're left out of `--help` until they work; until
|
|
691
|
+
then, use [`@kindgi/client`](../../sdks/typescript) for those resources.
|
|
692
|
+
|
|
693
|
+
## Auth and config
|
|
694
|
+
|
|
695
|
+
The API URL and token come from, in order:
|
|
696
|
+
|
|
697
|
+
| Source | API URL | Token |
|
|
698
|
+
|---|---|---|
|
|
699
|
+
| Flag | `--url` | `--token` |
|
|
700
|
+
| Environment | `KINDGI_API_URL` | `KINDGI_API_TOKEN` |
|
|
701
|
+
| `.kindgirc.json` in the current directory | `apiUrl` | `token` |
|
|
702
|
+
| `~/.kindgi/config.json` | `apiUrl` | `token` |
|
|
703
|
+
|
|
704
|
+
`kindgi dev` writes `.kindgirc.json` in the pack. For another API, save the
|
|
705
|
+
pair once with `kindgi auth login --url=<url> --token=<token>`, and check it
|
|
706
|
+
with `kindgi auth whoami`.
|
|
707
|
+
|
|
708
|
+
### The runtime image's registry
|
|
709
|
+
|
|
710
|
+
The Kindgi runtime image `kindgi dev` runs is in private preview: request
|
|
711
|
+
access at contact@kindgi.com. With the pull credentials you receive (a robot
|
|
712
|
+
name and a token), log Docker in once:
|
|
713
|
+
|
|
714
|
+
```sh
|
|
715
|
+
kindgi auth registry --username <robot name> # prompts for the token, without echoing it
|
|
716
|
+
printf '%s' "$TOKEN" | kindgi auth registry --username <robot name> --password-stdin
|
|
717
|
+
kindgi auth registry --check # only check access, no login
|
|
718
|
+
```
|
|
719
|
+
|
|
720
|
+
It runs `docker login` with the token on its stdin, never in its arguments,
|
|
721
|
+
so the credential lives in Docker's own credential store: Kindgi stores
|
|
722
|
+
nothing. Then it checks that Docker can pull the exact image this CLI runs
|
|
723
|
+
(pinned by digest; with `docker buildx imagetools inspect`, or
|
|
724
|
+
`docker manifest inspect` by digest where buildx isn't installed), and a
|
|
725
|
+
failure says whether it's access (request it at
|
|
726
|
+
contact@kindgi.com) or the image or the network. `--registry <host>` logs in
|
|
727
|
+
to a mirror instead and checks for the same image there.
|
|
728
|
+
|
|
729
|
+
## Output and global flags
|
|
730
|
+
|
|
731
|
+
| Flag | Effect |
|
|
732
|
+
|---|---|
|
|
733
|
+
| `--json` | Pretty JSON on stdout (the default), for `jq`. |
|
|
734
|
+
| `--raw` | One-line JSON. |
|
|
735
|
+
| `--table` | A table for list responses (`runs list`, `tools list`, `providers list`; JSON where a list has no columns). |
|
|
736
|
+
| `--quiet` | Nothing on stdout; the exit code only. |
|
|
737
|
+
| `--url=<url>`, `--token=<token>` | The API and its token (see above). |
|
|
738
|
+
| `--verbose`, `-v` | Full errors: stack traces and the API's error bodies. |
|
|
739
|
+
| `--version` | The CLI's version. |
|
|
740
|
+
| `--help`, `-h` | Help for the CLI or a command. |
|