cd /news/developer-tools/show-hn-archsentry-deterministic-arc… · home topics developer-tools article
[ARTICLE · art-107686] src=github.com ↗ pub= topic=developer-tools verified=true sentiment=↑ positive

Show HN: ArchSentry – Deterministic architectural enforcement for CI

ArchSentry, a new open-source tool launched on Hacker News, enforces architectural contracts in CI pipelines deterministically at zero scan token cost, using sub-millisecond regex or AST/Semgrep patterns to detect violations and optionally generating AI remediation hints via an LLM. The tool, which runs via `npx archsentry scan`, targets AI coding assistants like Cursor, Copilot, and Claude Code, and integrates with GitHub Actions and a Probot-powered GitHub App.

read5 min views1 publishedAug 23, 2026
Show HN: ArchSentry – Deterministic architectural enforcement for CI
Image: Michielbdejong (auto-discovered)

Enforce your team's architectural contracts on every pull request — deterministically, at zero scan token cost, with instant AI remediation.

$ npx archsentry scan --config archsentry.yml --path src --explain

❌ ArchSentry found 1 violation(s) (1 error, 0 warnings):

  • [error] no-direct-sql  src/controllers/user.controller.ts:7
    All database writes must go through the repository layer.
    > await db.query("INSERT INTO users (email, name) VALUES ($1, $2)", [payload.email, payload.name]);
    💡 Remediation: All database writes must go through the repository layer. Move this call
       behind the appropriate service or repository layer so the access path is centralized
       and reviewable, rather than issued directly from `src/controllers/user.controller.ts`.

$ echo $?
1

AI coding assistants (Cursor, Copilot, Claude Code) generate thousands of lines of code per day. While standard linters catch syntax errors and SAST tools detect known CVE vulnerabilities, neither understands your system's architecture.

LLM review bots burn hundreds of dollars per repo summarizing diffs without guaranteeing architectural compliance.

ArchSentry solves this with a two-phase architecture:

Deterministic Phase (Zero Cost & Blazing Fast): Code is matched against your YAML contracts via sub-millisecond regex or AST/Semgrep patterns. No tokens are spent finding violations.Explanation Phase (Optional & Free-Tier Compatible): When a violation is flagged, an LLM generates a concise, contextual remediation hint directly on the offending code snippet.

Feature Legacy SAST (SonarQube, Snyk) Linters (ESLint, Biome) AI Review Bots (Codium, Copilot PR) 🛡️ ArchSentry
Primary Focus
Known CVEs & security vulnerabilities Code style, syntax, and formatting Generic natural language commentary Custom architectural boundaries & contracts
Scan Cost
Heavy license fees Free $0.05–$0.50+ per PR diff in LLM tokens $0 (Deterministic AST & Pattern Engine)
Scan Latency
20s – 5 mins < 1s 15s – 60s (LLM API queue) < 100ms
Deterministic Guarantee
✅ Yes ✅ Yes ❌ No (LLM hallucinations & flakiness) ✅ 100% Deterministic
Architectural Scope
❌ None (generic rules) ✅ Declarative YAML Contracts
Actionable AI Fix Hints
❌ Generic docs link ❌ Static message ✅ Targeted, contextual fix explanations

No installation required. Run directly in any repository:

npx archsentry scan --config archsentry.yml --path .

npx archsentry scan --config archsentry.yml --path . --explain

git diff main...HEAD | npx archsentry scan --config archsentry.yml --diff -

0

: Clean scan. All architectural invariants satisfied.1

: Architectural violations detected (severity:error

).2

: Runtime error (missing configuration file, malformed YAML, or invalid path).

Add .github/workflows/archsentry.yml

to your repository:

name: ArchSentry Architectural Gate

on:
  pull_request:
    branches: [main, master, develop]
  push:
    branches: [main, master]

jobs:
  archsentry-scan:
    name: Architectural Integrity Gate
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Run ArchSentry Gate
        run: npx --yes archsentry scan --config archsentry.yml --path .
        env:
          OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}

ArchSentry can also run as a dedicated Probot-powered GitHub App that automatically reviews PRs, posts inline architectural remediation comments, and cleans up stale comments upon push.

pnpm install

cp .env.example .env

pnpm start

Architectural contracts are declared in archsentry.yml

at the root of your project:

version: 1

rules:
  - id: no-direct-db-in-controllers
    type: pattern
    severity: error
    description: "Controllers must route data queries through the repository layer."
    match:
      patterns:
        - "db.query("
        - "connection.query("
        - "INSERT INTO"
        - "UPDATE "
        - "DELETE FROM"
      paths:
        - "src/controllers/**"
        - "apps/api/controllers/**"
      exclude:
        - "src/repositories/**"
        - "**/tests/**"

  - id: no-raw-eval
    type: semgrep
    severity: error
    description: "Do not call eval() or new Function() in application code."
    semgrep:
      languages: ["typescript", "javascript"]
      pattern-either:
        - pattern: eval(...)
        - pattern: new Function(...)
      paths:
        include:
          - "src/**"
        exclude:
          - "**/*.spec.ts"

  - id: avoid-console-log-in-production
    type: pattern
    severity: warn
    description: "Use structured logger (logger.info / logger.error) instead of console.log."
    match:
      patterns:
        - "console.log("
      paths:
        - "src/**"
      exclude:
        - "src/scripts/**"
Field Type Required Description
version
number
Yes
Contract schema version (must be 1 ).
rules[].id
string
Yes
Unique identifier ([a-zA-Z0-9_-] ).
rules[].type
"pattern" "semgrep"
Yes
Rule engine backend. pattern requires 0 external tools; semgrep runs AST queries.
rules[].description
string
Yes
Plain-English rationale for the rule.
rules[].severity
"error" "warn"
No Default error . error exits 1 ; warn informs without breaking the build.
rules[].match.patterns
string[]
Yes (pattern)
Substrings / tokens that trigger violations.
rules[].match.paths
string[]
No Globs specifying which file paths are subject to enforcement.
rules[].match.exclude
string[]
No Globs specifying paths exempt from this rule.
rules[].semgrep
object
Yes (semgrep)
Native Semgrep rule definition object (pattern , pattern-either , languages ).

When --explain

is enabled (or running via PR comment bot), ArchSentry derives remediation hints using whichever provider key is detected in the environment:

Provider Environment Variable Default Model Notes
OpenRouter
OPENROUTER_API_KEY
nvidia/nemotron-3-ultra-550b-a55b:free
100% Free Tiers Available (no card required)
OpenAI
OPENAI_API_KEY
gpt-4o-mini
High-speed, commercial grade
Ollama
OLLAMA_MODEL
Set by env (e.g. llama3 )
100% Local & Air-gapped (localhost:11434 )
Offline Fallback
(None)
Built-in Template Engine Zero-cost, zero-network deterministic hints
git clone https://github.com/comerade2134/archsentry.git
cd archsentry

pnpm install

pnpm test

pnpm typecheck
pnpm run build

MIT © comerade2134

── more in #developer-tools 4 stories · sorted by recency
── more on @archsentry 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/show-hn-archsentry-d…] indexed:0 read:5min 2026-08-23 ·