The agent performs technical validation only. The user performs user
acceptance testing (dashboards render data, alerts deliver, tools
usable). Agent must not set 100% done-ratio, suggest close, or move on
until the user explicitly accepts the work.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
The HUD is an ephemeral status block (active ticket, done items, current
work, queued items, user action items) shown after significant responses.
Written to .crush/hud.md on disk to save context tokens; never committed.
Redmine/Discourse/git remain the durable systems of record.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
The template previously had no session-start gate at all. Adds:
- Step 5: rule-summary gate (summarize rules, wait for confirmation)
- Step 9: scope-alignment gate (present priorities, wait for user to
name the target ticket before any work begins)
Prevents agents from autonomously picking work outside the session's
intended scope. Mirrors the PFVCluster gate structure.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
Add NON-NEGOTIABLE rule: every remote command must be wrapped with
timeout (30s reads, 120s standard, 300s deployments). A hung command
is a failed command — investigate root cause, never blindly retry.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
Establishes non-negotiable pattern for projects managing remote hosts:
all SSH through a remote.sh chokepoint (never direct ssh/scp), DNS names
only (never IP literals), and qemu-guest-agent visibility-only (never
execution). Adds corresponding DO NOT entries.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
Mechanically enforces ticket-governed work: blocks modifying operations
until an active ticket is set (echo '#NNN' > .crush/active-ticket).
Exempts read-only tools and management commands.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
Add NON-NEGOTIABLE rule: agents may suggest closing a ticket when the
result is clearly scoped and delivered, but must never close without
explicit user permission. Applies to ALL tickets, no exceptions.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
Harness "ask user"/question tools (structured prompts, modal forms) are
not portable across harnesses, don't version history, and bypass the
git-tracked record. Make the existing questions-v(N).md rule explicit
and non-negotiable in both BASELINE-PROMPT.md §10 and AGENTS.md.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
Agents must get explicit human approval before executing infrastructure
changes (network configs, host tuning, VM settings, DNS, switches).
Workflow: prepare → Redmine ticket → human review → execute → verify.
Read-only audits do not require approval.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
Merge redmine-cli into tooling-cli/redmine and drop the
redmine-cli/.env source path from the rules. The canonical
invocation now uses ~/.creds/redmine.env (system-independent)
with the registry image. Marks Q2 (bin/ wrapper gap) fully
resolved for both redmine and discourse.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
Merge discourse-cli into tooling-cli/discourse and drop the
discourse-cli/.env source path from the rules. The canonical
invocation now uses ~/.creds/discourse.env (system-independent)
with the registry image. Marks Q2 (bin/ wrapper gap) resolved.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
Add three policy updates to AGENTS.md and BASELINE-PROMPT.md:
1. Prefer awk/sed/grep/cut/tr for file editing over built-in harness
edit tools, which can be unreliable with whitespace and indentation.
2. Host hygiene is inviolable: only git, docker, and Unix utilities on
the host. One-off tools get docker-pulled; broadly useful tools get
a Redmine ticket for the human to install via package manager.
3. Never install language runtimes or non-base tools on the host.
💘 Generated with Crush
Assisted-by: Crush
Three new rules added to AGENTS.md and BASELINE-PROMPT.md:
1. Code/docs/tests must be kept in sync at all times — update all three
in the same commit when making changes.
2. Redmine and Discourse must cross-reference each other — every ticket
links to its Discourse doc and vice versa.
3. Commits must reference Redmine tickets ([#NNN]); PRs must link to
both Redmine and Discourse.
💘 Generated with Crush
Assisted-by: Crush
The framework supports both technical operations (SSH/screen/CLI/harness)
and knowledge work (Hermes/OWUI/Conduit via MCP/API). The Makefile is
restored as a convenience layer over the scripts — use make or call
scripts directly, whichever fits the interface you're working through.
README rewritten with a Mode 1 / Mode 2 comparison table. AGENTS.md key
commands now show both make and direct script invocation. ADOPTING.md
updated to use make shorthand.
The scripts remain the real entry points; make is shorthand. Mode 2
agents invoke the same scripts via container exec or MCP tool calls.
💘 Generated with Crush
Assisted-by: Crush via Crush <crush@charm.land>
The primary value is the knowledge layer (markdown files that any agent
reads — Crush, OpenWebUI, Hermes, Conduit on iPhone). CLI tooling
(scripts, git hooks) is optional, for projects that use git/docker.
Changes:
- Remove Makefile entirely. All commands are now direct script invocations
(bash scripts/check-rules.sh, bash scripts/setup-hooks.sh, etc.)
- Add scripts/test.sh stub (replaces make test)
- check-rules.sh: test-suite check now calls scripts/test.sh, not make test
- Rewrite README as three-layer architecture: knowledge → git hooks → docker
- Update all docs (AGENTS.md, BASELINE-PROMPT.md, ADOPTING.md, PATTERNS.md,
STATUS.md) to remove every make reference
The framework now works for:
- CLI/harness users (git hooks + scripts + AGENTS.md)
- Non-CLI users (BASELINE-PROMPT.md loaded into any agent's system prompt)
💘 Generated with Crush
Assisted-by: Crush via Crush <crush@charm.land>
Remove references to crush.json, hooks/, and Crush-specific enforcement
from README, AGENTS.md, BASELINE-PROMPT.md, and PATTERNS.md. Generalize
the commit footer to be harness-agnostic (<harness/tool> placeholder).
Update PATTERNS.md decisions and scorecard to reflect the reversal:
Crush hooks were studied but deliberately not shipped.
The only remaining Crush mention explicitly states it is avoided for
portability. The .crush/memory/ dir is kept as an optional Crush feature.
💘 Generated with Crush
Assisted-by: Crush via Crush <crush@charm.land>
Declare GNU Affero General Public License v3.0 for the template repo.
All projects created from this template inherit AGPLv3 unless overridden.
💘 Generated with Crush
Assisted-by: Crush via Crush <crush@charm.land>
Apply answers to questions-v1.md (Q1–Q5):
- Q4: Remove crush.json and hooks/ entirely. All enforcement is now portable
via git hooks (pre-commit/pre-push) + check-rules.sh + AGENTS.md prose.
Works under Crush, OpenWebUI, Hermes, or any agent framework.
- Q5: Remove docs/JOURNAL.md. Redmine is the system of record for work;
Discourse for docs. JOURNAL.md was a stopgap.
- Q3: Add mandatory Discourse pointer-header check to check-rules.sh. Any
non-exempt tracked .md without a Discourse URL FAILs. All projects, no
exceptions.
- Q2: Reference real CLI container invocation paths
(KNEL-AIMiddleware/{redmine,discourse}-cli/) in AGENTS.md instead of the
missing bin/ shortcuts.
- Q1: Note tea + docker login are preconfigured on TSYS workstations.
Also: make test default is now no-op pass so the template self-validates;
make validate now passes clean on the repo itself (17 PASS / 0 FAIL).
💘 Generated with Crush
Assisted-by: Crush via Crush <crush@charm.land>
Extract patterns from 18 projects across two machines (12 local infra +
6 remote personal/business via ssh survey). Ship a reusable Gitea template
with AGENTS.md, 5 Crush PreToolUse hooks, git pre-commit/pre-push, a
generalized rules engine, shared bash library, Makefile, lifecycle scripts,
and gardening loop. Includes the canonical BASELINE-PROMPT.md (13 sections)
and PATTERNS.md (standardization scorecard).
The repo self-applies: it passes its own shellcheck (zero info-level),
make fast, and all check-rules.sh checks.
💘 Generated with Crush
Assisted-by: Crush via Crush <crush@charm.land>