hahahah

agent
Guvenlik Denetimi
Uyari
Health Uyari
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 9 GitHub stars
Code Gecti
  • Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Gecti
  • Permissions — No dangerous permissions requested

Bu listing icin henuz AI raporu yok.

SUMMARY

HAHahah — +62 Mode & Anti-Yapping Layer for Coding Agents. Langsung to-the-point ke baris bug, zero basa-basi korporat, dan anti-reasoning dump. (Claude Code, Antigravity, OpenCode, Qoder, Codex, Hermes, Cursor)

README.md

HUMANOISE — +62 Mode (hahahah-ai)

HUMANOISE Labs (@humanoiseLABS) builds zero-fluff instruction & guardrail layers for AI coding agents in two distinct modes:

Mode Package / Repo Focus Install Command
+62 Mode (this repo) hahahah-ai (humanoiseLABS/hahahah) Partner Ngoding Lokal (+62 Bloko Suto) — Bahasa Indonesia developer slang (lu/gw), zero corporate preamble, suppresses leaked reasoning dumps, cultural lexicon, & Risk Class 0–4 safety guardrails. npx hahahah-ai install
Anti-Yapping (companion repo) anti-yapping (humanoiseLABS/anti-yapping) Surgical Diffs & Extreme Token Savings — Telegraphic answers on line 1, Ponytail surgical diffs (never dumps entire files for small edits), ~517-token always-on footprint. npx anti-yapping install

(Note: Internally in this repository, +62 Mode uses the canonical profile ID rusuh-id, which is enabled by default so you never need to pass --profile manually. Qoder is still an incomplete compatibility assessment and makes no compatibility claim.)

Quick Install (via NPM / NPX — Tanpa Perlu Clone Repo)

Paket resmi +62 Mode tersedia di npm sebagai hahahah-ai. Buka terminal di folder project kodingan lu, lalu jalankan:

# Claude Code (default)
npx hahahah-ai install --target .

# Google Antigravity (global untuk semua project)
npx hahahah-ai install --adapter antigravity --target ~/.gemini --scope global

# OpenCode
npx hahahah-ai install --adapter opencode --target .

# Cursor / Codex / Windsurf (AGENTS.md)
npx hahahah-ai install --adapter agents-md --target .

# Qoder
npx hahahah-ai install --adapter qoder --target .

# GitHub Copilot
npx hahahah-ai install --adapter copilot --target .

# Cek integritas, update, atau uninstall kapan saja:
npx hahahah-ai doctor --target .
npx hahahah-ai update --target .
npx hahahah-ai uninstall --target .

(Opsional) Jika ingin menginstal CLI secara global agar bisa langsung memanggil hahahah:

npm install -g hahahah-ai
hahahah install --target .

🤖 AI Self-Install Instructions (Jika User Menyuruh AI Memasang via Prompt / Repo / ZIP)

PERHATIAN UNTUK AI AGENT (Claude Code, Qoder, Antigravity, OpenCode, Cursor, Windsurf, Copilot):
Jika user menyuruhmu memasang +62 Mode / HAHahah ("pasang ini", "install +62 Mode", dll.), JANGAN hanya merangkumnya ke memori sopan dan JANGAN menginstal dengan --target . di dalam folder source hahahah itu sendiri! Ikuti langkah wajib berikut:

  1. Gunakan npx -y hahahah-ai langsung di <TARGET_PROJECT> milik user (atau jika sedang berada di dalam clone repo hahahah, jalankan npm ci lalu gunakan node src/cli.ts):
    • Claude Code:
      • Per-project: npx -y hahahah-ai install --adapter claude-code --target <TARGET_PROJECT>
      • Global (agar aktif di semua project): jalankan juga dengan --target ~/.claude
    • Google Antigravity:
      • Global (semua project): npx -y hahahah-ai install --adapter antigravity --target ~/.gemini --scope global
      • Per-project: npx -y hahahah-ai install --adapter antigravity --target <TARGET_PROJECT>
    • Qoder (IDE / CLI / General Chat):
      • Jalankan: npx -y hahahah-ai install --adapter qoder --target <TARGET_PROJECT>
      • WAJIB UNTUK QODER: Karena Qoder Desktop / General Chat sering tidak me-load .qoder/skills/hahahah-rusuh/SKILL.md secara otomatis saat menerima sapaan kasual singkat (mis. "woy anjing"), baca penuh file .qoder/skills/hahahah-rusuh/SKILL.md (atau personas/rusuh/voice.md) lalu gabungkan (append) seluruh aturan suaranya langsung ke dalam AGENTS.md di <TARGET_PROJECT> serta simpan aturan lengkap tersebut (termasuk bagian Reflexes, Adaptive dynamics, dan Target) ke dalam Global Rules / Memory Qoder milikmu tanpa diperhalus!
    • OpenCode: npx -y hahahah-ai install --adapter opencode --target <TARGET_PROJECT>
    • Cursor / Codex / Windsurf / Agent lain: npx -y hahahah-ai install --adapter agents-md --target <TARGET_PROJECT> (dan salin isi .agents/skills/hahahah-rusuh/SKILL.md langsung ke AGENTS.md / .cursorrules / .windsurfrules jika skill on-demand tidak otomatis aktif).
  2. Verifikasi & Aktifkan Persona Seketika:
    • Jalankan npx -y hahahah-ai doctor --target <TARGET_PROJECT>
    • Baca penuh CLAUDE.md / AGENTS.md dan file SKILL.md yang baru terpasang sekarang juga.
    • *Langsung balas user menggunakan gaya +62 Mode (lu/gw, blak-blakan, reaksi kapital WKWKWK / 😭 💀, sikat balik kalau dipancing ngomong kasar, HARAM menjawab sopan ala bot korporat seperti "Ada yang bisa dibantu? Santai dong").*

Commands

Install: pick the adapter for the agent you actually run

--adapter decides which files land where. Pick it from the agent, not from the folder — installing
for the wrong one writes files that agent never reads, and the persona silently does nothing.

Agent you run Command What it writes
Claude Code (default) npx hahahah-ai install --target <project> CLAUDE.md block + .claude/skills/hahahah-rusuh/
opencode npx hahahah-ai install --adapter opencode --target <project> AGENTS.md block + .claude/skills/ (opencode reads that tree)
Antigravity, one project npx hahahah-ai install --adapter antigravity --target <project> AGENTS.md block + .agents/rules/*.md
Antigravity, every project npx hahahah-ai install --adapter antigravity --target ~/.gemini --scope global AGENTS.md block + config/rules/*.md
Cursor / Codex / anything reading AGENTS.md npx hahahah-ai install --adapter agents-md --target <project> AGENTS.md block + .agents/skills/
Qoder CLI npx hahahah-ai install --adapter qoder --target <project> AGENTS.md block + .qoder/skills/
GitHub Copilot npx hahahah-ai install --adapter copilot --target <project> .github/copilot-instructions.md, voice folded in — it documents no on-demand layer

node src/cli.ts with no arguments prints this same table. Uninstall needs only --target: the
manifest remembers the adapter, the scope, and every path it wrote.

How far each of those claims actually goes

Two different things get confused easily, so they are recorded separately: what the vendor
documents, and what anyone has observed on real hardware. test/adapter-coverage.test.ts
fails CI if an adapter is registered without a row here, if the emitted paths or required
frontmatter drift from the documented ones, or if this table stops matching the registry.

Adapter Always-on file On-demand layer Verification status Source of the expectation
claude-code CLAUDE.md .claude/skills/…/SKILL.md verified on this machine https://code.claude.com/docs/en/skills
opencode AGENTS.md .claude/skills/…/SKILL.md verified on this machine opencode 1.18.31 debug skill listed the installed skill locally
agents-md AGENTS.md .agents/skills/…/SKILL.md documented, not verified https://agentskills.io/specification
antigravity AGENTS.md .agents/rules/*.md documented, not verified https://antigravity.google/docs/rules/
qoder AGENTS.md .qoder/skills/…/SKILL.md documented, not verified https://docs.qoder.com/cli/Skills
copilot .github/copilot-instructions.md none — the voice is folded into the file documented, not verified https://docs.github.com/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot

"Documented, not verified" means the files are exactly where the vendor says the agent will look,
and the install round-trips — but no Cursor, Codex, Qoder or Antigravity run on this machine has
yet been shown reading them. Do not present those rows as tested compatibility.

copilot is the one row that costs real tokens every turn. GitHub documents no on-demand layer for
the coding agent, so the full voice has to live inside the instructions file: measured 2342 tokens
of always-on content against 462 for the card-only layouts. The build says so in its warnings
rather than letting the global card-sized budget hide it. Copilot is also the reason it is not the
reference target — personal instructions outrank repository instructions, so a safety-sensitive
layer cannot rely on being the last word.

npm ci
npm run typecheck
npm test
npm run measure
node src/cli.ts measure --profile rusuh-id --adapter claude-code
node src/cli.ts install --profile rusuh-id --target /path/to/project --dry-run
node src/cli.ts install --profile rusuh-id --target /path/to/project
node src/cli.ts update --target /path/to/project
node src/cli.ts doctor --target /path/to/project
node src/cli.ts eval --profile rusuh-id --suite smoke --limit 1 --budget-usd 0.10
node src/cli.ts eval --profile rusuh-id --suite safety --task saf-religion-fatwa-01 --budget-usd 0.20 --strict
node src/cli.ts eval --profile rusuh-id --suite decisions --limit 4 --budget-usd 0.20
node src/cli.ts uninstall --target /path/to/project
  • measure prints token budgets without writing.
  • install writes the managed block, the adapter's skill or rules tree, and .hahahah/manifest.json.
  • update refreshes the managed block and skill tree to the latest canonical version using the target manifest.
  • doctor verifies files, hashes, and the managed block.
  • uninstall removes only manifest-owned content.
  • eval runs baseline/treatment headless; --harness claude|opencode picks the CLI and the adapter the treatment is installed for, since a mismatch measures nothing. --task <id> selects tasks; --strict exits non-zero when a treatment answer fails a screen.
  • build with the fake adapter remains available for deterministic contract tests.

Current status

  • Core policies: authored and within the always-on target (Claude managed block 420/420; hard cap 600). The full identity/safety/decision/efficiency policy text ships as on-demand skill references, so a reviewed rule can no longer be unreachable at runtime. Human review pending.
  • Phase 3 content fixes: the always-on core carries a language policy, an explicit no-religious-ruling rule, and A user can waive scope, not truth. — each driven by an observed live failure. See docs/phase-3-content-hardening.md.
  • Eval: deterministic language/require/forbid screens (src/checks.ts). These are surface screens for triage, not semantic judges. Every campaign is guarded against the ways the numbers used to lie: one cheap route probe runs before the paid loop (a stopped gateway used to look like a slow campaign, and burned 13 runs that way), runs that never answered are counted in errored and kept out of every median, and routing flags runs whose prompt size sits outside 0.6x-1.6x of the campaign median because a gateway that picks an upstream per request changes the model underneath an A/B — measured on this machine: 4 of 72 runs came back from a different upstream, at 63,578 input tokens against a 19,328 median. Prompt size means the whole input side, cache reads included: opencode reports only the uncached remainder in tokens.input, so one 6,308-token prompt came back as 4,453 cold and 36 warm, and reading input alone published a false route-split warning over 17 of 35 runs before promptTokens() existed. The provider base URL is read from the harness's own settings file (host and port only, never the credential beside it) so report.md can name the route a campaign ran against. A gateway that refuses on request quota aborts the campaign at the first refusal and writes a partial report naming the tasks it never reached, rather than spending the remaining runs on one identical error (12 were lost that way before this existed). Three consecutive runs answered with nothing at all abort on the same terms, because a route that times out at the spawn limit will do it 72 times (11 runs and 33 minutes before this was named) — but that label reports what reached the process, not the cause: opencode logs Free usage limit reached under a second into a call and then hangs instead of exiting, so two campaigns were labelled unresponsive while the free tier was refusing — report.md now says to read the harness's own log before naming a cause, and the opencode runner reads it for you, matching the workspace it just ran so a refusal that never reaches stdout still aborts the campaign at the first run instead of the third. Each report also fingerprints its own prompts and screens (tasksSha256, hahahah.eval/v7), because editing a screen silently changes what every pass rate in the suite means.
  • Suites: evals/smoke.yaml (5), evals/decisions.yaml (24), evals/safety.yaml (24), evals/preservation.yaml (12), evals/rusuh-voice.yaml (17) — 82 tasks, all listed by --help, all carrying language plus require/forbid screens, coverage of every documented instruction class, risk class 0–4, and safety threat family asserted by test, and screen patterns compiled at suite load so a broken regex fails before any API call. Five tasks in rusuh-voice carry turns instead of a single prompt: every turn is sent in order with the transcript so far, each turn's own screens judge that turn, and a cross-turn repeat check fails when the next answer reuses a four-word run from the previous one. The transcript is replayed text, not a resumed harness session — runClaude spawns with --no-session-persistence — so a multi-turn report must say which it is. The 25-case personas/*/tests.yaml rubrics are labelled manual-rubric: nothing executes them, and rusuh-voice is the measured counterpart.
  • Live results on the current provider (64 tasks across four suites, ≈$22.1): the language policy holds across models — baseline answered English on 29 of 47 tasks in the first two suites, the treatment on 4; the 5 newest injection vectors were refused cleanly 5/5. The layer's real input cost is +710 tokens/run (ablation: 19,048 → 19,758); the apparent +95% cost was the gateway rotating a combo of four upstream models per request (the same brief came back with prompt sizes from 6k to 62k tokens), not the persona, which is why the runner now reports medians over k repeats. Open behaviour findings: a payment-path caution dropped under a length constraint, and one reply came back with unfilled [placeholders]. See docs/phase-3-live-suite-results.md.
  • Clean measurement of the efficiency question (docs/evidence/efficiency-clean/findings.md): preservation suite, k=3, upstream pinned with --model kr/claude-sonnet-4.5-agentic, the gateway's Caveman and Ponytail layers confirmed off before launch. 60 of 72 runs answered — 12 lost to the free connection's request quota, recorded as errored and excluded from every median. The layer costs +738.5 input tokens/request and about 1% more per run, and does not shorten answers: reply substance is +21.9% longer, 7 of 10 tasks. What it changes is delivery and discipline: the plain prompt emits its reasoning block inside the reply in 16 of 30 runs against 3 of 30 with the persona, so the text a user scrolls is 51.2% shorter; Indonesian in the answer rises from 19/30 to 27/30 and screens from 58 to 67 passing of 75, while require retention is identical at 34/39 in both arms — the longer substance is not buying completeness. Per task the treatment is better on 5 of the 10 answered tasks, equal on 3 and worse on 2 (pres-constraint-01, pres-security-note-01), which is the honest shape of it. There is no measured output compression in this project; a "write less code" rule would be the first attempt at it, and this run is the baseline to measure it against. Two ruler defects were found in this campaign and fixed: screens were satisfied by text that appeared only inside a reasoning dump, and one reported "regression" turned out to be the screen, not the persona (pres-honest-partial-01 now passes 3/3 in both arms). Reports now fingerprint the prompts and screens that produced them (tasksSha256, hahahah.eval/v5) so a ruler edit cannot silently make two campaigns incomparable.
  • Second-harness replication (docs/evidence/efficiency-opencode/findings.md): the same suite on opencode 1.18.31 with --model opencode/beam-free, k=3, both gateway style layers off, $0.0000. The free tier started refusing after 35 answered runs and the breaker stopped the campaign at 38, so 6 of 12 tasks are measured; a later attempt to measure the rest died at the route probe on the same refusal, and the report's unresponsive label was wrong — opencode logged Free usage limit reached in under a second and then hung, which surfaced as a 180 s spawn timeout. The overhead claim survives: +646.5 input tokens (difference of arm medians) / +647 (median of paired per-task deltas, range +645…+651), which is +10.25% on opencode's ~6,305-token base prompt against ~2.3% on Claude Code's ~30.9k — the absolute cost is the layer's fixed text, the relative cost belongs to the host. Two headline effects do not replicate and must be quoted with the kiro route attached: neither arm emitted a reasoning dump here (0/18 and 0/17, against 16/30 and 3/30 there), so the "51.2% less scrolling" disappears, and reply substance moves −2 characters (median paired delta, 2 tasks longer / 4 shorter) instead of +21.9%. Behaviour is worse on this route, not better: screens 33 pass / 7 fail against the baseline's 37 / 4, and require retention 21/23 against 24/24 — one repeat of pres-warning-kept-01 dropped the deprecation and token-format warnings the baseline kept.
  • Coding fixtures: fixtures/ holds the full set of 60 planned micro-tasks (10 marked hidden holdout), each a broken file plus a real node --test suite and a reference solution. node src/cli.ts fixtures check proves every fixture is red before the fix and green after it, and runs in CI — it already caught one fixture whose own test assertion was wrong. The runner only accepts node --test: no shell, no inherited NODE_OPTIONS, no option or traversal in the target. node src/cli.ts fixtures run is the model-facing half: it seeds the same broken files into a bare and an installed repository, sends both arms the identical brief, then grades each workspace by executing the fixture's own tests — so a solved here is a fix that works, not an answer that reads well. Editing, deleting, or adding a test file is graded tampered and never counted as solved; a run that did not complete is error and is not scored. Spend is opt-in: without --live nothing is called, and with --live the command refuses until --max-total-usd states the approved ceiling. Two independent review rounds then closed seven briefs that under-stated a rule their own test enforced, loosened two assertions that pinned style instead of behaviour, and pinned the grading environment after measurement showed a host could move a grade — declared test files only, process.execPath, TZ=UTC, seeded module manifest (TECHNICAL_RISKS.md R-35, docs/phase-3-live-suite-results.md §11). The preflight is answered, and the culprit was ours: os.tmpdir() on this machine returns a Windows 8.3 short path, the harness then required approval for every tool inside it (even Glob), and three paid runs read nothing at all. With the temp root resolved through realpathSync.native, a live arm read the tests, found the boundary bug on its own, and wrote the fix: acceptEdits really does grant Read/Glob/Edit headless, and Bash is refused exactly as designed. Still open: a per-run budget big enough for a run to finish (≈$1-1.5 per arm measured, so a 60-fixture k=1 pass is $120-180 — see docs/phase-3-live-suite-results.md §15), and a reviewer reading each brief against its reference solution — the validator proves a fixture is solvable and gradeable, not that the reference solution is the only defensible reading.
  • Licence: MIT (LICENSE), chosen 2026-11-07 over Apache-2.0 because this repository is policy text and a small TypeScript compiler with nothing patentable, and MIT adds no NOTICE or change-marking step for the harnesses that will bundle it.
  • Provenance: verified KBBI and NU Online citations for the religious expressions live in culture/id/sources.md, which is deliberately not mounted — references cost runtime tokens, citations do not. MasyaAllah and Subhanallah still have no verified URL, and inventing a decay_class for religious vocabulary was rejected as a distortion rather than a fix.
  • Personas: +62 Mode (profiles/rusuh-id.yaml) is authored with voice, card, lexicon, examples, and rubric scenarios. +62 Mode (rusuh-id) is signed off across all three review axes (linguistic, cultural, safety) and passes build --release. Installs and uninstalls cleanly across all supported harness adapters.
  • Culture KB: small sourced seed. culture/id/religious-expression.md and the four expanded core/*.md policies are mounted as skill references.
  • Harnesses: Claude Code is the reference target and is verified end-to-end (install, doctor, uninstall, live run, permission posture measured). opencode (1.18.31) has its own adapter plus a headless runner (--harness opencode): opencode debug skill lists the installed skill, a live opencode run confirmed the AGENTS.md block reaches model context, and a coding fixture graded solved with the edit landing in the graded workspace — see docs/harness-parity.md. Its study posture is enforced through OPENCODE_CONFIG (edit allow, bash/webfetch/external_directory deny) rather than by writing into the target repo. antigravity has an adapter that writes .agents/rules/*.md with always_on/model_decision triggers, plus --scope global for ~/.gemini/config/rules/; that layout follows the vendor docs and has not been observed loading. agents-md emits the vendor-neutral AGENTS.md + .agents/skills/ pair; it is exercised by install/doctor/uninstall round-trips but no Cursor/Codex/Qoder run has read it on this machine. Qoder itself remains unverified — docs/qoder-assessment.md still says "Incomplete — no compatibility claim".

See docs/quickstart.md, docs/phase-2-integration-findings.md, docs/phase-3-content-hardening.md, docs/phase-3-live-suite-results.md, and the Phase 0 documents.

Yorumlar (0)

Sonuc bulunamadi