{"id":50699316,"url":"https://github.com/gagoar/iceberg","last_synced_at":"2026-06-09T08:04:12.664Z","repository":{"id":362344462,"uuid":"1258461530","full_name":"gagoar/iceberg","owner":"gagoar","description":"https://gagoar.github.io/iceberg/","archived":false,"fork":false,"pushed_at":"2026-06-03T19:12:42.000Z","size":42,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-03T21:04:38.480Z","etag":null,"topics":["claude-code","plugin","skills"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gagoar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-03T15:47:13.000Z","updated_at":"2026-06-03T19:12:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gagoar/iceberg","commit_stats":null,"previous_names":["gagoar/iceberg"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/gagoar/iceberg","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gagoar%2Ficeberg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gagoar%2Ficeberg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gagoar%2Ficeberg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gagoar%2Ficeberg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gagoar","download_url":"https://codeload.github.com/gagoar/iceberg/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gagoar%2Ficeberg/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34096955,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude-code","plugin","skills"],"created_at":"2026-06-09T08:04:10.043Z","updated_at":"2026-06-09T08:04:12.641Z","avatar_url":"https://github.com/gagoar.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# iceberg\n\nA Claude Code plugin that applies Hemingway writing rules to technical documentation.\n\nNamed after Hemingway's iceberg theory: the strength of a document comes from what you cut, not what you add.\n\n## Install\n\n```\n/plugin marketplace add gagoar/iceberg\n/plugin install iceberg@iceberg\n/reload-plugins\n```\n\n## Update\n\n```\n/plugin update iceberg@iceberg\n/reload-plugins\n```\n\nAuto-update is off by default for third-party plugins. Enable it in the plugin manager: open `/plugin` → Marketplaces tab → toggle auto-update for iceberg.\n\n## What it does\n\nTwo skills ship with iceberg:\n\n**`/iceberg:score`** reads any document, analyzes it against 14 writing rules, and returns a graded report — without touching the file. It infers the document's intent automatically and shows two grades side by side: an objective score and an intent-adjusted score.\n\n**`/iceberg:edit`** rewrites the document inline using those same 14 rules. It applies them in order and returns the clean document. No annotations. No changelog.\n\nBoth skills run automatically on every plan Claude produces. No setup needed after install.\n\n## What happens automatically\n\nAfter install, every plan Claude generates is scored before it reaches you. The score report appears at the top of the response. If you want the plan rewritten, run `/iceberg:edit` on it.\n\n## Usage\n\n**Score a file:**\n```\n/iceberg:score path/to/document.md\n```\n\n**Score with explicit intent:**\n```\n/iceberg:score path/to/document.md \"executive summary\"\n```\n\n**Edit a file:**\n```\n/iceberg:edit path/to/document.md\n```\n\n**Edit pasted text:**\n```\n/iceberg:edit\n```\nPaste your text. The skill returns the rewritten version.\n\n## Reading the score report\n\n```\nICEBERG SCORE — deployment-guide.md\nAssumed intent: technical spec\n  (signals: code blocks, component names as subjects, formal headers)\n\n                  Objective   Intent-adjusted\nGrade:               C             C\nDensity:         6.2/100w      6.2/100w   (target: ≤4.0)\nViolations:         18            18\nWord count:      290w\n\nVIOLATIONS\n\nRule 1 — Short sentences  [HIGH / HIGH]  2 violations\n  · \"The system fetches the config and validates it, which can take up to 500ms\n    depending on network conditions and cache state.\" (34w)\n  · … 1 more\n\nRule 2 — Active voice  [HIGH / HIGH]  3 violations\n  · \"The config is loaded by the server\"\n  · \"Errors are forwarded to the logging service\"\n  · … 1 more\n\nRule 9 — Second person  [LOW / LOW]  1 violation\n  · \"We recommend configuring the timeout before deploying.\"\n\n[14 rules total — every violation quoted]\n\nTOP 3 TO FIX (intent-adjusted): passive voice (Rule 2), long sentences (Rule 1), vague descriptors (Rule 14)\nRun /iceberg:edit to apply all fixes.\n```\n\n**Grade** uses violation density — weighted violations per 100 words — so a clean 2,000-word spec and a clean 100-word summary both grade A.\n\n**Objective vs intent-adjusted:** The objective grade applies default severity to all 14 rules. The intent-adjusted grade uses the inferred profile to deprioritize rules that don't apply to this document type. A \"we recommend\" in a conversational guide is expected; in a formal spec it's a violation.\n\n## Grade scale\n\n| Grade | Density (per 100 words) | Meaning |\n|-------|------------------------|---------|\n| A | ≤ 1.0 | Publish-ready |\n| B | ≤ 4.0 | Minor cleanup needed |\n| C | ≤ 8.0 | Needs work before sharing |\n| D | ≤ 15.0 | Significant rewrite required |\n| F | \u003e 15.0 | Start over |\n\n## Intent profiles\n\nThe scorer infers intent from the document's structure, tone, and vocabulary. You can override it by passing an explicit intent string.\n\n| Rule | Technical (default) | Conversational | Executive |\n|------|-------------------|---------------|-----------|\n| 5 — Concrete nouns | MEDIUM | MEDIUM | HIGH |\n| 8 — Lead with answer | MEDIUM | MEDIUM | HIGH |\n| 9 — Second person | LOW | skip | LOW |\n| 11 — Negative framing | LOW | skip | LOW |\n| 12 — Short paragraphs | LOW | skip | HIGH |\n| 13 — Jargon | MEDIUM | HIGH | HIGH |\n\n**Conversational** — guides, tutorials, onboarding docs. \"We built this to help you\" is expected; jargon is penalized harder because readers need definitions.\n\n**Executive** — summaries, proposals, recommendations. Buried answers and long paragraphs are penalized hard; second-person informality is ignored.\n\n**Technical** — specs, READMEs, API docs, plans. Default severity on all rules.\n\n## Before / after\n\nThe same paragraph, before and after `/iceberg:edit`:\n\n**Before** (Grade D, density 8.0/100w):\n\u003e The configuration system was designed in order to facilitate the seamless management of environment-specific settings, and it essentially leverages a hierarchical override mechanism that is quite flexible and arguably one of the most comprehensive solutions available for handling the somewhat complex requirements of modern cloud deployments.\n\n**After** (Grade A, density 0.8/100w):\n\u003e The configuration system manages environment-specific settings through a hierarchical override mechanism. You define values at the base level, then override them per environment. This works well for deployments with hundreds of configuration parameters across staging, production, and preview environments.\n\nWhat changed: 1 sentence (67w) → 3 sentences. Passive voice fixed. Adverbs removed. Qualifiers deleted. Abstract nouns made concrete.\n\n## The 14 Rules\n\n| # | Rule | Example |\n|---|------|---------|\n| 1 | Short sentences | Target 15–20 words. Split at 30. |\n| 2 | Active voice | \"The server loads the config\" — not \"The config is loaded\" |\n| 3 | Strong verbs, no adverbs | \"stalls\" — not \"runs slowly\" |\n| 4 | No qualifiers or hedges | Delete: *very, quite, arguably, tends to, could potentially* |\n| 5 | Concrete nouns | \"add a retry loop\" — not \"implement a comprehensive solution\" |\n| 6 | One idea per sentence | Break at \"and,\" \"which,\" or \"but\" when each side stands alone |\n| 7 | Conditions before instructions | \"If the cache is cold, run the script\" — not the reverse |\n| 8 | Lead with the answer | Conclusion first. Context follows. |\n| 9 | Second person | \"You configure the server\" — not \"We recommend\" |\n| 10 | Simple words | use, help, start, stop — not utilize, facilitate, initiate, terminate |\n| 11 | No negative framing | \"Use HTTPS\" — not \"Don't use HTTP\" |\n| 12 | Short paragraphs | 2–4 sentences. One topic. |\n| 13 | Define or cut jargon | First use gets an inline definition. Plain equivalent beats jargon. |\n| 14 | Measure, don't describe | \"under 100ms\" — not \"fast\" |\n\n## What it doesn't touch\n\nCode blocks, inline code, command names, variable names, URLs, and proper nouns are never modified.\n\n## Long documents\n\nFor documents over 500 words, both skills spawn dedicated subagents (`iceberg-edit`, `iceberg-score`). The main context window stays clean.\n\n## Status line\n\nRun `/statusline-setup` to surface the last score in the Claude Code status bar. The score skill writes `.iceberg/last-score.txt` after every run.\n\n## For plugin developers\n\nSee `TESTING.md` for the manual test checklist. Calibration fixtures are in `examples/eval/` — `violations.md` (expected Grade F), `clean.md` (expected Grade A), and three model-comparison documents. `examples/eval/results.md` records Haiku vs Sonnet accuracy findings.\n\n## License\n\nMIT — [gagoar](https://github.com/gagoar)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgagoar%2Ficeberg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgagoar%2Ficeberg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgagoar%2Ficeberg/lists"}