{"id":51407786,"url":"https://github.com/kiprasmel/codespace","last_synced_at":"2026-07-04T12:02:17.991Z","repository":{"id":323883873,"uuid":"1094951545","full_name":"kiprasmel/codespace","owner":"kiprasmel","description":"🎁 git worktrees, but convenient. auto-create from a branch/name, customize post-create scripts \u0026 outside-the-main-repo configurations (e.g. personal AGENTS.md). create \"stacks\" of projects to combine multiple repos for a single task. seamlessly move agents \u0026 heavy workloads to work in the cloud.","archived":false,"fork":false,"pushed_at":"2026-06-30T16:11:50.000Z","size":619,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-30T18:09:45.546Z","etag":null,"topics":["agents","configuration-management","git","git-worktree","git-worktrees","worktree","worktrees"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kiprasmel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-12T11:50:46.000Z","updated_at":"2026-06-30T16:11:55.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kiprasmel/codespace","commit_stats":null,"previous_names":["kiprasmel/codespace"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kiprasmel/codespace","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiprasmel%2Fcodespace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiprasmel%2Fcodespace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiprasmel%2Fcodespace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiprasmel%2Fcodespace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kiprasmel","download_url":"https://codeload.github.com/kiprasmel/codespace/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiprasmel%2Fcodespace/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35120682,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-04T02:00:05.987Z","response_time":113,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agents","configuration-management","git","git-worktree","git-worktrees","worktree","worktrees"],"created_at":"2026-07-04T12:02:17.429Z","updated_at":"2026-07-04T12:02:17.984Z","avatar_url":"https://github.com/kiprasmel.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# codespace\n\ngit worktrees, with convenience.\n\n\u003c!-- \nNOTE: THIS FILE IS AUTO-GENERATED. DO NOT EDIT MANUALLY.\n\nEDIT gen.README.md.sh instead.\n--\u003e\n\n## features\n\n- post-create scripts\n  - install dependencies, link files, etc\n- simple setup for storing files outside main repository (e.g. AGENTS.md with your preferences)\n  - while still tracking in git, just in a separate repo\n\n## use-cases\n\n- working on multiple features at the same time\n- reviewing PRs locally\n- running multiple agents in parallel on the same task, comparing output, picking best results\n- fast iteration in feature-based development\n  - customizable pre-defined stacks of repositories to create codespaces from\n  - work in parallel on different features\n  - shared context for agents - access to all repos involving a feature\n- ...\n\n## setup\n\nby default, will install to `$HOME/.local/bin/`:\n\n```sh\n./install.sh\n```\n\nor, custom prefix (results in `/usr/local/bin/`):\n\n```sh\nPREFIX=\"/usr/local\" ./install.sh\n```\n\n#### recommended aliases\n\n```sh\ngit config --global alias.cs \"\\!codespace\"\n```\n\n## usage\n\n### codespace\n\n```console\n$ codespace -h\n\nUsage:\ncodespace \u003cbranch\u003e [-b base] [-r [host]] [--clone [clone_url]] [--no-edit]\ncodespace \u003csub-command\u003e\n\n  \u003cbranch\u003e  can be existing (won't modify), or new (will create).\n\noptional flags:\n  -b, --base \u003cbranch\u003e\n            base branch to create from (default: remote HEAD).\n  -r, --remote [host]\n            create the codespace on a remote ssh host instead of locally.\n            if [host] is omitted, resolves from $CS_DEFAULT_REMOTE, then\n            $CODESPACE_CONFIG_ROOT/\u003crepo-id\u003e/[.codespace/]remote (per-repo),\n            then $CODESPACE_CONFIG_ROOT/\u003crel-org\u003e/[.codespace/]remote (per-org).\n            layout mirror: $HOME/X -\u003e remote:$HOME/codespace/X.\n            a thin local stub at the usual local path tracks the remote\n            codespace for find/edit/rm.\n            files declared via post-create.link-files-from-{repo,config}\n            (e.g. .env, AGENTS.md) are auto-shipped to the remote worktree\n            from the local sources at create time. discovery runs the\n            local post-create in a /tmp sandbox with CS_REMOTE_FILE_COLLECT=1.\n            see also: .codespace/remote-bootstrap.sh (host-level setup hook).\n  --clone [clone_url]\n            create a standalone clone instead of a worktree.\n            benefits: allows other checkouts/rebases in main repo,\n            better for one-off initialization on remote systems.\n            [clone_url] - inferred from remote if inside a git repo.\n  --no-edit\n            skip opening the new codespace/stack in an editor.\n            applies to worktree, stack, and the \u003cbranch\u003e shortcut.\n            (also implied by $CS_NO_EDIT or $CS_NO_INTERACTIVE)\n\n\nenv vars:\n  GUI_EDITOR or EDITOR  - for opening a newly created codespace in an editor.\n\n  CODESPACE_CONFIG_ROOT - dir where user-level configs for codespaces are placed.\n                          used to configure post-create scripts, link hidden files, etc.\n                          layout of the dir should be: \"/org/repo/\" (see also base-repo).\n                          inside (each of these may live in \".codespace/\" or at the\n                          config-dir root; the \".codespace/\" copy wins if both exist):\n                            - files, scripts, etc that are not in the repo itself.\n                            - \"post-create\" script - ran on codespace creation.\n                            - \"remote-bootstrap.sh\" - host-level setup for -r.\n                            - \"remote\" - default ssh target (one line).\n\n                          post-create lookup order (first hit wins):\n                            1. $CODESPACE_CONFIG_ROOT/\u003corg\u003e/\u003crepo\u003e/[.codespace/]post-create  (user)\n                            2. \u003crepo\u003e/.codespace/post-create                                 (committed in repo)\n                          in the user config dir the script may live in .codespace/ or at\n                          the config-dir root (.codespace/post-create wins); a repo-committed\n                          hook must live in .codespace/ (a root-level file there is ambiguous).\n                          the tool prints a note with the path used (and any ignored).\n                          the active config base dir is exported to the script as\n                          $CS_POST_CREATE_CONFIG_DIR so helpers like\n                          post-create.link-files-from-config resolve against it:\n                            - user-level: config root ($CODESPACE_CONFIG_ROOT/\u003corg\u003e/\u003crepo\u003e/)\n                            - repo-committed: \u003crepo\u003e/.codespace/\n\n                          remote-bootstrap.sh runs ON THE REMOTE before post-create\n                          (when -r/--remote is used). same lookup precedence as\n                          post-create. always runs; idempotency is its job.\n                          gets these env vars: CS_HOST, CS_REPO_ID, CS_BRANCH,\n                          CS_REMOTE_PATH, CS_REMOTE_BASE_REPO,\n                          CS_POST_CREATE_CONFIG_DIR.\n\n  CS_DEFAULT_REMOTE     - default ssh target for -r/--remote when no host given.\n                          overridden by an explicit host arg or .codespace/remote file.\n\n  CS_NO_INTERACTIVE     - if set, skip interactive prompts and use defaults.\n                          inferred if CURSOR_AGENT or CI is set.\n                          implies CS_NO_EDIT.\n\n  CS_NO_EDIT            - if set, skip opening the new codespace/stack in an editor.\n                          same effect as --no-edit.\n\n  CS_NO_FETCH           - if set, skip fetching remote before creating worktree.\n                          by default, fetches the base branch before creating.\n\n  CS_DEFAULT_CREATE_TYPE\n                        - what 'codespace create' defaults to.\n                          \"worktree\" (default) or \"stack\".\n\n  DEBUG                 - if set, prints every command executed.\n\n\n.git files / markers:\n  CODESPACE_IS_CLONE    - marker file created in .git/ when using 'create' with '--clone'.\n  .codespace-remote     - local stub marker for a remote codespace (created by -r).\n                          contains: host, relpath, kind, repo_id, branch.\n                          the local stub dir is otherwise empty; the real codespace\n                          lives at remote:$HOME/\u003crelpath\u003e.\n  .codespace/current    - marker at a codespace root (written by 'mark-current').\n                          contains: path, branch, kind, [task], created.\n                          git-excluded so it doesn't trip rm safety checks.\n  open                  - executable convenience script written at every codespace\n                          root (local + remote stub). runs 'codespace open' on its\n                          own dir to (re)open the codespace in an editor. for local\n                          worktrees/clones it's git-excluded so it won't show as\n                          untracked.\n\n\nsub-commands:\n  c, create   \u003cbranch\u003e [-b base] [-r [host]] [--no-edit]\n                                - alias for worktree or stack create.\n                                  (see CS_DEFAULT_CREATE_TYPE, default: worktree)\n  wt, worktree [create] \u003cbranch\u003e [-b base] [-r [host]] [--clone [url]] [--no-edit]\n                                - create a single-repo codespace (worktree or clone),\n                                  optionally on a remote ssh host (-r).\n  s, stack    [create] \u003cbranch\u003e [-r [host]]\n                                - create a multi-repo codespace (stack).\n                                  see 'codespace stack --help' for details.\n  post-create [cs_path]         - run the post-create script for a given codespace.\n                                  [cs_path] defaults to codespace inside cwd.\n  rm, remove  \u003cbranch|path\u003e     - remove a codespace (worktree or clone).\n                                  checks for uncommitted/unpushed changes before removing.\n                                  [-f, --force] - ignore safety checks.\n  sync        [branch|path] [-r [host]] [-m|--mode dirty|commits] [-w|--watch [-d]]\n                                - mirror a local codespace to a remote ssh host,\n                                  re-runnably. default syncs the uncommitted tree\n                                  + commit history (--mode commits = history only);\n                                  commits integrate both ways (local is main on\n                                  divergence). -w stays active, syncing changes\n                                  as you make them (both modes).\n                                  see 'codespace sync --help' for details.\n  ls, list    [-q] [--older-than \u003cdur\u003e] [-i] [--rm]\n                                - list this repo's codespaces (worktree/clone/\n                                  remote), then stacks containing it.\n                                  see 'codespace ls --help' for details.\n  find        \u003cbranch\u003e          - find codespace/stack path by branch name.\n  open, edit  \u003cbranch|path\u003e [-r [host]]\n                                - find codespace/stack and open in editor.\n                                  remote codespaces open over ssh-remote.\n                                  -r [host]: open the REMOTE counterpart of a\n                                  local codespace, syncing it first (live).\n  mark-current [task]           - write a .codespace/current marker at the current\n                                  codespace root (path/branch/kind[/task]) so agents\n                                  know where they are. git-excludes the marker.\n  current     [key]             - print the current codespace's .codespace/current\n                                  marker (walks up). [key] prints one field (e.g. path).\n  config                        - absolute path of config dir of the repo\n  config init                   - init config dir + post-create script for current repo.\n  repo-id     [rel_to]          - get the repo ID to locate appropriate config location\n                                  in \"$CODESPACE_CONFIG_ROOT\".\n                                  assumes that repositories are placed in \"$HOME/org/repo\"\n                                  (controllable via [rel_to], which defaults to \"$HOME\").\n                                  extracts \"/org/repo\" portion of \"$PWD\" wrt [rel_to].\n  base-repo                     - absolute path to the root of the base repository.\n  cleanpath   \u003cstring\u003e          - sanitize path for worktree dir (replace /, :, spaces etc)\n  is-checkout-not-worktree      - prints 1 if we are in a branch checkout in the main repo,\n  hide     \u003cfile\u003e \u003cfile2\u003e...    - add file(s) to .git/info/exclude (local gitignore).\n                                  note: affects not only the worktree, but the base repo.\n```\n\n### codespace stack\n\n```console\n$ codespace stack -h\n\nUsage:\ncodespace stack [create] \u003cbranch\u003e [-s stack_name] [-b base] [-r [host]] [--clone|--worktree] [--no-edit]\ncodespace stack init [\u003cpath\u003e]\ncodespace stack extend \u003cname\u003e[,\u003cname2\u003e]...\ncodespace stack ls [-g|--global] [-i|--integrated] [-S|--size] [--no-gh]\n                   [--no-cache] [--older-than \u003cduration\u003e] [--by-commit-age]\n                   [--rm] [-q|--quiet]\n\n  \u003cbranch\u003e       branch name to create across all repos in the stack.\n  \u003cname\u003e         stack config name from stacks.json, or repo name from org directory.\n\noptional flags:\n  -b, --base \u003cbranch\u003e\n                 base branch to create from (default: remote HEAD).\n  -s, --stack \u003cstack_name\u003e\n                 stack config name from stacks.json (default: \"default\").\n  -r, --remote [host]\n                 create the stack on a remote ssh host instead of locally.\n                 if [host] is omitted, resolves from $CS_DEFAULT_REMOTE / config.\n                 layout mirror: $HOME/X -\u003e remote:$HOME/codespace/X.\n                 a thin local stub at the usual local path tracks the remote stack.\n  --clone        force clone mode (fresh clones for all repos).\n  --worktree     force worktree mode (create worktrees from local repos).\n  --no-edit      skip opening the new stack in an editor.\n                 (also implied by $CS_NO_EDIT or $CS_NO_INTERACTIVE)\n\n\nenv vars:\n  CS_STACK_DEFAULT_CREATE_MODE\n                 default creation mode: \"worktree\" (default) or \"clone\".\n  CS_DEFAULT_REMOTE\n                 default ssh target for -r/--remote when no host given.\n                 overridden by explicit host or .codespace/remote file.\n  CS_NO_INTERACTIVE\n                 if set, skip interactive prompts and use defaults.\n                 inferred if CURSOR_AGENT, CI, other vars are set.\n                 implies CS_NO_EDIT.\n  CS_NO_EDIT     if set, skip opening the new stack in an editor.\n                 same effect as --no-edit.\n\n\nconfig:\n  stacks.json    lookup order at each walk-up level (first hit wins):\n                   1. $CODESPACE_CONFIG_ROOT/\u003crel\u003e/.codespace/stacks.json\n                   2. $CODESPACE_CONFIG_ROOT/\u003crel\u003e/stacks.json\n                   3. \u003corg_dir\u003e/.codespace/stacks.json   (committed in org dir)\n                   4. \u003corg_dir\u003e/stacks.json              (committed in org dir)\n                 user-level (1-2) wins over org-committed (3-4).\n                 the tool prints a note with the path used (and any ignored).\n                 stack-post-create.sh is looked up next to the winning stacks.json.\n                 format: { \"version\": \"0\", \"stacks\": { \"stack-id\": [\"repo1\", \"repo2\"] } }\n                 repo values:\n                   - repo names (siblings in org directory)\n                   - clone URLs\n                   - objects: { \"name\": \"repo\", \"cloneURL\": \"url\" }\n\n\nsub-commands:\n  create \u003cbranch\u003e [-s stack_name] [-b base] [-r [host]] [--clone|--worktree] [--no-edit]\n                  create a new stack with repos from a stack configuration.\n                  \"create\" is implied if omitted.\n                  if no stacks.json is found, creates a single worktree instead\n                  (with a note) rather than failing.\n                  -r/--remote: provision the stack on a remote ssh host.\n                  layout mirror: $HOME/X -\u003e remote:$HOME/codespace/X.\n                  remote-bootstrap.sh (per-repo, host-level) runs before\n                  each repo's post-create.\n\n  post-create [-s stack_name]\n                  run the stack post-create script in an existing stack.\n                  must be run from within a stack directory (or child).\n                  [-s stack_name] specifies which stack config to use (default: \"default\").\n\n  extend \u003cname\u003e[,\u003cname2\u003e]...\n                  extend current stack with repos from stack configs or repo names.\n                  first checks stacks.json, then falls back to repos in \u003corg\u003e directory.\n                  must be run from within an existing stack directory (or child).\n                  uses the same creation mode (clone/worktree) as existing repos.\n\n  init [\u003cpath\u003e]   create a stacks.json configuration file in CODESPACE_CONFIG_ROOT.\n\t\t\t\t  \u003cpath\u003e is the directory where stacks will be held.\n                  if \u003cpath\u003e is provided, uses that directory.\n                  otherwise, prompts to select current or parent directory.\n\n  ls [-g|--global] [-i|--integrated] [-S|--size] [--no-gh] [--no-cache]\n     [--older-than \u003cduration\u003e] [--by-commit-age] [--rm] [-q|--quiet]\n                  list stacks in the current org (or all orgs with -g).\n                  progress is reported on stderr for the slow modes (-i/--size);\n                  integration checks run in parallel across stacks and repos.\n                  filters:\n                    -i, --integrated      keep only fully-integrated stacks. a\n                                          repo's branch counts as integrated if\n                                          it has a merged PR (looked up via gh,\n                                          so squash/rebase merges are detected)\n                                          or carries no commits beyond its base\n                                          (tag-along repos don't block a stack).\n                                          prints a per-repo breakdown (merged #N\n                                          / empty / open / remote-gone) under\n                                          each stack.\n                                          merged PRs are cached (a merge is\n                                          permanent) under\n                                          $CODESPACE_CONFIG_ROOT/.cache so\n                                          repeat runs skip gh; a fully-integrated\n                                          stack is also cached whole (keyed on its\n                                          branch heads) and skipped entirely until\n                                          it changes. no cache is kept if that var\n                                          is unset.\n                                          falls back to a local ancestor check\n                                          (and a deleted-remote-branch heuristic)\n                                          when gh is unavailable.\n                    --no-gh               skip gh; use the local ancestor check\n                                          only (offline; misses squash-merges).\n                                          same as CS_NO_GH=1.\n                    --no-cache            ignore the merged-PR and stack-level\n                                          caches and recompute everything.\n                    -S, --size            show a SIZE column (disk usage) and\n                                          sort each org's stacks largest-first.\n                    --older-than \u003cdur\u003e    keep only stacks older than \u003cdur\u003e.\n                                          \u003cdur\u003e = 30d|2w|6h|45m|3600s.\n                                          age = stack dir mtime by default.\n                    --by-commit-age       use most recent commit timestamp across\n                                          all repo branches as age, not dir mtime.\n                    -g, --global          scan every org registered under\n                                          $CODESPACE_CONFIG_ROOT (deduped).\n                    --rm                  review + delete stacks. opens a\n                                          git-rebase-todo-style file listing\n                                          every stack (integrated ones default\n                                          'rm' and are listed first, the rest\n                                          'keep'), with aligned info columns\n                                          (INT [SIZE] AGE) and the instructions\n                                          at the bottom; edit the actions, save\n                                          and close, and the 'rm' ones are\n                                          deleted. each repo is safety-checked\n                                          (uncommitted/unpushed) and unsafe\n                                          stacks are skipped with a warning; for\n                                          force-delete use 'codespace rm -f'.\n                                          with $CS_NO_INTERACTIVE there's no\n                                          editor: the integrated stacks are\n                                          removed directly.\n                    -q, --quiet           print only stack paths (pipe-friendly).\n                  tuning (env vars):\n                    CS_STACK_LS_JOBS      max parallel integration checks\n                                          (default: CPU count, capped at 8).\n                    CS_GH_JOBS            max parallel gh queries\n                                          (default: min(jobs, 6)).\n                    CS_GH_PR_LIMIT        fixed bulk merged-PR window per repo;\n                                          default adapts to repo count queried\n                                          (100-1000, ~constant total fetch). a\n                                          merge beyond it is recovered with a\n                                          targeted query for branches deleted\n                                          on the remote.\n                    CS_GH_OPEN_TTL        seconds an open branch is trusted before\n                                          re-querying gh (default: 21600 = 6h).\n\n\nexamples:\n  codespace stack create feature1              # create stack \"feature1\",\n                                               # add repos defined in \"default\" stack config in stacks.json,\n                                               # checkout each repo into \"feature1\" branch.\n\n  codespace stack create feature1 -s config2    # create stack from \"config2\" config in stacks.json.\n  codespace stack create feature1 -b develop   # base the stack off of the \"develop\" branch,\n                                               # instead of repository's default branch.\n  codespace stack create feature1 --clone      # create clones, instead of worktrees.\n  codespace stack create feature1 -r myhost    # provision on remote myhost (no local copy).\n\n  codespace stack post-create            # run stack post-create script (uses \"default\" config)\n  codespace stack post-create -s full    # run post-create using \"full\" stack config\n\n  codespace stack extend be              # add repos from \"be\" stack config\n  codespace stack extend be,infra        # add repos from \"be\" and \"infra\" stack configs\n  codespace stack extend backend         # add \"backend\" repo directly\n\n  codespace stack init                   # create stacks.json config file (interactive)\n  codespace stack init ~/projects/myorg  # create config for stacks held in specified path\n\n  codespace stack ls                              # list stacks in current org\n  codespace stack ls --integrated                 # only stacks merged into default\n  codespace stack ls --older-than 30d             # only stacks older than 30 days\n  codespace stack ls --integrated --rm            # delete merged stacks (safety-checked)\n  codespace stack ls -g -q | xargs -I{} echo {}   # all stacks across orgs (paths only)\n\nsee also:\n  codespace sync                         # mirror an existing local stack to a\n                                         # remote ssh host, re-runnably (run it\n                                         # from inside the stack dir).\n```\n\n#### sample stacks.json\n\n```json\n{\n    \"version\": \"0\",\n    \"stacks\": {\n    \t\"default\": [\n            { \"name\": \"frontend\", \"cloneURL\": \"git@github.com:kiprasmel/frontend.git\" }\n            { \"name\": \"backend\", \"cloneURL\": \"git@github.com:kiprasmel/backend.git\" },\n    \t],\n        \"all\": [\n            { \"name\": \"admin\", \"cloneURL\": \"git@github.com:kiprasmel/admin.git\" },\n            { \"name\": \"backend\", \"cloneURL\": \"git@github.com:kiprasmel/backend.git\" },\n            { \"name\": \"frontend\", \"cloneURL\": \"git@github.com:kiprasmel/frontend.git\" },\n            { \"name\": \"infra\", \"cloneURL\": \"git@github.com:kiprasmel/infra.git\" },\n            { \"name\": \"mobile\", \"cloneURL\": \"git@github.com:kiprasmel/mobile.git\" }\n        ],\n        \"fe\": [\n            { \"name\": \"frontend\", \"cloneURL\": \"git@github.com:kiprasmel/frontend.git\" }\n        ],\n        \"be\": [\n            { \"name\": \"backend\", \"cloneURL\": \"git@github.com:kiprasmel/backend.git\" }\n        ]\n    }\n}\n```\n\nnote: after you setup stacks, it usually becomes the default way you use codespace.\nto shorten the command, you can add to your config (e.g. `.zshrc`):\n\n```sh\nexport CS_DEFAULT_CREATE_TYPE=\"stack\"\n```\n\nso instead of `codespace stack \u003cbranch\u003e`, you can just do `codespace \u003cbranch\u003e`,\nwhich will try with a stack, and if none setup - will default back to a regular worktree.\n\n## testing\n\nbats-based test suite covering config resolution \u0026 post-create behavior.\n\n```sh\n./test/setup.sh   # one-time: vendor bats-core + helpers into test/vendor/\n./test/run.sh     # run all tests; forwards args to bats\n```\n\n## misc\n\n- working in remote codespaces: [./remote-codespaces.md](./remote-codespaces.md)\n- integrating with agents: [./integrating-with-agents.md](./integrating-with-agents.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiprasmel%2Fcodespace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkiprasmel%2Fcodespace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiprasmel%2Fcodespace/lists"}