pushci 1.12.7 → 1.12.9

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/README.md CHANGED
@@ -6,70 +6,22 @@
6
6
  [![Release](https://img.shields.io/github/v/release/finsavvyai/pushci-cli)](https://github.com/finsavvyai/pushci-cli/releases/latest)
7
7
  [![MCP](https://img.shields.io/badge/MCP-compatible-purple.svg)](https://pushci.dev/ai)
8
8
 
9
- **Local-first CI/CD validation for AI-generated code.**
9
+ ## AI agents write the code. PushCI proves it is safe to ship.
10
10
 
11
- > 35 languages. 49 frameworks. 22 deploy targets. Zero YAML.
12
- > One command to add a pre-push gate. Your existing CI can stay put.
11
+ PushCI is an **independent delivery verification and promotion control plane for AI-written changes**. It issues signed proof tied to exact source, required checks, actor, immutable artifact, environment, database state, and policy before production.
13
12
 
14
- ```bash
15
- npm install -g pushci # one-time install
16
- pushci init # AI detects your stack in 30 seconds
17
- git push # tests run automatically
18
- ```
19
-
20
- ```
21
- $ pushci init
22
- Detecting stack ........................ Node 20 + Vite + Vitest
23
- Detecting deploy target ................ Cloudflare Workers (wrangler.toml)
24
- Writing pushci.yml ..................... 14 lines
25
- Installing pre-push hook ............... done
26
-
27
- $ git push
28
- → running pushci run
29
- ✓ lint 3.2s
30
- ✓ test 8.4s
31
- ✓ build 12.1s
32
- → 24 commits ahead of origin/main · all checks passed
33
- ```
34
-
35
- See the current product surface at <a href="https://pushci.dev">pushci.dev</a>.
36
-
37
- ## Why PushCI?
13
+ The CLI is the human/native automation interface. MCP-compatible agents such as Claude Code, Cursor, Copilot, and Codex use the same governed primitives. PushCI can run work, but the independent receipt—not the executor's own green flag—is the admission record.
38
14
 
39
- Hosted CI minutes can get expensive when every AI-generated change queues a remote run. PushCI runs the first validation pass on your machine or runner pool before hosted CI starts.
40
-
41
- | | PushCI | GitHub Actions | GitLab CI | Jenkins |
42
- |--|---------|---------------|-----------|---------|
43
- | **Setup** | 30 seconds | 30+ minutes | 30+ minutes | Hours |
44
- | **Config** | Zero (AI) | 50+ lines YAML | 50+ lines YAML | Groovy DSL |
45
- | **Cost** | Your machine or runner pool | Hosted minutes | Hosted minutes | Server costs |
46
- | **Platforms** | GitHub + GitLab + BB | GitHub only | GitLab only | All |
47
- | **AI** | Auto-detects stack | None | None | None |
48
-
49
- ## Quick Start
15
+ PushCI runs beside existing GitHub Actions, GitLab CI, Buildkite, Jenkins, and provider delivery systems. Local, self-hosted, or customer-owned compute is the default; optional managed execution is capacity-capped, budgeted, and separately metered.
50
16
 
51
17
  ```bash
52
- # Install (pick one)
53
- npm install -g pushci # npm (recommended)
54
- brew install finsavvyai/tap/pushci # Homebrew
55
- curl -fsSL https://pushci.dev/install.sh | sh # Script
56
-
57
- # Auto-detect your stack
18
+ npm install -g pushci
58
19
  pushci init
59
-
60
- # Run CI locally
61
- pushci run
62
-
63
- # Something broken? Get actionable fixes
64
- pushci troubleshoot
65
-
66
- # Start the webhook server
67
- GITHUB_TOKEN=xxx pushci agent serve
20
+ pushci verify --local
21
+ pushci verify --publish # authenticated, project-bound, server-signed receipt
68
22
  ```
69
23
 
70
- ## AI Agent Integration (MCP)
71
-
72
- PushCI includes an MCP server for AI coding agents like **Claude Code**, **Cursor**, **Windsurf**, and **Cline**.
24
+ Or expose the same delivery runtime to an AI agent:
73
25
 
74
26
  ```json
75
27
  {
@@ -82,427 +34,178 @@ PushCI includes an MCP server for AI coding agents like **Claude Code**, **Curso
82
34
  }
83
35
  ```
84
36
 
85
- **Available tools**: `pushci_init` (detect stack), `pushci_run` (run pipeline), `pushci_status` (check results), `pushci_doctor` (diagnose env), `pushci_secret_set` (store secrets).
86
-
87
- **Natural language**: `pushci ask "set up CI for this project"`
88
-
89
- ## Supported
37
+ ## One independent proof across every executor
90
38
 
91
- **35 Languages**: Go, Node/TS, Python, Rust, Java, C#,
92
- Ruby, PHP, Swift, Dart, Elixir, Zig, Scala, Haskell,
93
- Kotlin, Lua, Perl, R, Julia, OCaml, Nim, Crystal, Bicep +more
94
-
95
- **39 Frameworks**: Next.js, Nuxt, SvelteKit, Django, FastAPI,
96
- Flask, Spring Boot, Rails, Laravel, Phoenix, Flutter +more
39
+ ```text
40
+ Developer / coding agent
41
+ │
42
+ ├── existing CI or customer-owned runner
43
+ └── optional managed execution
44
+ │
45
+ ▼
46
+ PushCI verification gate
47
+ ├── exact source / PR HEAD
48
+ ├── required checks and actor
49
+ ├── artifact digest
50
+ ├── environment / database state
51
+ └── policy and approval
52
+ │
53
+ ▼
54
+ signed receipt → promotion
55
+ ```
97
56
 
98
- **22 Deploy Targets**: Cloudflare (Pages/Workers), AWS (ECS/Lambda/S3),
99
- GCP (Cloud Run/App Engine), Azure (App Service/Functions/Bicep),
100
- Vercel, Railway, Fly, Render, Netlify, Docker, K8s, SSH,
101
- Terraform, CloudFormation, Pulumi, Ansible
57
+ The coding agent may be the author and any CI may be the executor. PushCI remains the independent judge of whether the exact change is eligible to move.
102
58
 
103
- ## Messaging Channels
59
+ ## Why PushCI
104
60
 
105
- Control your CI/CD from WhatsApp, Slack, Discord, Telegram, or any webhook.
61
+ Traditional CI assumes every change should begin by renting a clean remote machine. AI agents also tend to fall back to ad-hoc shell commands and provider-specific scripts when they need to deploy infrastructure. PushCI starts with a different model: **use the compute and delivery knowledge already available locally, expose it through one agent-friendly interface, and escalate to controlled infrastructure only when required.**
106
62
 
107
- ```
108
- "run tests" → PushCI runs your pipeline
109
- "deploy staging" → Deploys to staging
110
- "status" → Shows last run result
111
- "diagnose" → AI root-cause analysis
63
+ ```text
64
+ Existing repository / CI
65
+ │
66
+ ▼
67
+ PushCI init
68
+ │
69
+ ├── detect stack and workflow
70
+ ├── preserve/migrate existing CI
71
+ ▼
72
+ Developer or AI agent
73
+ │
74
+ ▼
75
+ Local / self-hosted execution
76
+ │
77
+ ├── build
78
+ ├── test
79
+ ├── scan
80
+ └── migration analysis
81
+ │
82
+ ▼
83
+ immutable artifact
84
+ │
85
+ ▼
86
+ provision / preview / staging
87
+ │
88
+ ▼
89
+ verification
90
+ │
91
+ ▼
92
+ safe promotion
112
93
  ```
113
94
 
114
- Connect from the dashboard at **app.pushci.dev/channels**, or via API:
95
+ PushCI is deliberately **local-first, not local-only**. Fast validation can run on the developer machine; teams can use self-hosted runner pools and optional managed execution. Existing GitHub Actions, GitLab CI, Jenkins, Buildkite, and other delivery systems can remain in place while workloads migrate incrementally.
115
96
 
116
- ```bash
117
- curl -X POST https://api.pushci.dev/api/channels/connect \
118
- -H "Authorization: Bearer $TOKEN" \
119
- -d '{"channelType":"slack","credentials":{"accessToken":"xoxb-...","teamId":"T123"}}'
120
- ```
97
+ ## Core value
121
98
 
122
- Supported platforms:
99
+ ### Agent-native delivery
123
100
 
124
- | Platform | Webhook | Response Limit |
125
- |----------|---------|----------------|
126
- | WhatsApp | Meta Business API | 4,000 chars |
127
- | Slack | Events API | 39,000 chars |
128
- | Discord | Interactions | 2,000 chars |
129
- | Telegram | Bot API | 4,000 chars |
130
- | Custom | Webhook | 40,000 chars |
101
+ The CLI and MCP server expose the delivery lifecycle as callable capabilities. An agent can inspect a repository, initialize/migrate its pipeline, run tests, diagnose failures, manage secrets, provision supported infrastructure, create preview environments, deploy, and request verification without learning each provider's bespoke operational interface.
131
102
 
132
- ## Commands
103
+ This is the strategic agent loop:
133
104
 
134
- ```
135
- pushci init Detect stack and generate pushci.yml
136
- pushci run Execute pipeline checks
137
- pushci deploy Deploy to target environment
138
- pushci diagnose AI-diagnose failed runs
139
- pushci status Show last run results
140
- pushci secrets Manage encrypted secrets
141
- pushci heal AI self-heal broken pipeline
142
- pushci ask Natural language CI commands
143
- pushci generate AI-generate pushci.yml
144
- pushci migrate Convert GitHub Actions workflow
145
- pushci mcp Start MCP server for AI agents
146
- pushci agent Run AI workflows or the webhook server
147
- pushci runner Manage self-hosted execution capacity
148
- pushci index Build dependency graph for blast radius
149
- pushci skill Install/list/remove marketplace skills
150
- pushci login Authenticate with PushCI (Pro)
151
- pushci logout Remove saved credentials
152
- pushci doctor Check environment health
153
- pushci troubleshoot Diagnose issues with actionable fixes
154
- pushci trace View Perfetto performance traces
155
- pushci release Build & publish release locally ($0)
156
- pushci promote Register with AI registries
157
- pushci voice TTS narration for runs (curb / office / deadpan-tech)
158
- pushci uninstall --yes Remove hooks, config, and .pushci after confirmation
159
- pushci version Print version
105
+ ```text
106
+ agent writes code
107
+ ↓
108
+ pushci build / run
109
+ ↓
110
+ failure → structured diagnosis → repair
111
+ ↓
112
+ pushci provision / preview
113
+ ↓
114
+ integration verification
115
+ ↓
116
+ pushci deploy / promote
117
+ ↓
118
+ receipt + audit trail
160
119
  ```
161
120
 
162
- See [docs/CLI.md](docs/CLI.md) for the full CLI reference with flags, examples, and plan requirements.
121
+ The long-term goal is **bounded autonomy**: agents can move software forward quickly, while PushCI supplies policy, credentials boundaries, environment isolation, artifact lineage, and verification evidence.
163
122
 
164
- ## Voice
123
+ ### Use the compute you already own
165
124
 
166
- PushCI narrates your pipeline. Pick a persona, run your pipeline, hear it. Phrases are pre-canned by default; with an AI key you get fresh in-character lines per run.
125
+ Keep install, lint, unit tests, builds, scans, and other cache-friendly work local when policy allows it. Remote infrastructure is reserved for stages that actually require cloud bindings, shared services, controlled builders, or realistic environments.
167
126
 
168
- ```bash
169
- pushci voice list # show built-in personas
170
- pushci voice say "deploying" --persona curb-style
171
- pushci voice test --persona office-style # demo all 6 lifecycle events
172
- pushci voice joke --diff main # AI riffs on the diff vs main
173
- pushci run --voice # auto-narrate pipeline events
174
- ```
127
+ ### Migrate without a platform rewrite
175
128
 
176
- Built-in personas:
129
+ `pushci init` detects stack and existing CI intent. The target experience is side-by-side adoption: run PushCI locally, prove the feedback/cost benefit, then migrate selected expensive stages when the team is ready. This also gives agents a normalized interface over legacy delivery systems rather than requiring them to rewrite everything first.
177
130
 
178
- | Persona | Style |
179
- |---|---|
180
- | `curb-style` | Petty frustration, awkward incredulity |
181
- | `office-style` | Oblivious enthusiasm, motivational confusion |
182
- | `deadpan-tech` | Sysadmin superiority, dark contempt |
183
- | `deadpan-narrator` | Neutral, no character |
131
+ ### Build once, promote the verified artifact
184
132
 
185
- Defaults are zero-config: macOS `say` backend, no API keys, no network. Add `--ai` (or `PUSHCI_VOICE_AI=1` for `pushci run`) to switch on AI commentary via the configured provider paths (`ANTHROPIC_API_KEY` / `GROQ_API_KEY` / `DEEPSEEK_API_KEY` / `OPENAI_API_KEY` / `GEMINI_API_KEY` / local llamafile).
133
+ Where the deployment target supports immutable artifacts, PushCI's direction is build-once/promote-everywhere. Preview, staging, and production should refer to the same artifact digest rather than silently rebuilding different binaries at every step.
186
134
 
187
- Safety: every utterance passes through a redactor (JWTs, AWS ARNs, account IDs, API keys, IPs, internal hostnames, emails are masked) and AI output runs through a content filter (rejects profanity + prompt-injection echo). Mute everything with `PUSHCI_VOICE_OFF=1`.
135
+ ### Verify realistic environments
188
136
 
189
- Bring your own personas via `~/.pushci/voices.yml` — user entries appear in `pushci voice list` alongside the built-ins and override on name collision:
137
+ PushCI includes preview-environment lifecycle capabilities. Preview and staging can become structured verification evidence including provider/target identity, database isolation, migration state, configuration/binding fingerprints, health checks, and the exact artifact deployed.
190
138
 
191
- ```yaml
192
- personas:
193
- - name: pirate-style
194
- voice: Daniel # macOS voice; run `say -v ?` to enumerate
195
- description: Pirate-themed deploy commentary
196
- phrases:
197
- start: ["Aye, hoist the colors. Deploying."]
198
- pass: ["Ye scurvy tests passed."]
199
- fail: ["Avast, the build hath sunk."]
200
- ```
139
+ ### Govern human and AI-generated changes
201
140
 
202
- ## Secrets
203
-
204
- PushCI resolves secret references inline in `pushci.yml` env blocks.
205
- Three schemes are supported today; PushCI never writes a plaintext
206
- secret to disk it didn't already encrypt.
207
-
208
- | Scheme | Backed by | Best for |
209
- |---|---|---|
210
- | `keychain://service[#account]` | macOS Keychain / Windows Credential Manager / Linux Secret Service, with AES-encrypted fallback at `~/.pushci/keychain.enc` for headless CI | Local dev, individual machines |
211
- | `vault://path#field` | HashiCorp Vault AppRole (`VAULT_ADDR` + `VAULT_ROLE_ID` + `VAULT_SECRET_ID`) | Teams, audited environments |
212
- | `pushci secrets set KEY VAL` | Per-project AES file at `.pushci/secrets.enc`, machine-bound | Quick one-offs, throwaway scripts |
213
-
214
- ```yaml
215
- # pushci.yml
216
- stages:
217
- - name: publish
218
- env:
219
- NPM_TOKEN: keychain://npm-publish-token
220
- DEPLOY_KEY: keychain://deploy-bot#prod
221
- DB_PASSWORD: vault://secret/data/prod/db#password
222
- checks:
223
- - name: publish
224
- run: npm publish
225
- ```
141
+ Humans and agents use the same delivery primitives but can receive different policy. PushCI can record actor/provenance when available, apply stricter requirements to autonomous changes, and preserve an audit trail of what an agent actually built, provisioned, changed, and deployed.
226
142
 
227
- **Managing keychain entries from the CLI:**
143
+ ## Quick start
228
144
 
229
145
  ```bash
230
- pushci secrets keychain set npm-publish-token npm_xxxxxxxxxxxx
231
- pushci secrets keychain set deploy-bot#prod s3cr3t
232
- pushci secrets keychain get npm-publish-token
233
- pushci secrets keychain list # fallback-file entries only
234
- pushci secrets keychain rm npm-publish-token
146
+ npm install -g pushci
147
+ pushci init
148
+ pushci verify
235
149
  ```
236
150
 
237
- On macOS the storage layout matches the `security` CLI verbatim, so the
238
- common `.zshrc` helper functions work side-by-side:
151
+ Other install options:
239
152
 
240
153
  ```bash
241
- secret() { security find-generic-password -a "$USER" -s "$1" -w 2>/dev/null; }
242
- secret-set() { security add-generic-password -a "$USER" -s "$1" -w "$2" -U; }
154
+ brew install finsavvyai/tap/pushci
155
+ curl -fsSL https://pushci.dev/install.sh | sh
243
156
  ```
244
157
 
245
- Entries written by `secret-set` are readable by `pushci secrets keychain
246
- get`, and vice versa — no `go-keyring-base64:` prefix gymnastics.
247
-
248
- **Headless Linux CI:** when D-Bus and Secret Service aren't running,
249
- PushCI falls back transparently to an AES-encrypted file at
250
- `~/.pushci/keychain.enc` with a machine-bound key. A one-time stderr
251
- warning fires the first time a fallback read or write happens, so the
252
- behavior is never silent. Override account default with the `#account`
253
- suffix; the current OS user is used when omitted.
254
-
255
- ## Configuration
256
-
257
- `pushci.yml` is optional — `pushci init` generates one that works, and
258
- zero-config mode auto-detects your stack. When you want more control,
259
- PushCI supports three authoring styles. Full reference is at
260
- [pushci.dev/docs/pushci-yaml](https://pushci.dev/docs/pushci-yaml).
261
-
262
- ### Simple example
263
-
264
- Zero-config Node.js app with linear stages, single-target deploy on
265
- `main`, and Slack notifications. Drop this into your repo as
266
- `pushci.yml` and run `pushci run`.
267
-
268
- ```yaml
269
- on: [push, pull_request]
270
-
271
- stages:
272
- - name: install
273
- checks:
274
- - name: deps
275
- run: pnpm install --frozen-lockfile
276
-
277
- - name: lint
278
- depends_on: [install]
279
- checks:
280
- - name: eslint
281
- run: pnpm lint
282
-
283
- - name: test
284
- depends_on: [install]
285
- checks:
286
- - name: vitest
287
- run: pnpm test
288
-
289
- - name: build
290
- depends_on: [install, lint, test]
291
- checks:
292
- - name: next-build
293
- run: pnpm build
294
-
295
- deploy:
296
- trigger: push
297
- only_on: [main]
298
- run: npx wrangler pages deploy dist --project-name=my-app
299
-
300
- notify:
301
- slack: "${{ secrets.SLACK_WEBHOOK }}"
302
- ```
158
+ Useful commands:
303
159
 
304
- ### Complex example — every feature
305
-
306
- Parallel stages, cross-stage DAG, conditional checks, retries,
307
- timeouts, Docker-isolated steps, multi-environment staged deploy with
308
- an approval gate on production, and stage-scoped secrets.
309
-
310
- ```yaml
311
- on: [push, pull_request, workflow_dispatch]
312
-
313
- stages:
314
- - name: install
315
- checks:
316
- - name: pnpm-install
317
- run: pnpm install --frozen-lockfile
318
- retry: 2
319
- timeout: 3m
320
-
321
- - name: quality
322
- depends_on: [install]
323
- parallel: true # every check runs concurrently
324
- env:
325
- NODE_ENV: test
326
- checks:
327
- - name: typecheck
328
- run: pnpm tsc --noEmit
329
- - name: lint
330
- run: pnpm lint
331
- - name: format
332
- run: pnpm prettier --check .
333
- - name: audit
334
- run: pnpm audit --audit-level=high
335
- on_fail: warn # log but don't fail the stage
336
-
337
- - name: test
338
- depends_on: [install]
339
- parallel: true
340
- env:
341
- DATABASE_URL: postgres://test:test@localhost:5432/test
342
- checks:
343
- - name: unit
344
- run: pnpm test:unit --coverage
345
- - name: integration
346
- run: pnpm test:integration
347
- retry: 1
348
- timeout: 5m
349
- - name: e2e
350
- if: branch == 'main' || branch =~ '^release/'
351
- run: pnpm test:e2e
352
- docker: mcr.microsoft.com/playwright:v1.49.0-focal
353
- timeout: 10m
354
-
355
- - name: security
356
- depends_on: [install]
357
- checks:
358
- - name: secret-scan
359
- run: npx gitleaks detect --no-git
360
- - name: sast
361
- run: pushci scan --engine claude --fail-on high
362
-
363
- - name: build
364
- depends_on: [quality, test, security]
365
- checks:
366
- - name: next-build
367
- run: pnpm build
368
- - name: bundle-size
369
- run: npx size-limit
370
- line-limit: 10
371
-
372
- deploy:
373
- trigger: push
374
- environments:
375
- - name: staging
376
- only_on: [develop]
377
- run: npx wrangler pages deploy dist --project-name=app-staging
378
- env:
379
- CF_API_TOKEN: "${{ secrets.CF_API_TOKEN_STAGING }}"
380
- - name: production
381
- only_on: [main]
382
- approve: true # requires interactive approval
383
- run: npx wrangler pages deploy dist --project-name=app-prod
384
- env:
385
- CF_API_TOKEN: "${{ secrets.CF_API_TOKEN_PROD }}"
386
-
387
- notify:
388
- slack: "${{ secrets.SLACK_WEBHOOK }}"
389
- discord: "${{ secrets.DISCORD_WEBHOOK }}"
390
- email: oncall@example.com
160
+ ```text
161
+ pushci init detect the stack and configure/migrate validation
162
+ pushci verify verify the current change and produce evidence
163
+ pushci run execute the pipeline directly
164
+ pushci preview manage realistic preview environments
165
+ pushci migrate migrate an existing GitHub Actions workflow
166
+ pushci deploy validate and execute deployments
167
+ pushci troubleshoot diagnose failures with actionable fixes
168
+ pushci index build the dependency graph / blast-radius model
169
+ pushci mcp expose PushCI delivery capabilities to AI coding agents
170
+ pushci mcp configure hermes install a governed Hermes delivery operator
171
+ pushci agent run PushCI agent workflows
172
+ pushci runner manage execution capacity
391
173
  ```
392
174
 
393
- Immutable deploy targets can also enforce `staging → production` or the
394
- sensitive `candidate → staging → candidate → sandbox → candidate → production`
395
- path. See [Release Flow Policies](docs/RELEASE_FLOWS.md).
396
-
397
- ### GitHub Actions parity — no rewrite needed
175
+ ## AI-agent integration
398
176
 
399
- PushCI v1.3.1+ runs your existing `.github/workflows/*.yml` files
400
- end-to-end via the embedded [nektos/act](https://github.com/nektos/act)
401
- runtime. `actions/checkout@v4`, matrix builds, service containers,
402
- composite actions, secret masking, `needs.*.outputs.*` — all work.
403
- Just drop in a workflow and run:
404
-
405
- ```bash
406
- pushci actions run # runs all .github/workflows/*.yml
407
- pushci actions run --job test # run one job
408
- pushci actions run --dry-run # validate without containers
409
- pushci actions doctor # check act + docker + workflow status
410
- ```
177
+ PushCI includes an MCP server for coding agents such as Claude Code, Cursor, Windsurf, Cline, and other MCP-compatible clients.
411
178
 
412
- A real complex workflow that runs unchanged:
413
-
414
- ```yaml
415
- name: CI
416
- on: [push, pull_request]
417
-
418
- jobs:
419
- test:
420
- runs-on: ubuntu-latest
421
- strategy:
422
- fail-fast: false
423
- matrix:
424
- node: [20, 22]
425
- services:
426
- postgres:
427
- image: postgres:16
428
- env:
429
- POSTGRES_PASSWORD: test
430
- ports: ['5432:5432']
431
- options: >-
432
- --health-cmd pg_isready --health-interval 10s
433
- --health-timeout 5s --health-retries 5
434
- steps:
435
- - uses: actions/checkout@v4
436
- - uses: actions/setup-node@v4
437
- with:
438
- node-version: ${{ matrix.node }}
439
- - run: npm ci
440
- - run: npm test
441
- env:
442
- DATABASE_URL: postgres://postgres:test@localhost:5432/postgres
443
- - id: coverage
444
- run: echo "pct=$(npm test --silent)" >> $GITHUB_OUTPUT
445
- outputs:
446
- coverage: ${{ steps.coverage.outputs.pct }}
447
-
448
- deploy:
449
- needs: test
450
- runs-on: ubuntu-latest
451
- if: github.ref == 'refs/heads/main'
452
- steps:
453
- - uses: actions/checkout@v4
454
- - name: Deploy
455
- run: echo "coverage was ${{ needs.test.outputs.coverage }}"
456
- env:
457
- CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
179
+ ```json
180
+ {
181
+ "mcpServers": {
182
+ "pushci": {
183
+ "command": "pushci",
184
+ "args": ["mcp"]
185
+ }
186
+ }
187
+ }
458
188
  ```
459
189
 
460
- Or just run `pushci init` — PushCI figures everything out automatically.
461
-
462
- ## Git Hook
463
-
464
- `pushci init` installs a pre-push hook that runs checks before every push.
465
- The hook is designed to never block your workflow:
466
-
467
- - **Skip once**: `git push --no-verify`
468
- - **Disable permanently**: `export PUSHCI_SKIP_HOOK=1`
469
- - **Auto-skips** if the pushci binary is unavailable (no download hang)
190
+ Available MCP capabilities include stack detection, pipeline initialization, pipeline execution, status, environment diagnosis, secret management, security scanning, migration recommendations, healing/diagnosis, and agent workflows. The product direction is to expose provisioning, preview, verification, and promotion through the same governed agent interface wherever the underlying PushCI capability is already available and safe to expose.
470
191
 
471
- ## Pricing
192
+ ## Verification model
472
193
 
473
- | Free | Pro $9/mo | Team $29/seat/mo | Enterprise |
474
- |------|-----------|-------------------|------------|
475
- | Unlimited local runs | Unlimited repos | Everything in Pro | Everything in Team |
476
- | AI stack detection | AI diagnosis (100/mo) | 2000 cloud minutes | Unlimited cloud minutes |
477
- | 2 deploy targets | 22 deploy targets | SSO / SAML | SCIM + 7-year audit |
478
- | Community support | Dashboard + analytics | Audit logs + governance | Dedicated tenant option |
194
+ The core product primitive is a software-change **verification**. A verification binds evidence not only to code, but to the delivery path an agent or developer executed: exact repository/commit and dirty-tree state, actor, checks, artifact, environment, migration state, policy, savings, and results.
479
195
 
480
- ## Links
196
+ Receipts have deterministic local identities and tamper-checked history. `pushci verify --publish` sends a completed receipt to the authenticated project, where the control plane independently recomputes its evidence hash, stores an audited ledger row, and returns a project-bound ECDSA P-256 attestation. In the immutable image-promotion path, artifact passports embed that receipt and production requires the exact published attestation. GitHub repositories can also receive one `PushCI / Verification` Check Run bound to the live PR HEAD; a new HEAD immediately makes the prior receipt ineligible. Locally asserted agent metadata remains distinguishable from provider-verified provenance.
481
197
 
482
- - **Website**: https://pushci.dev
483
- - **AI Agents**: https://pushci.dev/ai
484
- - **Cost Calculator**: https://pushci.dev/tools/cost-calculator
485
- - **Compare**: [vs GitHub Actions](https://pushci.dev/vs/github-actions) | [vs GitLab CI](https://pushci.dev/vs/gitlab-ci) | [vs CircleCI](https://pushci.dev/vs/circleci) | [vs Jenkins](https://pushci.dev/vs/jenkins)
198
+ ## Documentation
486
199
 
487
- ## Contributing
488
-
489
- We welcome contributions. See [CONTRIBUTING.md](CONTRIBUTING.md) for setup instructions and contribution guidelines.
490
-
491
- **Good first issues:**
492
- - Add a framework detector (`internal/detect/`)
493
- - Add a deploy target (`internal/deploy/`)
494
- - Improve CLI error messages
495
- - Add tests
496
-
497
- Please read our [Code of Conduct](CODE_OF_CONDUCT.md) before contributing.
498
-
499
- ## Security
500
-
501
- Found a vulnerability? See [SECURITY.md](SECURITY.md) for our disclosure policy.
200
+ - [CLI reference](docs/CLI.md)
201
+ - [Verification evidence](docs/VERIFICATION_EVIDENCE.md)
202
+ - [Verification marketing claim matrix](docs/VERIFICATION_MARKETING_CLAIM_MATRIX.md)
203
+ - [AI / MCP integration](https://pushci.dev/ai)
204
+ - [pushci.yml guide](https://pushci.dev/docs/pushci-yaml)
205
+ - [Build roadmap](ROADMAP.md)
206
+ - [GitHub App and verification implementation plan](.planning/github-app-verification-plan.md)
207
+ - [Product refinement opportunities](.planning/product-refinement-opportunities.md)
502
208
 
503
209
  ## License
504
210
 
505
- [BSL 1.1](LICENSE) (Business Source License). Free to use for any purpose except
506
- offering a competing hosted CI/CD service. Converts to MIT on 2029-04-06.
507
-
508
- PushCI is a trademark of FinsavvyAI. See [LICENSE](LICENSE) for full terms.
211
+ PushCI is licensed under BUSL-1.1. See [LICENSE](LICENSE).