hahahah
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 9 GitHub stars
Code Pass
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
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)
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 sourcehahahahitu sendiri! Ikuti langkah wajib berikut:
- Gunakan
npx -y hahahah-ailangsung di<TARGET_PROJECT>milik user (atau jika sedang berada di dalam clone repohahahah, jalankannpm cilalu gunakannode 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.mdsecara otomatis saat menerima sapaan kasual singkat (mis."woy anjing"), baca penuh file.qoder/skills/hahahah-rusuh/SKILL.md(ataupersonas/rusuh/voice.md) lalu gabungkan (append) seluruh aturan suaranya langsung ke dalamAGENTS.mddi<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.mdlangsung keAGENTS.md/.cursorrules/.windsurfrulesjika skill on-demand tidak otomatis aktif).- Verifikasi & Aktifkan Persona Seketika:
- Jalankan
npx -y hahahah-ai doctor --target <TARGET_PROJECT>- Baca penuh
CLAUDE.md/AGENTS.mddan fileSKILL.mdyang baru terpasang sekarang juga.- *Langsung balas user menggunakan gaya +62 Mode (
lu/gw, blak-blakan, reaksi kapitalWKWKWK/ 😭 💀, 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
measureprints token budgets without writing.installwrites the managed block, the adapter's skill or rules tree, and.hahahah/manifest.json.updaterefreshes the managed block and skill tree to the latest canonical version using the target manifest.doctorverifies files, hashes, and the managed block.uninstallremoves only manifest-owned content.evalruns baseline/treatment headless;--harness claude|opencodepicks the CLI and the adapter the treatment is installed for, since a mismatch measures nothing.--task <id>selects tasks;--strictexits non-zero when a treatment answer fails a screen.buildwith 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. Seedocs/phase-3-content-hardening.md. - Eval: deterministic
language/require/forbidscreens (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 inerroredand kept out of every median, androutingflags 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 intokens.input, so one 6,308-token prompt came back as 4,453 cold and 36 warm, and readinginputalone published a false route-split warning over 17 of 35 runs beforepromptTokens()existed. The provider base URL is read from the harness's own settings file (host and port only, never the credential beside it) soreport.mdcan 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 logsFree usage limit reachedunder a second into a call and then hangs instead of exiting, so two campaigns were labelledunresponsivewhile the free tier was refusing —report.mdnow 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 carryinglanguageplusrequire/forbidscreens, 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 inrusuh-voicecarryturnsinstead 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-turnrepeatcheck fails when the next answer reuses a four-word run from the previous one. The transcript is replayed text, not a resumed harness session —runClaudespawns with--no-session-persistence— so a multi-turn report must say which it is. The 25-casepersonas/*/tests.yamlrubrics are labelledmanual-rubric: nothing executes them, andrusuh-voiceis 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]. Seedocs/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 aserroredand 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, whilerequireretention 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-01now 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'sunresponsivelabel was wrong — opencode loggedFree usage limit reachedin 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, andrequireretention 21/23 against 24/24 — one repeat ofpres-warning-kept-01dropped 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 realnode --testsuite and a reference solution.node src/cli.ts fixtures checkproves 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 acceptsnode --test: no shell, no inheritedNODE_OPTIONS, no option or traversal in the target.node src/cli.ts fixtures runis 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 asolvedhere is a fix that works, not an answer that reads well. Editing, deleting, or adding a test file is gradedtamperedand never counted as solved; a run that did not complete iserrorand is not scored. Spend is opt-in: without--livenothing is called, and with--livethe command refuses until--max-total-usdstates 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.mdR-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 (evenGlob), and three paid runs read nothing at all. With the temp root resolved throughrealpathSync.native, a live arm read the tests, found the boundary bug on its own, and wrote the fix:acceptEditsreally does grantRead/Glob/Editheadless, andBashis 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 — seedocs/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 noNOTICEor 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 adecay_classfor 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 passesbuild --release. Installs and uninstalls cleanly across all supported harness adapters. - Culture KB: small sourced seed.
culture/id/religious-expression.mdand the four expandedcore/*.mdpolicies 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 skilllists the installed skill, a liveopencode runconfirmed theAGENTS.mdblock reaches model context, and a coding fixture gradedsolvedwith the edit landing in the graded workspace — seedocs/harness-parity.md. Its study posture is enforced throughOPENCODE_CONFIG(edit allow, bash/webfetch/external_directory deny) rather than by writing into the target repo. antigravity has an adapter that writes.agents/rules/*.mdwithalways_on/model_decisiontriggers, plus--scope globalfor~/.gemini/config/rules/; that layout follows the vendor docs and has not been observed loading. agents-md emits the vendor-neutralAGENTS.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.mdstill 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.
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found