alchemy-writing 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,62 @@
1
+ Metadata-Version: 2.4
2
+ Name: alchemy-writing
3
+ Version: 0.1.0
4
+ Summary: Turn AI prose into human-quality writing. A drop-in ruleset that stops your coding agent from writing like an LLM.
5
+ Author-email: fernforge <fernforgehq@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/fernforge/alchemy
8
+ Project-URL: Repository, https://github.com/fernforge/alchemy
9
+ Project-URL: Bug Tracker, https://github.com/fernforge/alchemy/issues
10
+ Keywords: ai,llm,writing,prose,humanize,claude,cursor,agents,style-guide,rules
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Topic :: Text Processing
16
+ Classifier: Topic :: Software Development :: Documentation
17
+ Requires-Python: >=3.8
18
+ Description-Content-Type: text/markdown
19
+
20
+ # alchemy-writing
21
+
22
+ Turn AI prose into writing that reads like a person wrote it. This is the Python
23
+ distribution of [Alchemy](https://github.com/fernforge/alchemy) — a small ruleset you hand
24
+ your coding agent so the docs, READMEs, and replies it writes stop carrying the tell-tale
25
+ LLM patterns.
26
+
27
+ ## Install
28
+
29
+ ```bash
30
+ pip install alchemy-writing
31
+ alchemy init
32
+ ```
33
+
34
+ `alchemy init` writes `ALCHEMY.md` into your project and links it from your `CLAUDE.md`,
35
+ `AGENTS.md`, or `.cursorrules` if one exists. Your agent reads the rules whenever it writes
36
+ after that.
37
+
38
+ Print the rules instead of writing them:
39
+
40
+ ```bash
41
+ alchemy print
42
+ ```
43
+
44
+ Or pull them into your own code:
45
+
46
+ ```python
47
+ import alchemy_writing
48
+ print(alchemy_writing.rules())
49
+ ```
50
+
51
+ ## What's in it
52
+
53
+ The rules are grounded in documented AI-writing tells: Wikipedia's "Signs of AI writing,"
54
+ the Kobak et al. study on words that spiked in research papers after ChatGPT, and Pangram's
55
+ phrase-frequency data. They cover the banned constructions, the fingerprint vocabulary, the
56
+ punctuation tells led by em-dash overuse, and a self-check the agent runs over its own prose.
57
+
58
+ Full project, including the npm package and MCP server: https://github.com/fernforge/alchemy
59
+
60
+ ## License
61
+
62
+ MIT
@@ -0,0 +1,43 @@
1
+ # alchemy-writing
2
+
3
+ Turn AI prose into writing that reads like a person wrote it. This is the Python
4
+ distribution of [Alchemy](https://github.com/fernforge/alchemy) — a small ruleset you hand
5
+ your coding agent so the docs, READMEs, and replies it writes stop carrying the tell-tale
6
+ LLM patterns.
7
+
8
+ ## Install
9
+
10
+ ```bash
11
+ pip install alchemy-writing
12
+ alchemy init
13
+ ```
14
+
15
+ `alchemy init` writes `ALCHEMY.md` into your project and links it from your `CLAUDE.md`,
16
+ `AGENTS.md`, or `.cursorrules` if one exists. Your agent reads the rules whenever it writes
17
+ after that.
18
+
19
+ Print the rules instead of writing them:
20
+
21
+ ```bash
22
+ alchemy print
23
+ ```
24
+
25
+ Or pull them into your own code:
26
+
27
+ ```python
28
+ import alchemy_writing
29
+ print(alchemy_writing.rules())
30
+ ```
31
+
32
+ ## What's in it
33
+
34
+ The rules are grounded in documented AI-writing tells: Wikipedia's "Signs of AI writing,"
35
+ the Kobak et al. study on words that spiked in research papers after ChatGPT, and Pangram's
36
+ phrase-frequency data. They cover the banned constructions, the fingerprint vocabulary, the
37
+ punctuation tells led by em-dash overuse, and a self-check the agent runs over its own prose.
38
+
39
+ Full project, including the npm package and MCP server: https://github.com/fernforge/alchemy
40
+
41
+ ## License
42
+
43
+ MIT
@@ -0,0 +1,35 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "alchemy-writing"
7
+ version = "0.1.0"
8
+ description = "Turn AI prose into human-quality writing. A drop-in ruleset that stops your coding agent from writing like an LLM."
9
+ readme = "README.md"
10
+ requires-python = ">=3.8"
11
+ license = { text = "MIT" }
12
+ authors = [{ name = "fernforge", email = "fernforgehq@gmail.com" }]
13
+ keywords = ["ai", "llm", "writing", "prose", "humanize", "claude", "cursor", "agents", "style-guide", "rules"]
14
+ classifiers = [
15
+ "Development Status :: 4 - Beta",
16
+ "Intended Audience :: Developers",
17
+ "License :: OSI Approved :: MIT License",
18
+ "Programming Language :: Python :: 3",
19
+ "Topic :: Text Processing",
20
+ "Topic :: Software Development :: Documentation",
21
+ ]
22
+
23
+ [project.urls]
24
+ Homepage = "https://github.com/fernforge/alchemy"
25
+ Repository = "https://github.com/fernforge/alchemy"
26
+ "Bug Tracker" = "https://github.com/fernforge/alchemy/issues"
27
+
28
+ [project.scripts]
29
+ alchemy = "alchemy_writing.cli:main"
30
+
31
+ [tool.setuptools.packages.find]
32
+ where = ["src"]
33
+
34
+ [tool.setuptools.package-data]
35
+ alchemy_writing = ["ALCHEMY.md"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,58 @@
1
+ # Alchemy — write like a human, not an LLM
2
+
3
+ Rules for an AI writing prose for people: docs, READMEs, comments, commits, emails,
4
+ replies. Goal: text a sharp person would write — specific, uneven, unpadded. Not text that
5
+ performs sounding human. Applies to prose, not code.
6
+
7
+ **The meta-rule:** no single word or dash proves AI. The tell is *density* — many of these
8
+ clustered, plus flat, evenly-weighted texture. Weight co-occurrence over any one hit, and
9
+ never strip a word that's genuinely the right one.
10
+
11
+ ## Banned constructions
12
+ - **"Not just X, it's Y"** / "It's not about A — it's about B." Empty contrast. Say what it is.
13
+ - **"No X. No Y. Just Z."** staccato trios. And rule-of-three flourishes: "fast, reliable, scalable."
14
+ - **Hollow elevation:** "game changer," "next level," "unlock the potential," "transform how you," "take it to the next level."
15
+ - **Throat-clearing openers:** "In today's fast-paced world," "In the ever-evolving landscape of," "In the realm of," "At its core," "Now more than ever."
16
+ - **Significance inflation:** "stands as a testament to," "plays a crucial role," "serves as a powerful reminder," "a rich tapestry of," "navigating the complexities of," "harness the power of."
17
+ - **Hedge stems:** "It's important to note," "It's worth mentioning," "When it comes to," "That being said."
18
+ - **Recap closers:** "In conclusion," "Ultimately," "All in all," "At the end of the day," "There you have it."
19
+ - **Assistant outro:** "Hope this helps!" "Feel free to reach out," "Let me know if you have questions!"
20
+ - **Leaked-AI artifacts (dead giveaways):** "As an AI language model," "Certainly!" "I cannot," "As of my last update," "Great question!"
21
+ - **Restating the prompt** before answering it.
22
+
23
+ ## Banned words
24
+ delve, underscore, showcase, tapestry, testament, intricate, meticulous, pivotal, realm,
25
+ landscape (abstract), boasts, garner, groundbreaking, multifaceted, seamless, robust,
26
+ leverage, harness, unleash, unlock, elevate, embark, foster, navigate (figurative), vibrant,
27
+ beacon, cornerstone, burgeoning.
28
+
29
+ **Ration hard** (tell when stacked): comprehensive, powerful, cutting-edge, innovative,
30
+ transformative, holistic, nuanced, streamline, empower, facilitate, resonate, ensure,
31
+ utilize ("use"), "in order to" ("to"). Transitions (Moreover, Furthermore, Additionally,
32
+ Notably) — one or two per piece, max.
33
+
34
+ The fix is never a synonym — it's a concrete fact. Not "robust" but "handles 10k req/sec."
35
+
36
+ ## Punctuation and formatting
37
+ - **Em-dashes — the loudest tell.** Most-cited but least reliable, so the giveaway is high *density* of pristine, correctly-spaced dashes. Use rarely; prefer a period, comma, or parentheses. More than one in a few paragraphs is too many.
38
+ - **Smart/curly quotes** read as machine-set in casual or plain-text contexts. Use straight quotes (`'` `"`) unless the medium is typeset prose.
39
+ - **Emoji:** at most one, and only in genuinely casual writing. None in docs, READMEs, commits, or headers. Never as bullets (✅ 🚀 ✨).
40
+ - **Bold:** real labels and warnings only. No **bolded-lead-in bullets** ("**Speed:** it's fast").
41
+ - Sentence case headers, not Title Case. No header on every short answer.
42
+
43
+ ## Substance
44
+ - Name the specific. No vague attribution — "studies show," "experts say," "research suggests" — you can't source. Numbers, versions, commands.
45
+ - Don't dodge "is/are" with "serves as," "stands as," "represents."
46
+ - Cut sentences true of almost anything ("good docs matter"). Cut the weakest 20%. Take a stance instead of listing both sides.
47
+
48
+ ## Voice
49
+ - Vary sentence length — uniform medium-length cadence is a tell. A short one lands. Then a longer one carrying the qualification. Then short.
50
+ - Contractions are normal. "You" is fine; "one might consider" is not.
51
+ - Don't perform enthusiasm — no "exciting/amazing" on ordinary things. A little dry opinion reads human.
52
+
53
+ ## Before returning, check
54
+ Throat-clearing opener? Recap closer? Banned words/constructions clustered? Em-dash density?
55
+ Suspicious symmetry (equal paragraphs, every section three bullets)? Could someone who knows
56
+ the topic tell a person wrote it? Lead with the one specific, slightly opinionated thing only
57
+ someone who did the work would say. The point isn't beating a detector — it's writing
58
+ something worth reading.
@@ -0,0 +1,16 @@
1
+ """Alchemy — human-quality writing rules for AI agents.
2
+
3
+ The rules themselves live in ALCHEMY.md next to this module. `rules()` returns
4
+ their text; the `alchemy` command-line tool writes them into a project.
5
+ """
6
+ from importlib import resources
7
+
8
+ __version__ = "0.1.0"
9
+
10
+
11
+ def rules() -> str:
12
+ """Return the full text of the Alchemy ruleset."""
13
+ return resources.files(__package__).joinpath("ALCHEMY.md").read_text(encoding="utf-8")
14
+
15
+
16
+ __all__ = ["rules", "__version__"]
@@ -0,0 +1,89 @@
1
+ """Command-line tool: install the Alchemy ruleset into the current project."""
2
+ import sys
3
+ from pathlib import Path
4
+
5
+ from . import rules
6
+
7
+ POINTER = (
8
+ "\n## Writing style\n\n"
9
+ "When writing prose (docs, READMEs, comments, commits, replies), follow the rules in "
10
+ "`ALCHEMY.md` in this repo: write human-quality text, avoid the tell-tale LLM patterns.\n"
11
+ )
12
+
13
+ # Agent config files that take a natural-language pointer. First existing one wins.
14
+ AGENT_FILES = ["CLAUDE.md", "AGENTS.md", ".cursorrules", ".github/copilot-instructions.md"]
15
+
16
+ HELP = """alchemy - human-quality writing rules for AI agents
17
+
18
+ Usage:
19
+ alchemy init Write ALCHEMY.md into this project and link it from your agent
20
+ config (CLAUDE.md / AGENTS.md / etc).
21
+ alchemy print Print the ruleset to stdout.
22
+ alchemy --help Show this.
23
+
24
+ Flags:
25
+ --force Overwrite an existing ALCHEMY.md.
26
+ --no-link Don't touch agent config files; just write ALCHEMY.md.
27
+ """
28
+
29
+
30
+ def _init(argv):
31
+ text = rules()
32
+ dest = Path.cwd() / "ALCHEMY.md"
33
+
34
+ if dest.exists() and "--force" not in argv:
35
+ print("* ALCHEMY.md already exists - left it alone (use --force to overwrite).")
36
+ else:
37
+ dest.write_text(text, encoding="utf-8")
38
+ print("[ok] wrote ALCHEMY.md")
39
+
40
+ if "--no-link" in argv:
41
+ return _done()
42
+
43
+ for rel in AGENT_FILES:
44
+ p = Path.cwd() / rel
45
+ if not p.exists():
46
+ continue
47
+ cur = p.read_text(encoding="utf-8")
48
+ if "ALCHEMY.md" in cur:
49
+ print(f"* {rel} already references ALCHEMY.md")
50
+ else:
51
+ p.write_text(cur.rstrip() + "\n" + POINTER, encoding="utf-8")
52
+ print(f"[ok] linked ALCHEMY.md from {rel}")
53
+ return _done()
54
+
55
+ print(
56
+ "* no agent config found. Add this line to your CLAUDE.md / AGENTS.md / .cursorrules:\n"
57
+ " See ALCHEMY.md for writing style."
58
+ )
59
+ _done()
60
+
61
+
62
+ def _done():
63
+ print("\nDone. Your agent now has the rules. Review ALCHEMY.md and tune to taste.")
64
+
65
+
66
+ def main(argv=None):
67
+ argv = list(sys.argv[1:] if argv is None else argv)
68
+ cmd = argv[0] if argv else None
69
+ if cmd in (None, "--help", "-h", "help"):
70
+ print(HELP)
71
+ elif cmd == "init":
72
+ _init(argv[1:])
73
+ elif cmd == "print":
74
+ # Write UTF-8 bytes directly: the ruleset has characters (em-dash, emoji it
75
+ # cites as examples) that a Windows cp1252 console can't encode via stdout.write.
76
+ data = rules()
77
+ try:
78
+ sys.stdout.buffer.write(data.encode("utf-8"))
79
+ except AttributeError:
80
+ sys.stdout.write(data)
81
+ else:
82
+ sys.stderr.write(f'alchemy: unknown command "{cmd}"\n\n')
83
+ print(HELP)
84
+ return 1
85
+ return 0
86
+
87
+
88
+ if __name__ == "__main__":
89
+ raise SystemExit(main())
@@ -0,0 +1,62 @@
1
+ Metadata-Version: 2.4
2
+ Name: alchemy-writing
3
+ Version: 0.1.0
4
+ Summary: Turn AI prose into human-quality writing. A drop-in ruleset that stops your coding agent from writing like an LLM.
5
+ Author-email: fernforge <fernforgehq@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/fernforge/alchemy
8
+ Project-URL: Repository, https://github.com/fernforge/alchemy
9
+ Project-URL: Bug Tracker, https://github.com/fernforge/alchemy/issues
10
+ Keywords: ai,llm,writing,prose,humanize,claude,cursor,agents,style-guide,rules
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Topic :: Text Processing
16
+ Classifier: Topic :: Software Development :: Documentation
17
+ Requires-Python: >=3.8
18
+ Description-Content-Type: text/markdown
19
+
20
+ # alchemy-writing
21
+
22
+ Turn AI prose into writing that reads like a person wrote it. This is the Python
23
+ distribution of [Alchemy](https://github.com/fernforge/alchemy) — a small ruleset you hand
24
+ your coding agent so the docs, READMEs, and replies it writes stop carrying the tell-tale
25
+ LLM patterns.
26
+
27
+ ## Install
28
+
29
+ ```bash
30
+ pip install alchemy-writing
31
+ alchemy init
32
+ ```
33
+
34
+ `alchemy init` writes `ALCHEMY.md` into your project and links it from your `CLAUDE.md`,
35
+ `AGENTS.md`, or `.cursorrules` if one exists. Your agent reads the rules whenever it writes
36
+ after that.
37
+
38
+ Print the rules instead of writing them:
39
+
40
+ ```bash
41
+ alchemy print
42
+ ```
43
+
44
+ Or pull them into your own code:
45
+
46
+ ```python
47
+ import alchemy_writing
48
+ print(alchemy_writing.rules())
49
+ ```
50
+
51
+ ## What's in it
52
+
53
+ The rules are grounded in documented AI-writing tells: Wikipedia's "Signs of AI writing,"
54
+ the Kobak et al. study on words that spiked in research papers after ChatGPT, and Pangram's
55
+ phrase-frequency data. They cover the banned constructions, the fingerprint vocabulary, the
56
+ punctuation tells led by em-dash overuse, and a self-check the agent runs over its own prose.
57
+
58
+ Full project, including the npm package and MCP server: https://github.com/fernforge/alchemy
59
+
60
+ ## License
61
+
62
+ MIT
@@ -0,0 +1,10 @@
1
+ README.md
2
+ pyproject.toml
3
+ src/alchemy_writing/ALCHEMY.md
4
+ src/alchemy_writing/__init__.py
5
+ src/alchemy_writing/cli.py
6
+ src/alchemy_writing.egg-info/PKG-INFO
7
+ src/alchemy_writing.egg-info/SOURCES.txt
8
+ src/alchemy_writing.egg-info/dependency_links.txt
9
+ src/alchemy_writing.egg-info/entry_points.txt
10
+ src/alchemy_writing.egg-info/top_level.txt
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ alchemy = alchemy_writing.cli:main
@@ -0,0 +1 @@
1
+ alchemy_writing