-
Notifications
You must be signed in to change notification settings - Fork 4
feat(content): add humanise subagent for AI writing pattern removal #128
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Adds a new humanise subagent adapted from blader/humanizer skill to remove signs of AI-generated writing and make text sound more natural and human. Features: - content/humanise.md subagent with 24 AI writing patterns to detect/fix - /humanise slash command for on-demand text humanisation - humanise-update-helper.sh to check for upstream skill updates - Integration with Content main agent workflow Based on Wikipedia's 'Signs of AI writing' guide maintained by WikiProject AI Cleanup. Tracks upstream version for easy updates when source changes. Upstream: https://github.com/blader/humanizer (v2.1.1)
|
Caution Review failedThe pull request is closed. Note Other AI code review bot(s) detectedCodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review. WalkthroughThis pull request introduces a new "humanise" subagent capability that removes AI writing patterns and transforms generated text into natural human-written prose. It includes comprehensive documentation, a command interface, and a helper script for managing upstream synchronization. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Poem
✨ Finishing touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary of ChangesHello @marcusquinn, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request significantly enhances the content generation and refinement capabilities by integrating a new 'humanise' subagent. This subagent is specifically engineered to detect and eliminate common AI writing patterns, thereby transforming artificial-sounding text into more natural, human-like prose. It provides users with a convenient slash command for immediate text humanisation and incorporates a robust mechanism to track and apply updates from its upstream source, ensuring the tool remains effective and up-to-date in improving content quality. Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
🔍 Code Quality Report�[0;35m[MONITOR]�[0m Code Review Monitoring Report �[0;34m[INFO]�[0m Latest Quality Status: �[0;34m[INFO]�[0m Recent monitoring activity: 📈 Current Quality Metrics
Generated on: Tue Jan 20 02:29:54 UTC 2026 Generated by AI DevOps Framework Code Review Monitoring |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request introduces a new humanise subagent and a corresponding /humanise slash command to remove AI writing patterns from text. The implementation is well-structured, including a detailed subagent prompt, a command definition, and a helper script for tracking upstream updates. The documentation has been updated accordingly. The code is of high quality, with only one minor suggestion for improvement in the update helper script to enhance error reporting.
| fi | ||
|
|
||
| echo "Fetching upstream from ${UPSTREAM_REPO}..." | ||
| if curl -fsSL "$UPSTREAM_RAW" -o "$CACHE_FILE" 2>/dev/null; then |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Redirecting curl's stderr to /dev/null suppresses potentially useful error messages. If curl fails due to network issues (e.g., DNS resolution failure, connection refused), the user will only see a generic 'Failed to fetch upstream' message without any specific details, making troubleshooting difficult. Removing 2>/dev/null will allow curl to display these errors, improving the script's debuggability. The -s option already prevents the progress meter from being displayed.
| if curl -fsSL "$UPSTREAM_RAW" -o "$CACHE_FILE" 2>/dev/null; then | |
| if curl -fsSL "$UPSTREAM_RAW" -o "$CACHE_FILE"; then |
Address review feedback: remove 2>/dev/null from curl to show network errors when fetching upstream fails.
🤖 Augment PR SummarySummary: Adds a new “humanise” content subagent and command to help remove common AI-writing patterns from generated text. Changes:
Technical Notes: The update helper pulls from 🤖 Was this summary useful? React with 👍 or 👎 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| **Problem:** ChatGPT uses curly quotes ("...") instead of straight quotes ("..."). | ||
|
|
||
| **Before:** | ||
| > He said "the project is on track" but others disagreed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| echo "Focus on content changes in the upstream patterns." | ||
| echo "" | ||
|
|
||
| # Show diff (ignore frontmatter differences) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
|
🔍 Code Quality Report�[0;35m[MONITOR]�[0m Code Review Monitoring Report �[0;34m[INFO]�[0m Latest Quality Status: �[0;34m[INFO]�[0m Recent monitoring activity: 📈 Current Quality Metrics
Generated on: Tue Jan 20 02:32:23 UTC 2026 Generated by AI DevOps Framework Code Review Monitoring |
Combined commits: - 🤖 AUTO-FIX: Apply code quality improvements - feat(content): add humanise subagent for AI writing pattern removal (#128)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
🤖 Fix all issues with AI agents
In @.agent/content.md:
- Around line 68-77: The Quick Reference workflow list at the top of
.agent/content.md is inconsistent with the new "Humanising Content" section: it
still lists "Optimize" as step 4 and omits the Humanise step. Update the Quick
Reference workflow list to include the Humanise step (referencing the /humanise
command or content/humanise.md) and renumber the subsequent steps so "Optimize"
follows the Humanise step; ensure the list labels and ordering match the
"Humanising Content" header and its description.
In @.agent/content/humanise.md:
- Around line 247-256: The blockquote heading in the "16. Title Case in
Headings" section is missing surrounding blank lines (triggering MD022); edit
.agent/content/humanise.md around the heading that contains "> ## Strategic
negotiations and global partnerships" (or any blockquote heading) and add a
blank line immediately before the blockquote line and a blank line immediately
after the blockquote block so the blockquote heading is separated from adjacent
paragraphs; ensure other blockquote headings in that section follow the same
pattern.
In @.agent/scripts/humanise-update-helper.sh:
- Around line 182-195: cmd_diff currently can proceed when the chosen subagent
file is missing, masking errors; add an explicit existence guard after resolving
subagent_file (the variable set from LOCAL_SUBAGENT or SOURCE_SUBAGENT in
cmd_diff) that checks [[ -f "$subagent_file" ]] and, if missing, prints a clear
error referencing the missing file and returns non-zero (return 1) so the script
fails fast; ensure this check is placed before any operations that rely on the
file and keeps the existing CACHE_FILE check intact.
- Around line 86-103: The compare_versions function uses GNU-only sort -V;
replace it with a portable bash numeric comparator by adding a version_leq()
helper and updating compare_versions to call it. Implement version_leq to split
versions on dots (and strip non-numeric suffixes if needed), compare each
segment numerically with zero-padding missing segments, and return 0 when left
<= right; then have compare_versions call version_leq(local_ver, upstream_ver)
to return 0 for equal, 1 if local older, and 2 if local newer. Ensure you keep
the same function names (compare_versions and version_leq) so callers remain
valid and avoid external commands like sort -V to guarantee cross-platform
behavior.
| ### Humanising Content | ||
|
|
||
| Use `/humanise` or `content/humanise.md` to remove AI writing patterns: | ||
| - Inflated significance and promotional language | ||
| - Vague attributions and weasel words | ||
| - AI vocabulary (delve, tapestry, landscape, etc.) | ||
| - Rule of three, negative parallelisms | ||
| - Em dash overuse, excessive hedging | ||
|
|
||
| The humanise subagent is adapted from [blader/humanizer](https://github.com/blader/humanizer), based on Wikipedia's "Signs of AI writing" guide. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Quick Reference workflow still omits the Humanise step.
The top workflow list still shows Optimize as step 4, which conflicts with the new Humanise step. Please update it for consistency.
🛠️ Suggested update to the Quick Reference workflow list
-4. Optimize (SEO, readability)
-5. Publish (via WordPress or CMS)
+4. Humanise (remove AI patterns, add voice)
+5. Optimize (SEO, readability)
+6. Publish (via WordPress or CMS)🤖 Prompt for AI Agents
In @.agent/content.md around lines 68 - 77, The Quick Reference workflow list at
the top of .agent/content.md is inconsistent with the new "Humanising Content"
section: it still lists "Optimize" as step 4 and omits the Humanise step. Update
the Quick Reference workflow list to include the Humanise step (referencing the
/humanise command or content/humanise.md) and renumber the subsequent steps so
"Optimize" follows the Humanise step; ensure the list labels and ordering match
the "Humanising Content" header and its description.
| ### 16. Title Case in Headings | ||
|
|
||
| **Problem:** AI chatbots capitalise all main words in headings. | ||
|
|
||
| **Before:** | ||
| > ## Strategic Negotiations And Global Partnerships | ||
|
|
||
| **After:** | ||
| > ## Strategic negotiations and global partnerships | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add blank lines around blockquote headings (MD022).
Markdownlint/Codacy flags the headings inside blockquotes as missing surrounding blank lines.
🛠️ Add blank blockquote lines around the headings
**Before:**
-> ## Strategic Negotiations And Global Partnerships
+>
+> ## Strategic Negotiations And Global Partnerships
+>
**After:**
-> ## Strategic negotiations and global partnerships
+>
+> ## Strategic negotiations and global partnerships
+>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ### 16. Title Case in Headings | |
| **Problem:** AI chatbots capitalise all main words in headings. | |
| **Before:** | |
| > ## Strategic Negotiations And Global Partnerships | |
| **After:** | |
| > ## Strategic negotiations and global partnerships | |
| ### 16. Title Case in Headings | |
| **Problem:** AI chatbots capitalise all main words in headings. | |
| **Before:** | |
| > | |
| > ## Strategic Negotiations And Global Partnerships | |
| > | |
| **After:** | |
| > | |
| > ## Strategic negotiations and global partnerships | |
| > | |
🧰 Tools
🪛 GitHub Check: Codacy Static Code Analysis
[notice] 252-252: .agent/content/humanise.md#L252
Expected: 1; Actual: 0; Above
[notice] 255-255: .agent/content/humanise.md#L255
Expected: 1; Actual: 0; Above
🪛 markdownlint-cli2 (0.18.1)
252-252: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above
(MD022, blanks-around-headings)
255-255: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above
(MD022, blanks-around-headings)
🤖 Prompt for AI Agents
In @.agent/content/humanise.md around lines 247 - 256, The blockquote heading in
the "16. Title Case in Headings" section is missing surrounding blank lines
(triggering MD022); edit .agent/content/humanise.md around the heading that
contains "> ## Strategic negotiations and global partnerships" (or any
blockquote heading) and add a blank line immediately before the blockquote line
and a blank line immediately after the blockquote block so the blockquote
heading is separated from adjacent paragraphs; ensure other blockquote headings
in that section follow the same pattern.
| # Compare versions | ||
| compare_versions() { | ||
| local local_ver="$1" | ||
| local upstream_ver="$2" | ||
|
|
||
| if [[ "$local_ver" == "$upstream_ver" ]]; then | ||
| return 0 # Same version | ||
| fi | ||
|
|
||
| # Use sort -V for version comparison | ||
| local lowest | ||
| lowest=$(printf '%s\n%s' "$local_ver" "$upstream_ver" | sort -V | head -1) | ||
| if [[ "$lowest" == "$local_ver" ]]; then | ||
| return 1 # Local is older | ||
| else | ||
| return 2 # Local is newer (shouldn't happen normally) | ||
| fi | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# Check if the file exists and read the relevant lines
if [ -f ".agent/scripts/humanise-update-helper.sh" ]; then
echo "=== File found. Reading lines 86-103 ==="
sed -n '86,103p' ".agent/scripts/humanise-update-helper.sh"
else
echo "File not found"
fiRepository: marcusquinn/aidevops
Length of output: 596
🏁 Script executed:
# Test sort -V availability and behavior
echo "=== Testing sort -V support ==="
if sort -V </dev/null >/dev/null 2>&1; then
echo "sort -V is supported in this environment"
else
echo "sort -V is NOT supported in this environment"
fi
# Show sort version/help info
echo ""
echo "=== Sort version info ==="
sort --version 2>&1 | head -1 || sort -h 2>&1 | head -5Repository: marcusquinn/aidevops
Length of output: 188
🏁 Script executed:
# Test the proposed bash-only version comparison function
bash << 'EOF'
echo "=== Testing proposed version_leq function ==="
# The proposed function from review
version_leq() {
local IFS=.
local -a a=($1) b=($2)
local i max=$(( ${`#a`[@]} > ${`#b`[@]} ? ${`#a`[@]} : ${`#b`[@]} ))
for ((i=0; i<max; i++)); do
local ai=${a[i]:-0} bi=${b[i]:-0}
if ((10#$ai < 10#$bi)); then return 0; fi
if ((10#$ai > 10#$bi)); then return 1; fi
done
return 0
}
# Test cases
test_version() {
local v1="$1" v2="$2" expected="$3"
if version_leq "$v1" "$v2"; then
result=0
else
result=1
fi
if [[ "$result" == "$expected" ]]; then
echo "✓ version_leq '$v1' '$v2' = $result (expected)"
else
echo "✗ version_leq '$v1' '$v2' = $result (expected $expected)"
fi
}
# Run tests
test_version "1.0.0" "1.0.1" "0" # 1.0.0 <= 1.0.1 should be true (0)
test_version "1.0.1" "1.0.0" "1" # 1.0.1 <= 1.0.0 should be false (1)
test_version "1.0.0" "1.0.0" "0" # 1.0.0 <= 1.0.0 should be true (0)
test_version "2.0.0" "1.9.9" "1" # 2.0.0 <= 1.9.9 should be false (1)
test_version "1.0" "1.0.0" "0" # 1.0 <= 1.0.0 should be true (0)
test_version "1.0.0.1" "1.0.0.2" "0" # 1.0.0.1 <= 1.0.0.2 should be true (0)
EOFRepository: marcusquinn/aidevops
Length of output: 381
🏁 Script executed:
# Check the full context around lines 86-103 to understand usage
if [ -f ".agent/scripts/humanise-update-helper.sh" ]; then
echo "=== Full function context (lines 80-110) ==="
sed -n '80,110p' ".agent/scripts/humanise-update-helper.sh"
fiRepository: marcusquinn/aidevops
Length of output: 858
Replace sort -V with cross-platform version comparison.
The sort -V flag is GNU-specific and unavailable on macOS and BSD systems, breaking version checks on common developer machines. This violates the cross-platform reliability requirement for automation scripts. Implement the bash-only version_leq() function shown below:
Portable version comparison without GNU dependency
+version_leq() {
+ local IFS=.
+ local -a a=($1) b=($2)
+ local i max=$(( ${`#a`[@]} > ${`#b`[@]} ? ${`#a`[@]} : ${`#b`[@]} ))
+ for ((i=0; i<max; i++)); do
+ local ai=${a[i]:-0} bi=${b[i]:-0}
+ if ((10#$ai < 10#$bi)); then return 0; fi
+ if ((10#$ai > 10#$bi)); then return 1; fi
+ done
+ return 0
+}
+
# Compare versions
compare_versions() {
local local_ver="$1"
local upstream_ver="$2"
if [[ "$local_ver" == "$upstream_ver" ]]; then
return 0 # Same version
fi
- # Use sort -V for version comparison
- local lowest
- lowest=$(printf '%s\n%s' "$local_ver" "$upstream_ver" | sort -V | head -1)
- if [[ "$lowest" == "$local_ver" ]]; then
- return 1 # Local is older
- else
- return 2 # Local is newer (shouldn't happen normally)
- fi
+ if version_leq "$local_ver" "$upstream_ver"; then
+ return 1 # Local is older
+ else
+ return 2 # Local is newer (shouldn't happen normally)
+ fi
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| # Compare versions | |
| compare_versions() { | |
| local local_ver="$1" | |
| local upstream_ver="$2" | |
| if [[ "$local_ver" == "$upstream_ver" ]]; then | |
| return 0 # Same version | |
| fi | |
| # Use sort -V for version comparison | |
| local lowest | |
| lowest=$(printf '%s\n%s' "$local_ver" "$upstream_ver" | sort -V | head -1) | |
| if [[ "$lowest" == "$local_ver" ]]; then | |
| return 1 # Local is older | |
| else | |
| return 2 # Local is newer (shouldn't happen normally) | |
| fi | |
| } | |
| version_leq() { | |
| local IFS=. | |
| local -a a=($1) b=($2) | |
| local i max=$(( ${`#a`[@]} > ${`#b`[@]} ? ${`#a`[@]} : ${`#b`[@]} )) | |
| for ((i=0; i<max; i++)); do | |
| local ai=${a[i]:-0} bi=${b[i]:-0} | |
| if ((10#$ai < 10#$bi)); then return 0; fi | |
| if ((10#$ai > 10#$bi)); then return 1; fi | |
| done | |
| return 0 | |
| } | |
| # Compare versions | |
| compare_versions() { | |
| local local_ver="$1" | |
| local upstream_ver="$2" | |
| if [[ "$local_ver" == "$upstream_ver" ]]; then | |
| return 0 # Same version | |
| fi | |
| if version_leq "$local_ver" "$upstream_ver"; then | |
| return 1 # Local is older | |
| else | |
| return 2 # Local is newer (shouldn't happen normally) | |
| fi | |
| } |
🤖 Prompt for AI Agents
In @.agent/scripts/humanise-update-helper.sh around lines 86 - 103, The
compare_versions function uses GNU-only sort -V; replace it with a portable bash
numeric comparator by adding a version_leq() helper and updating
compare_versions to call it. Implement version_leq to split versions on dots
(and strip non-numeric suffixes if needed), compare each segment numerically
with zero-padding missing segments, and return 0 when left <= right; then have
compare_versions call version_leq(local_ver, upstream_ver) to return 0 for
equal, 1 if local older, and 2 if local newer. Ensure you keep the same function
names (compare_versions and version_leq) so callers remain valid and avoid
external commands like sort -V to guarantee cross-platform behavior.
| cmd_diff() { | ||
| local subagent_file="$LOCAL_SUBAGENT" | ||
| if [[ -f "$SOURCE_SUBAGENT" ]]; then | ||
| subagent_file="$SOURCE_SUBAGENT" | ||
| fi | ||
|
|
||
| if ! fetch_upstream; then | ||
| return 1 | ||
| fi | ||
|
|
||
| if [[ ! -f "$CACHE_FILE" ]]; then | ||
| echo -e "${RED}No cached upstream file. Run 'check' first.${NC}" | ||
| return 1 | ||
| fi |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fail fast when the local subagent file is missing in diff.
Right now diff can succeed with an empty/invalid comparison because errors are masked by || true. Add an explicit existence check so the command returns non-zero and a clear message. As per coding guidelines, enforce reliable exit codes and diagnostics in automation scripts.
🛠️ Add missing-file guard
local subagent_file="$LOCAL_SUBAGENT"
if [[ -f "$SOURCE_SUBAGENT" ]]; then
subagent_file="$SOURCE_SUBAGENT"
fi
+
+ if [[ ! -f "$subagent_file" ]]; then
+ echo -e "${RED}Humanise subagent not found at: ${subagent_file}${NC}"
+ return 1
+ fi
if ! fetch_upstream; then
return 1
fi📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| cmd_diff() { | |
| local subagent_file="$LOCAL_SUBAGENT" | |
| if [[ -f "$SOURCE_SUBAGENT" ]]; then | |
| subagent_file="$SOURCE_SUBAGENT" | |
| fi | |
| if ! fetch_upstream; then | |
| return 1 | |
| fi | |
| if [[ ! -f "$CACHE_FILE" ]]; then | |
| echo -e "${RED}No cached upstream file. Run 'check' first.${NC}" | |
| return 1 | |
| fi | |
| cmd_diff() { | |
| local subagent_file="$LOCAL_SUBAGENT" | |
| if [[ -f "$SOURCE_SUBAGENT" ]]; then | |
| subagent_file="$SOURCE_SUBAGENT" | |
| fi | |
| if [[ ! -f "$subagent_file" ]]; then | |
| echo -e "${RED}Humanise subagent not found at: ${subagent_file}${NC}" | |
| return 1 | |
| fi | |
| if ! fetch_upstream; then | |
| return 1 | |
| fi | |
| if [[ ! -f "$CACHE_FILE" ]]; then | |
| echo -e "${RED}No cached upstream file. Run 'check' first.${NC}" | |
| return 1 | |
| fi |
🤖 Prompt for AI Agents
In @.agent/scripts/humanise-update-helper.sh around lines 182 - 195, cmd_diff
currently can proceed when the chosen subagent file is missing, masking errors;
add an explicit existence guard after resolving subagent_file (the variable set
from LOCAL_SUBAGENT or SOURCE_SUBAGENT in cmd_diff) that checks [[ -f
"$subagent_file" ]] and, if missing, prints a clear error referencing the
missing file and returns non-zero (return 1) so the script fails fast; ensure
this check is placed before any operations that rely on the file and keeps the
existing CACHE_FILE check intact.



Summary
content/humanise.mdsubagent adapted from blader/humanizer to remove AI writing patterns/humaniseslash command for on-demand text humanisationhumanise-update-helper.shto check for upstream skill updatesFeatures
The humanise subagent detects and fixes 24 AI writing patterns including:
Based on Wikipedia's "Signs of AI writing" guide maintained by WikiProject AI Cleanup.
Usage
Or invoke via Content agent workflow.
Upstream Tracking
The subagent tracks upstream version (currently v2.1.1) and includes a helper script to check for updates:
Files Changed
.agent/content/humanise.md- New subagent (adapted with British English).agent/scripts/commands/humanise.md- Slash command.agent/scripts/humanise-update-helper.sh- Update checker.agent/content.md- Updated to reference humanise.agent/AGENTS.md- Documentation updatesSummary by CodeRabbit
New Features
/humanisecommand to transform AI-generated text into more natural, human-sounding prose with pattern detection and rewriting capabilities.Documentation
✏️ Tip: You can customize this high-level summary in your review settings.