{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Cecil - Commands",
  "home_page_url": "https://cecil-945.pages.dev/documentation/commands/",
  "feed_url": "https://cecil-945.pages.dev/documentation/commands/feed.json",
  "description": "Reference of Cecil CLI commands and options.",
  "icon": "https://cecil-945.pages.dev/favicon.7ff4b89eec6dad139a7d2d6561543285.png",
  "favicon": "https://cecil-945.pages.dev/thumbnails/64x/favicon.7ff4b89eec6dad139a7d2d6561543285.png",
  "language": "en",
  "items": [
    {
      "id": "https://cecil-945.pages.dev/documentation/commands/new-site/",
      "url": "https://cecil-945.pages.dev/documentation/commands/new-site/",
      "title": "new:site",
      "summary": "Create a new website.",
      "date_published": "2020-12-19T00:00:00+00:00",
      "date_modified": "2026-10-10T00:00:00+00:00","content_text": "new:site\nCreates a new site.\nUsage\nDescription:\n  Creates a new website\n\nUsage:\n  new:site [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                  Use the given path as working directory\n\nOptions:\n  -f, --force           Override directory if it already exists\n      --demo            Add demo content (pages, templates and assets)\n  -h, --help            Display help for the given command. When no command is given display help for the list command\n  -q, --quiet           Do not output any message\n  -V, --version         Display this application version\n      --ansi|--no-ansi  Force (or disable --no-ansi) ANSI output\n  -n, --no-interaction  Do not ask any interactive question\n  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug\n\nHelp:\n  The new:site command creates a new website in the current directory, or in &lt;path&gt; if provided.\n  If you run this command without any options, it will ask you for the website title, baseline, base URL, description, etc.\n\n    cecil.phar new:site\n    cecil.phar new:site path\/to\/the\/working\/directory\n\n  To create a new website with demo content, run:\n\n    cecil.phar new:site --demo\n\n  To override an existing website, run:\n\n    cecil.phar new:site --force",
      "content_html": "<h1>new:site</h1>\n<p>Creates a new site.</p>\n<h2 id=\"usage\">Usage</h2>\n<pre><code class=\"language-plaintext hljs plaintext\" translate=\"no\">Description:\n  Creates a new website\n\nUsage:\n  new:site [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                  Use the given path as working directory\n\nOptions:\n  -f, --force           Override directory if it already exists\n      --demo            Add demo content (pages, templates and assets)\n  -h, --help            Display help for the given command. When no command is given display help for the list command\n  -q, --quiet           Do not output any message\n  -V, --version         Display this application version\n      --ansi|--no-ansi  Force (or disable --no-ansi) ANSI output\n  -n, --no-interaction  Do not ask any interactive question\n  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug\n\nHelp:\n  The new:site command creates a new website in the current directory, or in &lt;path&gt; if provided.\n  If you run this command without any options, it will ask you for the website title, baseline, base URL, description, etc.\n\n    cecil.phar new:site\n    cecil.phar new:site path/to/the/working/directory\n\n  To create a new website with demo content, run:\n\n    cecil.phar new:site --demo\n\n  To override an existing website, run:\n\n    cecil.phar new:site --force</code></pre>",
      "language": "en"
    },
    {
      "id": "https://cecil-945.pages.dev/documentation/commands/new-page/",
      "url": "https://cecil-945.pages.dev/documentation/commands/new-page/",
      "title": "new:page",
      "summary": "Create a new page, optionally from a model.",
      "date_published": "2020-12-19T00:00:00+00:00",
      "date_modified": "2026-10-10T00:00:00+00:00","content_text": "new:page\nCreates a new page.\nUsage\nDescription:\n  Creates a new page\n\nUsage:\n  new:page [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                        Use the given path as working directory\n\nOptions:\n      --name=NAME             Page path name\n      --slugify|--no-slugify  Slugify file name (or disable --no-slugify)\n  -p, --prefix                Prefix the file name with the current date (`YYYY-MM-DD`)\n  -f, --force                 Override the file if already exist\n  -o, --open                  Open editor automatically\n      --editor=EDITOR         Editor to use with open option\n  -h, --help                  Display help for the given command. When no command is given display help for the list command\n  -q, --quiet                 Do not output any message\n  -V, --version               Display this application version\n      --ansi|--no-ansi        Force (or disable --no-ansi) ANSI output\n  -n, --no-interaction        Do not ask any interactive question\n  -v|vv|vvv, --verbose        Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug\n\nHelp:\n  The new:page command creates a new page file.\n  If you run this command without any options, it will ask you for the page name and other options.\n\n    cecil.phar new:page\n    cecil.phar new:page --name=path\/to\/a-page.md\n    cecil.phar new:page --name=path\/to\/A Page.md --slugify\n\n  To create a new page with a date prefix (i.e: `YYYY-MM-DD`), run:\n\n    cecil.phar new:page --prefix\n\n  To create a new page and open it with an editor, run:\n\n    cecil.phar new:page --open --editor=editor\n\n  To override an existing page, run:\n\n    cecil.phar new:page --force\nPage’s models\nYou can define your own models for your new pages in the models directory:\n\nThe name must be based on the section’s name (e.g.: blog.md)\nThe default model must be named default.md (for root pages or pages’s section without model)\n\nTwo dynamic variables are available:\n\n%title%: the file’s name\n%date%: the current date\n\nOpen with your editor\nWith the --open option, the editor will be opened automatically. So use editor key in your configuration file to define the default editor (e.g.: editor: typora).",
      "content_html": "<h1>new:page</h1>\n<p>Creates a new page.</p>\n<h2 id=\"usage\">Usage</h2>\n<pre><code class=\"language-plaintext hljs plaintext\" translate=\"no\">Description:\n  Creates a new page\n\nUsage:\n  new:page [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                        Use the given path as working directory\n\nOptions:\n      --name=NAME             Page path name\n      --slugify|--no-slugify  Slugify file name (or disable --no-slugify)\n  -p, --prefix                Prefix the file name with the current date (`YYYY-MM-DD`)\n  -f, --force                 Override the file if already exist\n  -o, --open                  Open editor automatically\n      --editor=EDITOR         Editor to use with open option\n  -h, --help                  Display help for the given command. When no command is given display help for the list command\n  -q, --quiet                 Do not output any message\n  -V, --version               Display this application version\n      --ansi|--no-ansi        Force (or disable --no-ansi) ANSI output\n  -n, --no-interaction        Do not ask any interactive question\n  -v|vv|vvv, --verbose        Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug\n\nHelp:\n  The new:page command creates a new page file.\n  If you run this command without any options, it will ask you for the page name and other options.\n\n    cecil.phar new:page\n    cecil.phar new:page --name=path/to/a-page.md\n    cecil.phar new:page --name=path/to/A Page.md --slugify\n\n  To create a new page with a date prefix (i.e: `YYYY-MM-DD`), run:\n\n    cecil.phar new:page --prefix\n\n  To create a new page and open it with an editor, run:\n\n    cecil.phar new:page --open --editor=editor\n\n  To override an existing page, run:\n\n    cecil.phar new:page --force</code></pre>\n<h2 id=\"page-s-models\">Page’s models</h2>\n<p>You can define your own models for your new pages in the <code translate=\"no\">models</code> directory:</p>\n<ol>\n<li>The name must be based on the section’s name (e.g.: <code translate=\"no\">blog.md</code>)</li>\n<li>The default model must be named <code translate=\"no\">default.md</code> (for root pages or pages’s section without model)</li>\n</ol>\n<p>Two dynamic variables are available:</p>\n<ol>\n<li><code translate=\"no\">%title%</code>: the file’s name</li>\n<li><code translate=\"no\">%date%</code>: the current date</li>\n</ol>\n<h2 id=\"open-with-your-editor\">Open with your editor</h2>\n<p>With the <code translate=\"no\">--open</code> option, the editor will be opened automatically. So use <code translate=\"no\">editor</code> key in your configuration file to define the default editor (e.g.: <code translate=\"no\">editor: typora</code>).</p>",
      "language": "en"
    },
    {
      "id": "https://cecil-945.pages.dev/documentation/commands/serve/",
      "url": "https://cecil-945.pages.dev/documentation/commands/serve/",
      "title": "serve",
      "summary": "Preview the website with the built-in server.",
      "date_published": "2020-12-19T00:00:00+00:00",
      "date_modified": "2026-10-10T00:00:00+00:00","content_text": "serve\nBuilds and serves the site locally.\nThe web server is designed to aid website testing. It is not intended to be a full-featured web server and it should not be used on a public network.\nUsage\nDescription:\n  Starts the built-in server\n\nUsage:\n  serve [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                             Use the given path as working directory\n\nOptions:\n  -o, --open                       Open web browser automatically\n      --host=HOST                  Server host [default: \"localhost\"]\n      --port=PORT                  Server port [default: \"8000\"]\n  -w, --watch|--no-watch           Enable (or disable --no-watch) changes watcher (enabled by default)\n  -i, --incremental                Enable incremental builds (rebuild only changed pages)\n  -d, --drafts                     Include drafts\n      --optimize|--no-optimize     Enable (or disable --no-optimize) optimization of generated files\n  -c, --config=CONFIG              Set the path to extra config files (comma-separated)\n      --clear-cache[=CLEAR-CACHE]  Clear cache before build (optional cache key as regular expression) [default: false]\n  -p, --page=PAGE                  Build a specific page\n      --no-ignore-vcs              Changes watcher must not ignore VCS directories\n  -m, --metrics                    Show build metrics (duration and memory) of each step\n      --timeout=TIMEOUT            Sets the process timeout (max. runtime) in seconds [default: 7200]\n      --notify                     Send desktop notification on server start\n  -b, --background                 Run the server in the background\n  -h, --help                       Display help for the given command. When no command is given display help for the list command\n  -q, --quiet                      Do not output any message\n  -V, --version                    Display this application version\n      --ansi|--no-ansi             Force (or disable --no-ansi) ANSI output\n  -n, --no-interaction             Do not ask any interactive question\n  -v|vv|vvv, --verbose             Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug\n\nHelp:\n  The serve command starts the live-reloading-built-in web server.\n\n    cecil.phar serve\n    cecil.phar serve path\/to\/the\/working\/directory\n    cecil.phar serve --open\n    cecil.phar serve --drafts\n    cecil.phar serve --no-watch\n\n  To speed up local development you can enable incremental builds with the --incremental option.\n  When content pages change, Cecil rebuilds just those pages.\n  When templates change, Cecil rebuilds only pages using those templates (including Twig dependencies such as extends\/include).\n  Any other change (data, config, static or asset file, or file deletion) triggers a full rebuild:\n\n    cecil.phar serve --incremental\n\n  You can use a custom host and port by using the --host and --port options:\n\n    cecil.phar serve --host=127.0.0.1 --port=8080\n\n  To build the website with an extra configuration file, you can use the --config option.\n  This is useful during local development to override some settings without modifying the main configuration:\n\n    cecil.phar serve --config=config\/dev.yml\n\n  To start the server with changes watcher not ignoring VCS directories, run:\n\n    cecil.phar serve --no-ignore-vcs\n\n  To define the process timeout (in seconds), run:\n\n    cecil.phar serve --timeout=7200\n\n  To run the server in the background, run:\n\n    cecil.phar serve --background\n    cecil.phar serve -b\n\n  Then stop it with:\n\n    cecil.phar serve:stop\n\n  In background mode, file changes are not watched automatically.\nserve:background\nAlias of serve --background: starts the built-in server in the background without occupying the terminal.\nDescription:\n  Starts the built-in server in the background (alias of `serve --background`)\n\nUsage:\n  serve:background [options] [--] [&lt;path&gt;]\n\nHelp:\n  The serve:background command starts the built-in web server in the background.\n\n    cecil.phar serve:background\n    cecil.phar serve:background path\/to\/the\/working\/directory\n\n  This command is an alias of serve --background.\n\n  Stop the server with:\n\n    cecil.phar serve:stop\nserve:log\nDisplays the combined server and error logs.\nDescription:\n  Shows combined server and error logs\n\nUsage:\n  serve:log [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                  Use the given path as working directory\n\nOptions:\n  -l, --lines=LINES     Number of entries to display (default: 25)\n\nHelp:\n  The serve:log command displays entries from combined server and error logs, sorted by date.\n\n    cecil.phar serve:log\n    cecil.phar serve:log path\/to\/the\/working\/directory\n    cecil.phar serve:log --lines=100\n    cecil.phar serve:log -l 100\n\n  This command shows logs from `.cecil\/errors.log` and `.cecil\/server.log`.\n  It is useful for debugging issues with your local development server.",
      "content_html": "<h1>serve</h1>\n<p>Builds and serves the site locally.</p>\n<aside class=\"note note-warning\"><p>The web server is designed to aid website testing. It is not intended to be a full-featured web server and it should not be used on a public network.</p></aside>\n<h2 id=\"usage\">Usage</h2>\n<pre><code class=\"language-plaintext hljs plaintext\" translate=\"no\">Description:\n  Starts the built-in server\n\nUsage:\n  serve [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                             Use the given path as working directory\n\nOptions:\n  -o, --open                       Open web browser automatically\n      --host=HOST                  Server host [default: \"localhost\"]\n      --port=PORT                  Server port [default: \"8000\"]\n  -w, --watch|--no-watch           Enable (or disable --no-watch) changes watcher (enabled by default)\n  -i, --incremental                Enable incremental builds (rebuild only changed pages)\n  -d, --drafts                     Include drafts\n      --optimize|--no-optimize     Enable (or disable --no-optimize) optimization of generated files\n  -c, --config=CONFIG              Set the path to extra config files (comma-separated)\n      --clear-cache[=CLEAR-CACHE]  Clear cache before build (optional cache key as regular expression) [default: false]\n  -p, --page=PAGE                  Build a specific page\n      --no-ignore-vcs              Changes watcher must not ignore VCS directories\n  -m, --metrics                    Show build metrics (duration and memory) of each step\n      --timeout=TIMEOUT            Sets the process timeout (max. runtime) in seconds [default: 7200]\n      --notify                     Send desktop notification on server start\n  -b, --background                 Run the server in the background\n  -h, --help                       Display help for the given command. When no command is given display help for the list command\n  -q, --quiet                      Do not output any message\n  -V, --version                    Display this application version\n      --ansi|--no-ansi             Force (or disable --no-ansi) ANSI output\n  -n, --no-interaction             Do not ask any interactive question\n  -v|vv|vvv, --verbose             Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug\n\nHelp:\n  The serve command starts the live-reloading-built-in web server.\n\n    cecil.phar serve\n    cecil.phar serve path/to/the/working/directory\n    cecil.phar serve --open\n    cecil.phar serve --drafts\n    cecil.phar serve --no-watch\n\n  To speed up local development you can enable incremental builds with the --incremental option.\n  When content pages change, Cecil rebuilds just those pages.\n  When templates change, Cecil rebuilds only pages using those templates (including Twig dependencies such as extends/include).\n  Any other change (data, config, static or asset file, or file deletion) triggers a full rebuild:\n\n    cecil.phar serve --incremental\n\n  You can use a custom host and port by using the --host and --port options:\n\n    cecil.phar serve --host=127.0.0.1 --port=8080\n\n  To build the website with an extra configuration file, you can use the --config option.\n  This is useful during local development to override some settings without modifying the main configuration:\n\n    cecil.phar serve --config=config/dev.yml\n\n  To start the server with changes watcher not ignoring VCS directories, run:\n\n    cecil.phar serve --no-ignore-vcs\n\n  To define the process timeout (in seconds), run:\n\n    cecil.phar serve --timeout=7200\n\n  To run the server in the background, run:\n\n    cecil.phar serve --background\n    cecil.phar serve -b\n\n  Then stop it with:\n\n    cecil.phar serve:stop\n\n  In background mode, file changes are not watched automatically.</code></pre>\n<h2 id=\"serve-background\">serve:background</h2>\n<p>Alias of <code translate=\"no\">serve --background</code>: starts the built-in server in the background without occupying the terminal.</p>\n<pre><code class=\"language-plaintext hljs plaintext\" translate=\"no\">Description:\n  Starts the built-in server in the background (alias of `serve --background`)\n\nUsage:\n  serve:background [options] [--] [&lt;path&gt;]\n\nHelp:\n  The serve:background command starts the built-in web server in the background.\n\n    cecil.phar serve:background\n    cecil.phar serve:background path/to/the/working/directory\n\n  This command is an alias of serve --background.\n\n  Stop the server with:\n\n    cecil.phar serve:stop</code></pre>\n<h2 id=\"serve-log\">serve:log</h2>\n<p>Displays the combined server and error logs.</p>\n<pre><code class=\"language-plaintext hljs plaintext\" translate=\"no\">Description:\n  Shows combined server and error logs\n\nUsage:\n  serve:log [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                  Use the given path as working directory\n\nOptions:\n  -l, --lines=LINES     Number of entries to display (default: 25)\n\nHelp:\n  The serve:log command displays entries from combined server and error logs, sorted by date.\n\n    cecil.phar serve:log\n    cecil.phar serve:log path/to/the/working/directory\n    cecil.phar serve:log --lines=100\n    cecil.phar serve:log -l 100\n\n  This command shows logs from `.cecil/errors.log` and `.cecil/server.log`.\n  It is useful for debugging issues with your local development server.</code></pre>",
      "language": "en"
    },
    {
      "id": "https://cecil-945.pages.dev/documentation/commands/build/",
      "url": "https://cecil-945.pages.dev/documentation/commands/build/",
      "title": "build",
      "summary": "Build the website.",
      "date_published": "2020-12-19T00:00:00+00:00",
      "date_modified": "2026-10-10T00:00:00+00:00","content_text": "build\nBuilds the site.\nUsage\nDescription:\n  Builds the website\n\nUsage:\n  build [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                               Use the given path as working directory\n\nOptions:\n  -d, --drafts                       Include drafts\n  -u, --baseurl=BASEURL              Set the base URL\n  -o, --output=OUTPUT                Set the output directory\n      --optimize|--no-optimize       Enable (or disable --no-optimize) optimization of generated files\n      --dry-run                      Build without saving\n  -c, --config=CONFIG                Set the path to extra config files (comma-separated)\n      --clear-cache[=CLEAR-CACHE]    Clear cache before build (optional cache key as regular expression) [default: false]\n  -p, --page=PAGE                    Build a specific page\n      --render-subset=RENDER-SUBSET  Render a subset of pages\n      --show-pages                   Show list of built pages in a table\n  -m, --metrics                      Show build metrics (duration and memory) of each step\n      --notify                       Send desktop notification on build completion\n  -h, --help                         Display help for the given command. When no command is given display help for the list command\n  -q, --quiet                        Do not output any message\n  -V, --version                      Display this application version\n      --ansi|--no-ansi               Force (or disable --no-ansi) ANSI output\n  -n, --no-interaction               Do not ask any interactive question\n  -v|vv|vvv, --verbose               Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug\n\nHelp:\n  The build command generates the website in the output directory.\n\n    cecil.phar build\n    cecil.phar build path\/to\/the\/working\/directory\n    cecil.phar build --baseurl=https:\/\/example.com\/\n    cecil.phar build --output=_site\n\n  To build the website with optimization of generated files, you can use the --optimize option.\n  This is useful to reduce the size of the generated files and improve performance:\n\n    cecil.phar build --optimize\n    cecil.phar build --no-optimize\n\n  To build the website without overwriting files in the output directory, you can use the --dry-run option.\n  This is useful to check what would be built without actually writing files:\n\n    cecil.phar build --dry-run\n\n  To build the website with a specific subset of rendered pages, you can use the --render-subset option.\n  This is useful to build only a part of the website, for example, only \"hot\" pages or a specific section:\n\n    cecil.phar build --render-subset=subset\n\n  To show build steps metrics, run:\n\n    cecil.phar build --metrics",
      "content_html": "<h1>build</h1>\n<p>Builds the site.</p>\n<h2 id=\"usage\">Usage</h2>\n<pre><code class=\"language-plaintext hljs plaintext\" translate=\"no\">Description:\n  Builds the website\n\nUsage:\n  build [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                               Use the given path as working directory\n\nOptions:\n  -d, --drafts                       Include drafts\n  -u, --baseurl=BASEURL              Set the base URL\n  -o, --output=OUTPUT                Set the output directory\n      --optimize|--no-optimize       Enable (or disable --no-optimize) optimization of generated files\n      --dry-run                      Build without saving\n  -c, --config=CONFIG                Set the path to extra config files (comma-separated)\n      --clear-cache[=CLEAR-CACHE]    Clear cache before build (optional cache key as regular expression) [default: false]\n  -p, --page=PAGE                    Build a specific page\n      --render-subset=RENDER-SUBSET  Render a subset of pages\n      --show-pages                   Show list of built pages in a table\n  -m, --metrics                      Show build metrics (duration and memory) of each step\n      --notify                       Send desktop notification on build completion\n  -h, --help                         Display help for the given command. When no command is given display help for the list command\n  -q, --quiet                        Do not output any message\n  -V, --version                      Display this application version\n      --ansi|--no-ansi               Force (or disable --no-ansi) ANSI output\n  -n, --no-interaction               Do not ask any interactive question\n  -v|vv|vvv, --verbose               Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug\n\nHelp:\n  The build command generates the website in the output directory.\n\n    cecil.phar build\n    cecil.phar build path/to/the/working/directory\n    cecil.phar build --baseurl=https://example.com/\n    cecil.phar build --output=_site\n\n  To build the website with optimization of generated files, you can use the --optimize option.\n  This is useful to reduce the size of the generated files and improve performance:\n\n    cecil.phar build --optimize\n    cecil.phar build --no-optimize\n\n  To build the website without overwriting files in the output directory, you can use the --dry-run option.\n  This is useful to check what would be built without actually writing files:\n\n    cecil.phar build --dry-run\n\n  To build the website with a specific subset of rendered pages, you can use the --render-subset option.\n  This is useful to build only a part of the website, for example, only \"hot\" pages or a specific section:\n\n    cecil.phar build --render-subset=subset\n\n  To show build steps metrics, run:\n\n    cecil.phar build --metrics</code></pre>",
      "language": "en"
    },
    {
      "id": "https://cecil-945.pages.dev/documentation/commands/doctor/",
      "url": "https://cecil-945.pages.dev/documentation/commands/doctor/",
      "title": "doctor",
      "summary": "Diagnose the configuration, front matter, SEO and links.",
      "date_published": "2020-12-19T00:00:00+00:00",
      "date_modified": "2026-10-11T00:00:00+00:00","content_text": "doctor\nDiagnoses the current site and Cecil environment.\nUsage\nDescription:\n  Diagnoses the site configuration\n\nUsage:\n  doctor [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                       Use the given path as working directory\n\nOptions:\n  -c, --config=CONFIG        Set the path to an extra configuration file\n  -h, --help                 Display help for the given command. When no command is given display help for the list command\n  -q, --quiet                Do not output any message\n  -V, --version              Display this application version\n      --ansi|--no-ansi       Force (or disable --no-ansi) ANSI output\n  -n, --no-interaction       Do not ask any interactive question\n  -v|vv|vvv, --verbose       Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug\n\nHelp:\n  The doctor command diagnoses the current site and Cecil environment.\n\n    cecil.phar doctor\n    cecil.phar doctor path\/to\/the\/working\/directory\n\n  To inspect a site with an extra configuration file, run:\n\n    cecil.phar doctor --config=config.yml\ndoctor:frontmatter\nValidates pages front matter syntax.\nDescription:\n  Validates pages front matter syntax\n\nUsage:\n  doctor:frontmatter|doctor:fm [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                  Use the given path as working directory\n\nOptions:\n  -c, --config=CONFIG   Set the path to an extra configuration file\n  -p, --page=PAGE       Validate a single page relative to the pages directory\n      --ansi|--no-ansi  Force (or disable --no-ansi) ANSI output\n  -n, --no-interaction  Do not ask any interactive question\n  -h, --help            Display help for the given command. When no command is given display help for the list command\n  -q, --quiet           Do not output any message\n  -V, --version         Display this application version\n  -v|vv|vvv             Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug\ndoctor:seo\nAudits rendered HTML pages for common SEO issues.\nDescription:\n  Audits rendered HTML pages for common SEO issues\n\nUsage:\n  doctor:seo [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                  Use the given path as working directory\n\nOptions:\n  -c, --config=CONFIG   Set the path to an extra configuration file\n  -p, --page=PAGE       Audit a single page relative to the pages directory\n      --format=FORMAT   Output format: text (default) or json\n      --feedback        Include findings with feedback level\n      --include-virtual Include virtual pages (paginated, taxonomies) in audit\n      --fail-on=FAIL-ON Return a failure exit code when findings of this level or higher are found: bad (default), ok, feedback or never\nThe command builds the site in dry-run mode, then audits the rendered HTML output for a focused set of checks: title tag, meta description, canonical URL, heading structure, Open Graph tags, image alt attributes and estimated content length.\nBy default, virtual pages (paginated, taxonomy pages) are excluded from the audit. Use --include-virtual to include them.\nBy default, findings with level feedback are not listed.\nUse --feedback to include findings with level feedback in addition to other findings.\nOutput results as JSON for CI integration using --format=json.\nBy default, the command returns a failure exit code (1) when findings with level bad are found. Use --fail-on=ok to also fail on ok findings, --fail-on=feedback to fail on any finding, or --fail-on=never to always succeed.\nConfiguration\nCustomize audit thresholds and enabled checks in your configuration file:\ndoctor:\n  seo:\n    title: { min: 30, max: 60 }\n    description: { min: 120, max: 160 }\n    content: { min_words: 300 }\n    checks:\n      title: true\n      description: true\n      canonical: true\n      h1: true\n      og_tags: true\n      img_alt: true\n      content_length: true\n      lang_attribute: true\ndoctor:links\nChecks internal and external links of the rendered pages.\nDescription:\n  Checks internal and external links of the rendered pages\n\nUsage:\n  doctor:links [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                           Use the given path as working directory\n\nOptions:\n  -c, --config=CONFIG            Set the path to an extra configuration file\n  -p, --page=PAGE                Check links of a single page relative to the pages directory\n      --internal                 Check internal links\n      --external                 Check external links\n      --exclude=EXCLUDE          Exclude links matching this regular expression (multiple values allowed)\n      --timeout=TIMEOUT          External links request timeout, in seconds\n      --concurrency=CONCURRENCY  Number of concurrent external links requests\n      --no-cache                 Do not use cached external links results\n      --format=FORMAT            Output format: text (default) or json\n      --include-virtual          Include virtual pages (paginated, taxonomies) in audit\n      --feedback                 Include findings with feedback level\n      --fail-on=FAIL-ON          Return a failure exit code when findings of this level or higher are found: bad (default), ok, feedback or never\nThe command builds the site in dry-run mode, then checks the links found in the rendered HTML pages: links (&lt;a&gt;, &lt;area&gt;, &lt;link&gt;), images (src and srcset), scripts, iframes, media and inline styles. CSS files linked from the pages are also analyzed (url() and @import).\n\nInternal links must target a generated page, a static file or an asset. Fragments (#anchor) must match an element ID of the target page. Absolute URLs starting with baseurl are considered as internal links.\nExternal links are requested over HTTP (HEAD, then GET if the server refuses HEAD), concurrently. Successful results are cached (24 hours by default): use --no-cache to check them again.\n\nBy default, only internal links are checked:\nphp cecil.phar doctor:links                       # internal links (default)\nphp cecil.phar doctor:links --external            # external links only\nphp cecil.phar doctor:links --internal --external # both\nFindings levels:\n\n\n\nLevel\nMeaning\n\n\n\n\nbad\nBroken link: target not found, missing anchor, HTTP error (4xx, 5xx), unresolved host, etc.\n\n\nok\nWorking link that could be improved: redirection, missing trailing slash\n\n\nfeedback\nUnverifiable link: access denied (401, 403, 429), probably by a bot protection, or timeout\n\n\n\nLinks using other schemes than HTTP (e.g.: mailto:, tel:, data:) are ignored. Use --exclude (regular expression, case insensitive) to ignore other links.\n--page, --include-virtual, --feedback, --format and --fail-on options behave as with doctor:seo (see above).\nChecking external links requires the PHP cURL extension.\nConfiguration\nCustomize default settings in your configuration file:\ndoctor:\n  links:\n    internal: true    # check internal links\n    external: false   # check external links\n    timeout: 10       # external links request timeout, in seconds\n    concurrency: 10   # number of concurrent external links requests\n    cache_ttl: 86400  # external links successful results cache TTL, in seconds\n    exclude: []       # links to ignore (list of regular expressions), e.g.: ['linkedin\\.com', '^https:\/\/localhost']\n    useragent: ~      # User-Agent header of external links requests (`assets.remote.useragent.default` by default)",
      "content_html": "<h1>doctor</h1>\n<p>Diagnoses the current site and Cecil environment.</p>\n<h2 id=\"usage\">Usage</h2>\n<pre><code class=\"language-plaintext hljs plaintext\" translate=\"no\">Description:\n  Diagnoses the site configuration\n\nUsage:\n  doctor [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                       Use the given path as working directory\n\nOptions:\n  -c, --config=CONFIG        Set the path to an extra configuration file\n  -h, --help                 Display help for the given command. When no command is given display help for the list command\n  -q, --quiet                Do not output any message\n  -V, --version              Display this application version\n      --ansi|--no-ansi       Force (or disable --no-ansi) ANSI output\n  -n, --no-interaction       Do not ask any interactive question\n  -v|vv|vvv, --verbose       Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug\n\nHelp:\n  The doctor command diagnoses the current site and Cecil environment.\n\n    cecil.phar doctor\n    cecil.phar doctor path/to/the/working/directory\n\n  To inspect a site with an extra configuration file, run:\n\n    cecil.phar doctor --config=config.yml</code></pre>\n<h2 id=\"doctor-frontmatter\">doctor:frontmatter</h2>\n<p>Validates pages front matter syntax.</p>\n<pre><code class=\"language-plaintext hljs plaintext\" translate=\"no\">Description:\n  Validates pages front matter syntax\n\nUsage:\n  doctor:frontmatter|doctor:fm [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                  Use the given path as working directory\n\nOptions:\n  -c, --config=CONFIG   Set the path to an extra configuration file\n  -p, --page=PAGE       Validate a single page relative to the pages directory\n      --ansi|--no-ansi  Force (or disable --no-ansi) ANSI output\n  -n, --no-interaction  Do not ask any interactive question\n  -h, --help            Display help for the given command. When no command is given display help for the list command\n  -q, --quiet           Do not output any message\n  -V, --version         Display this application version\n  -v|vv|vvv             Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug</code></pre>\n<h2 id=\"doctor-seo\">doctor:seo</h2>\n<p>Audits rendered HTML pages for common SEO issues.</p>\n<pre><code class=\"language-plaintext hljs plaintext\" translate=\"no\">Description:\n  Audits rendered HTML pages for common SEO issues\n\nUsage:\n  doctor:seo [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                  Use the given path as working directory\n\nOptions:\n  -c, --config=CONFIG   Set the path to an extra configuration file\n  -p, --page=PAGE       Audit a single page relative to the pages directory\n      --format=FORMAT   Output format: text (default) or json\n      --feedback        Include findings with feedback level\n      --include-virtual Include virtual pages (paginated, taxonomies) in audit\n      --fail-on=FAIL-ON Return a failure exit code when findings of this level or higher are found: bad (default), ok, feedback or never</code></pre>\n<p>The command builds the site in dry-run mode, then audits the rendered HTML output for a focused set of checks: title tag, meta description, canonical URL, heading structure, Open Graph tags, image alt attributes and estimated content length.</p>\n<p>By default, virtual pages (paginated, taxonomy pages) are excluded from the audit. Use <code translate=\"no\">--include-virtual</code> to include them.</p>\n<p>By default, findings with level <code translate=\"no\">feedback</code> are not listed.</p>\n<p>Use <code translate=\"no\">--feedback</code> to include findings with level <code translate=\"no\">feedback</code> in addition to other findings.</p>\n<p>Output results as JSON for CI integration using <code translate=\"no\">--format=json</code>.</p>\n<p>By default, the command returns a failure exit code (<code translate=\"no\">1</code>) when findings with level <code translate=\"no\">bad</code> are found. Use <code translate=\"no\">--fail-on=ok</code> to also fail on <code translate=\"no\">ok</code> findings, <code translate=\"no\">--fail-on=feedback</code> to fail on any finding, or <code translate=\"no\">--fail-on=never</code> to always succeed.</p>\n<h3 id=\"configuration\">Configuration</h3>\n<p>Customize audit thresholds and enabled checks in your configuration file:</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">doctor:</span>\n  <span class=\"hljs-attr\">seo:</span>\n    <span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">{</span> <span class=\"hljs-attr\">min:</span> <span class=\"hljs-number\">30</span><span class=\"hljs-string\">,</span> <span class=\"hljs-attr\">max:</span> <span class=\"hljs-number\">60</span> <span class=\"hljs-string\">}</span>\n    <span class=\"hljs-attr\">description:</span> <span class=\"hljs-string\">{</span> <span class=\"hljs-attr\">min:</span> <span class=\"hljs-number\">120</span><span class=\"hljs-string\">,</span> <span class=\"hljs-attr\">max:</span> <span class=\"hljs-number\">160</span> <span class=\"hljs-string\">}</span>\n    <span class=\"hljs-attr\">content:</span> <span class=\"hljs-string\">{</span> <span class=\"hljs-attr\">min_words:</span> <span class=\"hljs-number\">300</span> <span class=\"hljs-string\">}</span>\n    <span class=\"hljs-attr\">checks:</span>\n      <span class=\"hljs-attr\">title:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">description:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">canonical:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">h1:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">og_tags:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">img_alt:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">content_length:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">lang_attribute:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<h2 id=\"doctor-links\">doctor:links</h2>\n<p>Checks internal and external links of the rendered pages.</p>\n<pre><code class=\"language-plaintext hljs plaintext\" translate=\"no\">Description:\n  Checks internal and external links of the rendered pages\n\nUsage:\n  doctor:links [options] [--] [&lt;path&gt;]\n\nArguments:\n  path                           Use the given path as working directory\n\nOptions:\n  -c, --config=CONFIG            Set the path to an extra configuration file\n  -p, --page=PAGE                Check links of a single page relative to the pages directory\n      --internal                 Check internal links\n      --external                 Check external links\n      --exclude=EXCLUDE          Exclude links matching this regular expression (multiple values allowed)\n      --timeout=TIMEOUT          External links request timeout, in seconds\n      --concurrency=CONCURRENCY  Number of concurrent external links requests\n      --no-cache                 Do not use cached external links results\n      --format=FORMAT            Output format: text (default) or json\n      --include-virtual          Include virtual pages (paginated, taxonomies) in audit\n      --feedback                 Include findings with feedback level\n      --fail-on=FAIL-ON          Return a failure exit code when findings of this level or higher are found: bad (default), ok, feedback or never</code></pre>\n<p>The command builds the site in dry-run mode, then checks the links found in the rendered HTML pages: links (<code translate=\"no\">&lt;a&gt;</code>, <code translate=\"no\">&lt;area&gt;</code>, <code translate=\"no\">&lt;link&gt;</code>), images (<code translate=\"no\">src</code> and <code translate=\"no\">srcset</code>), scripts, iframes, media and inline styles. CSS files linked from the pages are also analyzed (<code translate=\"no\">url()</code> and <code translate=\"no\">@import</code>).</p>\n<ul>\n<li><strong>Internal links</strong> must target a generated page, a static file or an asset. Fragments (<code translate=\"no\">#anchor</code>) must match an element ID of the target page. Absolute URLs starting with <code translate=\"no\">baseurl</code> are considered as internal links.</li>\n<li><strong>External links</strong> are requested over HTTP (<code translate=\"no\">HEAD</code>, then <code translate=\"no\">GET</code> if the server refuses <code translate=\"no\">HEAD</code>), concurrently. Successful results are cached (24 hours by default): use <code translate=\"no\">--no-cache</code> to check them again.</li>\n</ul>\n<p>By default, only internal links are checked:</p>\n<pre><code class=\"language-bash hljs bash\" translate=\"no\">php cecil.phar doctor:links                       <span class=\"hljs-comment\"># internal links (default)</span>\nphp cecil.phar doctor:links --external            <span class=\"hljs-comment\"># external links only</span>\nphp cecil.phar doctor:links --internal --external <span class=\"hljs-comment\"># both</span></code></pre>\n<p>Findings levels:</p>\n<table>\n<thead>\n<tr>\n<th>Level</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code translate=\"no\">bad</code></td>\n<td>Broken link: target not found, missing anchor, HTTP error (4xx, 5xx), unresolved host, etc.</td>\n</tr>\n<tr>\n<td><code translate=\"no\">ok</code></td>\n<td>Working link that could be improved: redirection, missing trailing slash</td>\n</tr>\n<tr>\n<td><code translate=\"no\">feedback</code></td>\n<td>Unverifiable link: access denied (401, 403, 429), probably by a bot protection, or timeout</td>\n</tr>\n</tbody>\n</table>\n<p>Links using other schemes than HTTP (e.g.: <code translate=\"no\">mailto:</code>, <code translate=\"no\">tel:</code>, <code translate=\"no\">data:</code>) are ignored. Use <code translate=\"no\">--exclude</code> (regular expression, case insensitive) to ignore other links.</p>\n<p><code translate=\"no\">--page</code>, <code translate=\"no\">--include-virtual</code>, <code translate=\"no\">--feedback</code>, <code translate=\"no\">--format</code> and <code translate=\"no\">--fail-on</code> options behave as with <code translate=\"no\">doctor:seo</code> (see above).</p>\n<aside class=\"note note-info\"><p>Checking external links requires the PHP cURL extension.</p></aside>\n<h3 id=\"configuration-1\">Configuration</h3>\n<p>Customize default settings in your configuration file:</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">doctor:</span>\n  <span class=\"hljs-attr\">links:</span>\n    <span class=\"hljs-attr\">internal:</span> <span class=\"hljs-literal\">true</span>    <span class=\"hljs-comment\"># check internal links</span>\n    <span class=\"hljs-attr\">external:</span> <span class=\"hljs-literal\">false</span>   <span class=\"hljs-comment\"># check external links</span>\n    <span class=\"hljs-attr\">timeout:</span> <span class=\"hljs-number\">10</span>       <span class=\"hljs-comment\"># external links request timeout, in seconds</span>\n    <span class=\"hljs-attr\">concurrency:</span> <span class=\"hljs-number\">10</span>   <span class=\"hljs-comment\"># number of concurrent external links requests</span>\n    <span class=\"hljs-attr\">cache_ttl:</span> <span class=\"hljs-number\">86400</span>  <span class=\"hljs-comment\"># external links successful results cache TTL, in seconds</span>\n    <span class=\"hljs-attr\">exclude:</span> <span class=\"hljs-string\">[]</span>       <span class=\"hljs-comment\"># links to ignore (list of regular expressions), e.g.: ['linkedin\\.com', '^https://localhost']</span>\n    <span class=\"hljs-attr\">useragent:</span> <span class=\"hljs-string\">~</span>      <span class=\"hljs-comment\"># User-Agent header of external links requests (`assets.remote.useragent.default` by default)</span></code></pre>",
      "language": "en"
    }
  ]
}
