{"id":28068525,"url":"https://github.com/sushichan044/ajisai","last_synced_at":"2026-01-12T01:46:37.441Z","repository":{"id":292686677,"uuid":"978023328","full_name":"sushichan044/ajisai","owner":"sushichan044","description":"Simple preset manager for AI Coding Agents.  Package rule and prompt configurations, then deploy to multiple projects.","archived":false,"fork":false,"pushed_at":"2025-10-21T23:17:15.000Z","size":327,"stargazers_count":19,"open_issues_count":13,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-25T12:42:20.197Z","etag":null,"topics":["ai-coding","config-manager","cursor","devin","github-copilot","windsurf"],"latest_commit_sha":null,"homepage":"","language":"Go","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/sushichan044.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},"funding":{"github":"sushichan044"}},"created_at":"2025-05-05T10:57:33.000Z","updated_at":"2025-09-15T12:28:37.000Z","dependencies_parsed_at":"2025-05-27T16:29:32.002Z","dependency_job_id":"714285da-56a9-487e-94f2-2ceead369866","html_url":"https://github.com/sushichan044/ajisai","commit_stats":null,"previous_names":["sushichan044/aisync","sushichan044/ajisai"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/sushichan044/ajisai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sushichan044%2Fajisai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sushichan044%2Fajisai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sushichan044%2Fajisai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sushichan044%2Fajisai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sushichan044","download_url":"https://codeload.github.com/sushichan044/ajisai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sushichan044%2Fajisai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28331253,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T00:36:25.062Z","status":"ssl_error","status_checked_at":"2026-01-12T00:36:15.229Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["ai-coding","config-manager","cursor","devin","github-copilot","windsurf"],"created_at":"2025-05-12T17:34:06.828Z","updated_at":"2026-01-12T01:46:37.433Z","avatar_url":"https://github.com/sushichan044.png","language":"Go","funding_links":["https://github.com/sponsors/sushichan044"],"categories":[],"sub_categories":[],"readme":"# ajisai\n\n[![ci](https://github.com/sushichan044/ajisai/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/sushichan044/ajisai/actions/workflows/ci.yml)\n[![Go Reference](https://pkg.go.dev/badge/github.com/sushichan044/ajisai.svg)](https://pkg.go.dev/github.com/sushichan044/ajisai)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/sushichan044/ajisai)\n\n**Ajisai** is a simple preset manager for AI Coding Agents.\n\nYou can package rule and prompt configurations and reuse them across multiple projects.\n\n- [ajisai](#ajisai)\n  - [Features](#features)\n  - [Supported AI Coding Agents](#supported-ai-coding-agents)\n  - [Installation](#installation)\n  - [Quick Start](#quick-start)\n    - [1. Write Config](#1-write-config)\n    - [2. Write your rules](#2-write-your-rules)\n    - [3. Deploy your rules](#3-deploy-your-rules)\n  - [User Guide](#user-guide)\n    - [Defining and Importing Local Preset Packages](#defining-and-importing-local-preset-packages)\n      - [1. Define Your Package's Exports](#1-define-your-packages-exports)\n      - [2. Structure Your Rule and Prompt Files](#2-structure-your-rule-and-prompt-files)\n      - [3. Import the Local Package into Your Workspace](#3-import-the-local-package-into-your-workspace)\n    - [Sharing and Exporting Packages via Git](#sharing-and-exporting-packages-via-git)\n    - [Import Preset Packages via Git](#import-preset-packages-via-git)\n    - [Tip: Special `default` preset](#tip-special-default-preset)\n  - [File Reference](#file-reference)\n    - [Rule File (`*.md`)](#rule-file-md)\n    - [Prompt File (`*.md`)](#prompt-file-md)\n  - [Config Reference](#config-reference)\n  - [Contributing](#contributing)\n\n## Features\n\n- **Interoperability 🤖** - Simply by writing rules and prompts in a single format, they are automatically deployed to the appropriate format and directory for each supported AI Coding Agent.\n- **Reuse 📤** - You can import AI presets not only from local directories but also from remote Git repositories.\n- **Gradual Introduction ⏩**: Enables adoption without conflicting with existing rules.\n\n## Supported AI Coding Agents\n\n- [x] GitHub Copilot in VSCode\n  - Update VSCode to 1.100 or later\n  - Use latest GitHub Copilot extension\n  - **Make sure you set `chat.promptFiles` to true in project or user settings.**\n  - `mode` and `tools` property in prompt file is not supported yet\n  - Currently no support for using GitHub Copilot in other editors, IDEs.\n- [x] Cursor\n- [x] Windsurf\n  - Update Windsurf to Wave 8 or later\n- [ ] Cline\n- [ ] Roo Code\n- [x] Devin (Maybe partial support)\n  - Devin can pull rules from the Cursor format, so enabling Cursor integration and run `ajisai apply` in Devin's environment would be effective.\n    - \u003chttps://docs.devin.ai/onboard-devin/knowledge-onboarding#knowledge-101\u003e\n\n## Installation\n\n\u003cdetails\u003e\n  \u003csummary\u003ehomebrew\u003c/summary\u003e\n\n```bash\nbrew install sushichan044/tap/ajisai\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003ego install (requires Go 1.21+) \u003c/summary\u003e\n\n```bash\ngo install github.com/sushichan044/ajisai@latest\n```\n\n\u003e [!WARNING]\n\u003e Because `ajisai` embeds its revision information at **build time**, the **revision** isn't displayed correctly when installed using `go install`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003emise\u003c/summary\u003e\n\n```toml\n# mise.toml\n[tools]\n\"go:github.com/sushichan044/ajisai\" = \"latest\"\n```\n\n\u003e [!WARNING]\n\u003e Because `ajisai` embeds its revision information at **build time**, the **revision** isn't displayed correctly when installed using `go install`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003emanual\u003c/summary\u003e\n\nDownload the latest release from the [GitHub releases page](https://github.com/sushichan044/ajisai/releases).\n\n\u003c/details\u003e\n\n## Quick Start\n\n`ajisai` is controlled via CLI.\n\nThe default configuration file is `ajisai.yml` or `ajisai.yaml` in the current directory, but a different file can be specified using the `--config` (or `-c`) flag.\n\n### 1. Write Config\n\n```yaml\nworkspace:\n  imports:\n    local_rules:\n      type: local\n      path: \"./.ai\"\n      include:\n      - default # See Special `default` preset docs for details\n  integrations:\n    cursor:\n      enabled: true\n    github-copilot:\n      enabled: true\n    windsurf:\n      enabled: true\n```\n\n### 2. Write your rules\n\nWrite your rules under `.ai/rules/**/*.md`.\n\nRefer [Rule file - File Reference](#rule-file-md) for supported syntax and structure.\n\n### 3. Deploy your rules\n\nJust run `ajisai apply`.\n\n## User Guide\n\nIn ajisai, instructions for AI Coding Agents are handled using the following units:\n\n- **Preset**: A collection of specific Rules and reusable prompts.\n- **Package**: A unit for exporting multiple presets.\n\nWhen reusing packaged instructions, you specify the package to use and the presets to include from it.\n\n### Defining and Importing Local Preset Packages\n\nYou can define reusable preset packages locally, for example, within a dedicated directory in your project (like `.ai/`) or in a separate local directory. This same package definition approach is fundamental, whether you intend to use the package only locally or later share it via Git.\n\n#### 1. Define Your Package's Exports\n\nCreate an `ajisai.yml` or `ajisai.yaml` file in the root directory of your intended package (e.g., `\u003cproject root\u003e/.ai/ajisai.yaml`). In this file, you define what presets your package will export using the `package.exports` field. Each key under `exports` becomes a named preset that can be imported.\n\n   ```yaml\n   # Example: \u003cproject root\u003e/.ai/ajisai.yaml defining a package with an 'essential' preset\n   package:\n     exports:\n       # 'essential' is the name of the preset being exported from this package.\n       # Users will refer to this name when importing.\n       essential:\n         description: \"Essential coding standards and prompts for the project.\" # Optional\n         rules:\n           # List of glob patterns for rule files relative to this ajisai.yaml\n           - README.md # You can include markdown files directly as rules\n           - essential/rules/**/*.md\n         prompts:\n           # List of glob patterns for prompt files relative to this ajisai.yaml\n           - essential/prompts/**/*.md\n       # You can define and export multiple presets from a single package file:\n       # project-specific-utils:\n       #   rules:\n       #     - utils/rules/**/*.md\n       #   prompts:\n       #     - utils/prompts/**/*.md\n   ```\n\n#### 2. Structure Your Rule and Prompt Files\n\nOrganize your actual rule and prompt files according to the paths (glob patterns) you specified in the `package.exports` section. These paths are relative to the location of this package `ajisai.yaml` file.\n\n   For the `essential` preset example above, the directory structure within `.ai/` might look like this:\n\n   ```plaintext\n   \u003cproject root\u003e\n   └── .ai/\n       ├── essential/\n       │   ├── rules/\n       │   │   ├── common-guidelines.md\n       │   │   └── go-specific.md      # Included by essential/rules/**/*.md\n       │   └── prompts/\n       │       └── refactor-prompt.md  # Included by essential/prompts/**/*.md\n       ├── README.md                   # Directly included as a rule\n       └── ajisai.yaml                 # The package definition file itself\n   ```\n\n   Any rule file created or matching the glob patterns (e.g., a new file in `.ai/essential/rules/`) will automatically become part of the `essential` preset. Refer to the [File Reference](#file-reference) for the specific format and frontmatter expected in rule and prompt files.\n\n#### 3. Import the Local Package into Your Workspace\n\nTo use this locally defined package in your main project (or any other project that can access this path), modify your primary `ajisai.yml` (usually at the project root) to import it using `type: local`.\n\n   ```yaml\n   # \u003cproject root\u003e/ajisai.yaml (Main workspace configuration)\n   workspace:\n     imports:\n       # 'my_local_essentials' is an arbitrary name for this import instance in your workspace.\n       my_local_essentials:\n         type: local\n         path: ./.ai  # Path to the directory containing the package's ajisai.yaml\n         include:\n           - essential # Specify the name of the preset(s) to import from that package.\n     # ... other workspace configurations like integrations\n     integrations:\n       cursor:\n         enabled: true\n       # ...\n   ```\n\n   This setup allows you to manage and version control your shared AI instructions within a subdirectory of your project or a dedicated local repository.\n\n### Sharing and Exporting Packages via Git\n\nTo share your presets as a package via Git, allowing others (or yourself in different projects) to reuse them:\n\n1. Create an `ajisai.yml` or `ajisai.yaml` at repository root.\n\n2. Define exported preset in config file and place your preset content in the same way as [Defining and Importing Local Preset Packages](#defining-and-importing-local-preset-packages) section.\n\n3. Commit and push.\n\nYour package is now ready to be imported by others using its Git repository URL.\n\n### Import Preset Packages via Git\n\nFor example, to import the `essential` preset from a package shared via Git (as defined in the \"[Sharing and Exporting Packages via Git](#sharing-and-exporting-packages-via-git)\" guide), add the following configuration to the `ajisai.yml` in the project root of the importing workspace:\n\n\u003e [!NOTE]\n\u003e You need to have access to the repository where the package definitions are stored.\n\n```yaml\n# ajisai.yml in your workspace\nworkspace:\n  imports:\n    org-essential: # you can specify any name to identify imported preset packages.\n      type: git\n      repository: your-preset-package-repository-url # URL of the Git repository\n      include:\n      - essential # deploy `essential` preset from that package.\n\n  # In `integrations`, you specify the AI Coding Agent that will actually utilize the imported preset package.\n  integrations:\n    cursor:\n      enabled: true\n    github-copilot:\n      enabled: true\n    windsurf:\n      enabled: true\n```\n\n### Tip: Special `default` preset\n\nIf you do not have an `ajisai.yml` or `ajisai.yaml` file in your package root (e.g., a simple Git repository with just rules/prompts in a conventional structure), but your project adheres to a special directory structure as shown below, you can specify `default` in the `include` setting to have this structure recognized as a preset.\n\n- Write rules at `\u003cpackage root\u003e/rules/**/*.md`\n- Write prompts at `\u003cpackage root\u003e/prompts/**/*.md`\n\nSo you can import this to your workspace with:\n\n```yaml\nworkspace:\n  imports:\n    org-default:\n      type: git\n      repository: org-rules-repo-url # A repo with files in \u003croot\u003e/rules/ and/or \u003croot\u003e/prompts/\n      include:\n      - default # This 'default' refers to the special auto-detected preset\n    local-default:\n      type: local\n      path: \"./.ai\"\n      include:\n      - default\n```\n\n## File Reference\n\n### Rule File (`*.md`)\n\nEach rule Markdown file can have the following metadata in its frontmatter:\n\n| Key           | Type    | Required | Description                                                                                                |\n|---------------|---------|----------|------------------------------------------------------------------------------------------------------------|\n| `attach` | String  | Yes       | Situation you want AI to read this rule. \u003cbr\u003e Choose from `always`, `glob`, `agent-requested`, `manual`.  |\n| `globs`      | Array  | Yes \u003cbr\u003e (when `attach` is `glob`) \u003cbr\u003e | An array of glob patterns specifying which files this rule should apply to. \u003cbr\u003e (e.g., `[\"**/*.go\", \"!**/*_test.go\"]`). |\n| `description` | String  | Yes \u003cbr\u003e (when `attach` is `agent-requested`) \u003cbr\u003e | A brief description of what the prompt is for.                                                                |\n\nExample `rules/my-custom-rule.md`:\n\n```markdown\n---\nattach: always\nglobs:\n  - \"**/*.go\"\n  - \"!**/*_test.go\"\n---\n\nThis is the main content of the rule.\nIt describes the coding standard in detail...\n```\n\n### Prompt File (`*.md`)\n\n| Key           | Type    | Required | Description                                                                                                   |\n|---------------|---------|----------|---------------------------------------------------------------------------------------------------------------|\n| `description` | String  | No       | A brief description of what the prompt is for.                                                                |\n\nExample `prompts/my-refactor-prompt.md`:\n\n```markdown\n---\ndescription: A prompt to help refactor Go code for better readability.\n---\n\nPlease refactor the following Go code to improve its readability and maintainability, keeping in mind our company's Go coding standards.\n```\n\n## Config Reference\n\n```yaml\n# This file (`ajisai.yml` or `ajisai.yaml`) can define EITHER a package OR a workspace, but not both.\n\n# To define a re-usable package (typically placed at the root of a package repository or a dedicated local directory):\npackage:\n  name: \"sushichan044/example\" # Optional: Package name. Currently has no major effect but can be used for identification.\n  exports: # Define presets exported by this package.\n    essential: # This is the preset name, e.g., 'essential'.\n      description: \"Core set of rules and prompts.\" # Optional\n      rules: # Glob patterns for rule files, relative to this ajisai.yml\n      - README.md\n      - essential/rules/**/*.md\n      prompts: # Glob patterns for prompt files, relative to this ajisai.yml\n      - essential/prompts/**/*.md\n    # another-preset:\n    #   ...\n\n# To define a workspace configuration (typically placed at your project root):\nworkspace:\n  # Defines the preset packages to be used in this workspace.\n  imports:\n    local_rules: # Arbitrary identifier for this import source\n      type: local\n      path: \"./.ai\" # Path to the directory containing the package's ajisai.yml\n      include: # List of preset names to import from that package\n      - default # e.g., 'default' if the local package exports a 'default' preset or uses the special default structure\n    remote_rules:\n      type: git\n      repository: https://github.com/sushichan044/ai-presets.git\n      include:\n      - example1 # Name of a preset exported by the package in the Git repository\n  # Defines which AI Coding Agent integrations will utilize the imported presets.\n  integrations:\n    cursor:\n      enabled: true # Set to true to deploy applicable presets for Cursor\n    github-copilot:\n      enabled: true\n    windsurf:\n      enabled: true\n\nsettings:\n  # Specifies the directory where ajisai temporarily caches imported packages.\n  cacheDir: \"./.cache/ajisai\" # default: ./.cache/ajisai\n\n  # Sets the namespace that ajisai uses when deploying imports.\n  # This helps avoid conflicts if multiple tools write to similar paths.\n  # For example, if the namespace is `ajisai`, Cursor Rules are deployed to `.cursor/rules/ajisai/**/*.mdc`.\n  namespace: ajisai # default: ajisai\n\n  # Whether to enable experimental features.\n  experimental: false # default: false\n```\n\n## Contributing\n\nContributions are welcome! Please feel free to submit pull requests or open issues on the [GitHub repository](https://github.com/sushichan044/ajisai).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsushichan044%2Fajisai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsushichan044%2Fajisai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsushichan044%2Fajisai/lists"}