Solution 1:

@mankoff got me on the right path. Here's what I had to do in order to get what I want:

  1. Copy Terminal.app to a new file (ex: MyTerminal.app)
  2. Change the icon of the app by:
    1. Copy an icon image to the clipboard from Preview
    2. Right-click (Command-click) on the app
    3. Select "Get Info"
    4. Click the app icon in the upper left corner
    5. Pasting the new icon image from the clipboard
  3. Right-click on the App and choose "Show Package Contents"
  4. Change the following values in Contents/Info.plist:
    1. "Bundle display name" -> "MyTerminal"
    2. "Bundle identifier" -> a unique app-specific string. I chose "ca.softcraft.myterminal" as I own the domain "softcraft.ca"
    3. Bundle name -> "MyTerminal"
    4. Document Types -> Delete
    5. URL Types -> Delete
    6. Application has localized display name -> uncheck
    7. Exported Type UTIs -> Delete
  5. I deleted a bunch of the localization settings (Contents/Resources/*.lproj) as they're not necessary for me; I just need English
  6. In Contents/Resources/English/InfoPlist.strings, I deleted the "CFBundleName" and "CFBundleDisplayName" override settings
  7. In Contents/Resources/Initial Settings, I deleted all but one of the *.terminal files.
    1. I'm using a custom terminal setting, but there's no reason you couldn't use Basic
    2. In Contents/Resources/Initial Settings/settings.plist, I made sure my "Default Settings" value was set to the name of my .terminal file
  8. I set the values in the .terminal file to match what I wanted on open
    1. This is just a .plist file with a different extension; you can use Property List Editor to modify it
    2. You can also set these using Terminal itself and then export them
    3. I mainly changed "CommandString" to be what I want launched when I run the new "app".

This works excellently. The new "Terminal" apps are independent of each other and of the main Terminal. I can spin off new ones fairly quickly now.

I also did this with Firefox to create a site-specific browser for my development website. (I had tried Mozilla Prism but found it too limiting).

Solution 2:

You could do something like this but with iTerm or Terminal.

Solution 3:

Just copy Terminal.app or iTerm.app and rename each copy ProjectA.app, ProjectB.app.